{"id":4688,"date":"2019-02-07T06:00:49","date_gmt":"2019-02-07T04:00:49","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=4688"},"modified":"2019-02-14T07:39:54","modified_gmt":"2019-02-14T05:39:54","slug":"aritmetica-lunar","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/aritmetica-lunar\/","title":{"rendered":"Aritm\u00e9tica lunar"},"content":{"rendered":"<p>En la <a href=\"http:\/\/bit.ly\/2SaE9ZH\">aritm\u00e9tica lunar<\/a> la suma y el producto se hace como en la terr\u00edcola salvo que sus tablas de sumar y de multiplicar son distintas. La suma lunar de dos d\u00edgitos es su m\u00e1ximo (por ejemplo, 1 + 3 = 3 y 7 + 4 = 7) y el producto lunar de dos d\u00edgitos es su m\u00ednimo (por ejemplo, 1 x 3 = 1 y 7 x 4 = 4). Por tanto,<\/p>\n<pre lang=\"text\"> \n     3 5 7        3 5 7\n   +   6 4      x   6 4\n   -------      -------\n     3 6 7        3 4 4\n                3 5 6\n                -------\n                3 5 6 4\n<\/pre>\n<p>Definir las funciones<\/p>\n<pre lang=\"text\"> \n   suma     :: Integer -> Integer -> Integer\n   producto :: Integer -> Integer -> Integer\n<\/pre>\n<p>tales que<\/p>\n<ul>\n<li>(suma x y) es la suma lunar de x e y. Por ejemplo,<\/li>\n<\/ul>\n<pre lang=\"text\"> \n     suma 357 64  ==  367\n     suma 64 357  ==  367\n     suma 1 3     ==  3\n     suma 7 4     ==  7\n<\/pre>\n<ul>\n<li>(producto x y) es el producto lunar de x e y. Por ejemplo,<\/li>\n<\/ul>\n<pre lang=\"text\"> \n     producto 357 64  ==  3564\n     producto 64 357  ==  3564\n     producto 1 3     ==  1\n     producto 7 4     ==  4\n<\/pre>\n<p>Comprobar con QuickCheck que la suma y el producto lunar son conmutativos.<\/p>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Test.QuickCheck\n\nsuma :: Integer -> Integer -> Integer\nsuma 0 0 = 0\nsuma x y = max x2 y2 + 10 * suma x1 y1\n  where (x1,x2) = x `divMod` 10\n        (y1,y2) = y `divMod` 10\n\nproducto :: Integer -> Integer -> Integer\nproducto 0 _ = 0\nproducto x y = productoDigitoNumero x2 y `suma` (10 * producto x1 y)\n  where (x1, x2) = x `divMod` 10\n\n-- (productoDigitoNumero d x) es el producto del d\u00edgito d por el n\u00famero\n-- x. Por ejemplo,\n--    productoDigitoNumero 4 357  ==  344\n--    productoDigitoNumero 6 357  ==  356\nproductoDigitoNumero :: Integer -> Integer -> Integer\nproductoDigitoNumero _ 0 = 0\nproductoDigitoNumero d x = min d x2 + 10 * productoDigitoNumero d x1\n  where (x1, x2) = x `divMod` 10\n\n-- La propiedad es\nprop_conmutativa :: Positive Integer -> Positive Integer -> Bool\nprop_conmutativa (Positive x) (Positive y) =\n  suma x y == suma y x &&\n  producto x y == producto y x\n\n-- La comprobaci\u00f3n es\n--    \u03bb> quickCheck prop_conmutativa\n--    +++ OK, passed 100 tests.\n<\/pre>\n<h4>Pensamiento<\/h4>\n<blockquote><p>\nCantad conmigo en coro: saber, nada sabemos,<br \/>\nde arcano mar vinimos, a ignota mar iremos &#8230;<br \/>\nLa luz nada ilumina y el sabio nada ense\u00f1a.<br \/>\n\u00bfQu\u00e9 dice la palabra? \u00bfQu\u00e9 el agua de la pe\u00f1a?<\/p>\n<p>Antonio Machado\n<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>En la aritm\u00e9tica lunar la suma y el producto se hace como en la terr\u00edcola salvo que sus tablas de sumar y de multiplicar son distintas. La suma lunar de dos d\u00edgitos es su m\u00e1ximo (por ejemplo, 1 + 3 = 3 y 7 + 4 = 7) y el producto lunar de dos d\u00edgitos&#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":[4],"tags":[328,6,146],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/4688"}],"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=4688"}],"version-history":[{"count":3,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/4688\/revisions"}],"predecessor-version":[{"id":4727,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/4688\/revisions\/4727"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=4688"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=4688"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=4688"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}