{"id":5081,"date":"2019-06-05T06:00:32","date_gmt":"2019-06-05T04:00:32","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=5081"},"modified":"2019-06-04T17:52:59","modified_gmt":"2019-06-04T15:52:59","slug":"numero-primo-de-sheldon","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/numero-primo-de-sheldon\/","title":{"rendered":"N\u00famero primo de Sheldon"},"content":{"rendered":"<p>En el <a href=\"https:\/\/youtu.be\/SCDuQN6s_hU\">episodio n\u00famero 73 de la serie \u00abThe Big Bang Theory\u00bb<\/a>, Sheldon Cooper enuncia lo siguiente:<\/p>\n<blockquote><p>\n  \u00abEl mejor n\u00famero es el 73. El 73 es el 21-\u00e9simo n\u00famero primo. Al invertir sus cifras obtenemos 37, que es el primo n\u00famero 12. Y al invertir este obtenemos 21, que es el producto de, agarraos fuerte, 7 y 3.\u00bb\n<\/p><\/blockquote>\n<p>Se define un <em>n\u00famero primo de Sheldon<\/em> como: el n-\u00e9simo n\u00famero primo p(n) ser\u00e1 un primo de Sheldon si cumple que el producto de sus d\u00edgitos es n y si, adem\u00e1s, el n\u00famero que se obtiene al invertir sus cifras, rev(p(n)), es el rev(n)-\u00e9simo n\u00famero primo; es decir, si rev(p(n)) = p(rev(n)).<\/p>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\"> \n   esPrimoSheldon :: Int -> Bool\n<\/pre>\n<p>tal que (esPrimoSheldon x) se verifica si x un primo de Sheldon. Por ejemplo,<\/p>\n<pre lang=\"text\">_ \n   esPrimoSheldon 73  ==  True\n   esPrimoSheldon 79  ==  False\n<\/pre>\n<p>Comprobar con QuickCheck que 73 es el \u00fanico primo de Sheldon.<\/p>\n<p><strong>Referencia<\/strong>: Este ejercicio est\u00e1 basado en la noticia <a href=\"http:\/\/bit.ly\/2IfA27Q\">Descubierta una nueva propiedad de los n\u00fameros primos gracias a The Big Bang Theory<\/a> donde pod\u00e9is leer m\u00e1s informaci\u00f3n sobre el tema, entre ello la  prueba de que el 73 es el \u00fanico n\u00famero primo de Sheldon.<\/p>\n<p><strong>Nota<\/strong>: Este ejercicio ha sido propuesto por \u00c1ngel Ruiz Campos.<\/p>\n<h4>Soluciones<\/h4>\n<p>[schedule expon=&#8217;2019-06-12&#8242; expat=\u00bb06:00&#8243;]<\/p>\n<ul>\n<li>Las soluciones se pueden escribir en los comentarios hasta el 12 de junio.\n<li>El c\u00f3digo se debe escribir entre una l\u00ednea con &#60;pre lang=\u00bbhaskell\u00bb&#62; y otra con &#60;\/pre&#62;\n<\/ul>\n<h4>Pensamiento<\/h4>\n<blockquote><p>\nEl mejor n\u00famero es el 73. El 73 es el 21-\u00e9simo n\u00famero primo. Al invertir sus cifras obtenemos 37, que es el primo n\u00famero 12. Y al invertir este obtenemos 21, que es el producto de, agarraos fuerte, 7 y 3.<\/p>\n<p>Sheldon Cooper\n<\/p><\/blockquote>\n<p>[\/schedule]<\/p>\n<p>[schedule on=&#8217;2019-06-12&#8242; at=\u00bb06:00&#8243;]<\/p>\n<pre lang=\"haskell\">\r\nimport Data.Char           (digitToInt)\r\nimport Data.List           (elemIndex)\r\nimport Data.Maybe          (fromJust)\r\nimport Data.Numbers.Primes (isPrime, primes)\r\nimport Test.QuickCheck     (Property, (==>), quickCheck)\r\n\r\n-- 1\u00aa definici\u00f3n\r\n-- =============\r\n\r\nesPrimoSheldon :: Int -> Bool\r\nesPrimoSheldon x =\r\n     n > 0\r\n  && x == primes !! (n - 1)\r\n  && inverso x == primes !! (inverso n - 1)\r\n  where n = productoDigitos x\r\n\r\n-- (productoDigitos x) es el producto de los d\u00edgitos de x. Por ejemplo, \r\n--    productoDigitos 73  ==  21\r\nproductoDigitos :: Int -> Int\r\nproductoDigitos x = product (map digitToInt (show x))\r\n\r\n-- (inverso x) es el n\u00famero obtenido invirtiendo el orden de los d\u00edgitos\r\n-- de x. Por ejemplo,\r\n--    inverso 735  ==  537\r\ninverso :: Int -> Int\r\ninverso x = read (reverse (show x))\r\n\r\n-- 2\u00aa definici\u00f3n\r\n-- =============\r\n\r\nesPrimoSheldon2 :: Int -> Bool\r\nesPrimoSheldon2 x =\r\n     n > 0\r\n  && x == primes !! (n - 1)\r\n  && inverso2 x == primes !! (inverso2 n - 1)\r\n  where n = productoDigitos2 x\r\n\r\n-- (productoDigitos2 x) es el producto de los d\u00edgitos de x. Por ejemplo, \r\n--    productoDigitos2 73  ==  21\r\nproductoDigitos2 :: Int -> Int\r\nproductoDigitos2 = product . map digitToInt . show\r\n\r\n-- (inverso2 x) es el n\u00famero obtenido invirtiendo el orden de los d\u00edgitos\r\n-- de x. Por ejemplo,\r\n--    inverso2 735  ==  537\r\ninverso2 :: Int -> Int\r\ninverso2 = read . reverse . show\r\n\r\n-- 3\u00aa definici\u00f3n\r\n-- =============\r\n\r\nesPrimoSheldon3 :: Int -> Bool\r\nesPrimoSheldon3 n = isPrime n && p1 && p2\r\n  where p  = primes\r\n        i1 = fromJust (elemIndex n p) + 1\r\n        i2 = read (reverse (show i1))\r\n        p1 = i1 == product (map digitToInt (show n))\r\n        p2 = read (reverse (show n)) == p !! (i2 - 1)\r\n\r\n-- Propiedad de primo de Sheldon\r\n-- =============================\r\n\r\n-- La propiedad es\r\nprop_primoDeShelldon :: Int -> Property\r\nprop_primoDeShelldon x =\r\n  x >= 0 ==> esPrimoSheldon x == (x == 73)\r\n\r\n-- La comprobaci\u00f3n es\r\n--    \u03bb> quickCheck prop_primoDeShelldon\r\n--    +++ OK, passed 100 tests.\r\n<\/pre>\n<p>[\/schedule]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En el episodio n\u00famero 73 de la serie \u00abThe Big Bang Theory\u00bb, Sheldon Cooper enuncia lo siguiente: \u00abEl mejor n\u00famero es el 73. El 73 es el 21-\u00e9simo n\u00famero primo. Al invertir sus cifras obtenemos 37, que es el primo n\u00famero 12. Y al invertir este obtenemos 21, que es el producto de, agarraos fuerte,&#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":[2],"tags":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/5081"}],"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=5081"}],"version-history":[{"count":7,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/5081\/revisions"}],"predecessor-version":[{"id":5088,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/5081\/revisions\/5088"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=5081"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=5081"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=5081"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}