{"id":8127,"date":"2023-05-16T06:00:46","date_gmt":"2023-05-16T04:00:46","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=8127"},"modified":"2023-05-08T18:50:50","modified_gmt":"2023-05-08T16:50:50","slug":"16-may-23","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/16-may-23\/","title":{"rendered":"TAD de los polinomios: Regla de Ruffini con representaci\u00f3n densa"},"content":{"rendered":"<p>Usando el <a href=\"https:\/\/bit.ly\/3KwqXYu\">tipo abstracto de los polinomios<\/a> definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   ruffiniDensa :: Int -> [Int] -> [Int]\n<\/pre>\n<p>tal que <code>ruffiniDensa r cs<\/code> es la lista de los coeficientes del cociente junto con el rsto que resulta de aplicar la regla de Ruffini para dividir el polinomio cuya representaci\u00f3n densa es <code>cs<\/code> entre <code>x-r<\/code>. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   ruffiniDensa 2 [1,2,-1,-2] == [1,4,7,12]\n   ruffiniDensa 1 [1,2,-1,-2] == [1,3,2,0]\n<\/pre>\n<p>ya que<\/p>\n<pre lang=\"text\">\n     | 1  2  -1  -2           | 1  2  -1  -2\n   2 |    2   8  14         1 |    1   3   2\n   --+--------------        --+-------------\n     | 1  4   7  12           | 1  3   2   0\n<\/pre>\n<p><b>Soluciones<\/b><\/p>\n<p>A continuaci\u00f3n se muestran las <a href=\"#haskell\">soluciones en Haskell<\/a> y las <a href=\"#python\">soluciones en Python<\/a>.<\/p>\n<p><a name=\"haskell\"><\/a><br \/>\n<b>Soluciones en Haskell<\/b><\/p>\n<pre lang=\"haskell\">\nimport Test.QuickCheck\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\nruffiniDensa :: Int -> [Int] -> [Int]\nruffiniDensa _ [] = []\nruffiniDensa r p@(c:cs) =\n  c : [x+r*y | (x,y) <- zip cs (ruffiniDensa r p)]\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\nruffiniDensa2 :: Int -> [Int] -> [Int]\nruffiniDensa2 r =\n  scanl1 (\\s x -> s * r + x)\n\n-- Comprobaci\u00f3n de equivalencia\n-- ============================\n\n-- La propiedad es\nprop_ruffiniDensa :: Int -> [Int] -> Bool\nprop_ruffiniDensa r cs =\n  ruffiniDensa r cs == ruffiniDensa2 r cs\n\n-- La comprobaci\u00f3n es\n--    \u03bb> quickCheck prop_ruffiniDensa\n--    +++ OK, passed 100 tests.\n<\/pre>\n<p><a name=\"python\"><\/a><br \/>\n<b>Soluciones en Python<\/b><\/p>\n<pre lang=\"python\">\ndef ruffiniDensa(r: int, p: list[int]) -> list[int]:\n    if not p:\n        return []\n    res = [p[0]]\n    for x in p[1:]:\n        res.append(x + r * res[-1])\n    return res\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Usando el tipo abstracto de los polinomios definir la funci\u00f3n ruffiniDensa :: Int -> [Int] -> [Int] tal que ruffiniDensa r cs es la lista de los coeficientes del cociente junto con el rsto que resulta de aplicar la regla de Ruffini para dividir el polinomio cuya representaci\u00f3n densa es cs entre x-r. Por ejemplo,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"footnotes":"","_jetpack_memberships_contains_paid_content":false},"categories":[581],"tags":[265],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/8127"}],"collection":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/comments?post=8127"}],"version-history":[{"count":1,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/8127\/revisions"}],"predecessor-version":[{"id":8128,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/8127\/revisions\/8128"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=8127"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=8127"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=8127"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}