{"id":298,"date":"2010-08-03T08:06:00","date_gmt":"2010-08-03T08:06:00","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/el-problema-de-los-numeros-felices\/"},"modified":"2013-03-08T05:53:43","modified_gmt":"2013-03-08T05:53:43","slug":"el-problema-de-los-numeros-felices","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/el-problema-de-los-numeros-felices\/","title":{"rendered":"El problema de los n\u00fameros felices"},"content":{"rendered":"<h2>1. El problema de los n\u00fameros felices<\/h2>\n<p>Seg\u00fan la Wikipedia, un <a href=\"http:\/\/en.wikipedia.org\/wiki\/Happy_number\">n\u00famero feliz<\/a> se define por el siguiente proceso. Se comienza reemplazando el n\u00famero por la suma del cuadrado de sus cifras y se repite el proceso hasta que se obtiene el n\u00famero 1 o se entra en un ciclo que no contiene al 1. Aquellos n\u00fameros para los que el proceso termina en 1 se llaman n\u00fameros felices y los que entran en un ciclo sin 1 se llaman n\u00fameros desgraciados.<\/p>\n<p>Por ejemplo, 7 es un n\u00famero feliz porque<\/p>\n<pre lang=\"haskell\">   \r\n  7 ~> 7^2                              =  49\r\n     ~> 4^2 + 9^2          = 16 + 81    =  97\r\n     ~> 9^2 + 7^2          = 81 + 49    = 130\r\n     ~> 1^2 + 3^2 + 0^2    =  1 + 9 + 0 =  10\r\n     ~> 1^2 + 0^2          =  1 + 0     =   1<\/pre>\n<p>Pero 17 es un n\u00famero desgraciado porque<\/p>\n<pre lang=\"haskell\">   \r\n   17 ~> 1^2 + 7^2           =  1 + 49        =  50\r\n       ~> 5^2 + 0^2          = 25 +  0        =  25\r\n       ~> 2^2 + 5^2          =  4 + 25        =  29\r\n       ~> 2^2 + 9^2          =  4 + 81        =  85\r\n       ~> 8^2 + 5^2          = 64 + 25        =  89\r\n       ~> 8^2 + 9^2          = 64 + 81        = 145\r\n       ~> 1^2 + 4^2 + 5^2    =  1 + 16 + 25   =  42\r\n       ~> 4^2 + 2^2          = 16 +  4        =  20\r\n       ~> 2^2 + 0^2          =  4 +  0        =   4\r\n       ~> 4^2                                 =  16\r\n       ~> 1^2 + 6^2          = 1 + 36         =  37\r\n       ~> 3^2 + 7^2          = 9 + 49         =  58\r\n       ~> 5^2 + 8^2          = 25 + 64        =  89\r\n<\/pre>\n<p>que forma un bucle al repetirse el 89.<\/p>\n<p>El objetivo del ejercicio es definir una funci\u00f3n que calcule todos los n\u00fameros felices hasta un l\u00edmite dado.<br \/>\n<!--more--><\/p>\n<h2>2. Ejercicio de los n\u00fameros felices en Haskell<\/h2>\n<pre lang=\"haskell\">\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 1. Definir la funci\u00f3n \r\n--    cifras :: (Read a, Integral a) => a -> [a]\r\n-- tal que (cifras n) es la lista de las cifras de n. Por ejemplo, \r\n--    cifras 325  ==  [3,2,5]\r\n-- ---------------------------------------------------------------------\r\n\r\ncifras :: (Read a, Integral a) => a -> [a]\r\ncifras n = [read [x] | x <- show n]\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 2. Definir la funci\u00f3n\r\n--    caminoALaFelicidad :: (Read a, Integral a) => a -> [a]\r\n-- tal que (caminoALaFelicidad n) es la lista de los n\u00fameros obtenidos\r\n-- en el proceso de la determinaci\u00f3n si n es un n\u00famero feliz: se\r\n-- comienza con la lista [n], ampliando la lista con la suma del\r\n-- cuadrado de las cifras de su primer elemento y se repite el proceso\r\n-- hasta que se obtiene el n\u00famero 1 o se entra en un ciclo que no\r\n-- contiene al 1. Por ejemplo,\r\n--    *Main> caminoALaFelicidad 7\r\n--    [1,10,130,97,49,7]\r\n--    *Main> caminoALaFelicidad 17\r\n--    [89,58,37,16,4,20,42,145,89,85,29,25,50,17]\r\n-- ---------------------------------------------------------------------\r\n\r\ncaminoALaFelicidad :: (Read a, Integral a) => a -> [a]\r\ncaminoALaFelicidad n = f [n]\r\n    where f vs@(x:xs) | x == 1    = vs\r\n                      | elem x xs = vs\r\n                      | otherwise = f ((sum [y^2 | y <- cifras x]):vs)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 3. Definir la funci\u00f3n\r\n--    esFeliz :: (Read a, Integral a) => a -> Bool\r\n-- tal que (esFeliz n) se verifica si n es un n\u00famero feliz. Por ejemplo,\r\n--    esFeliz  7  ==  True\r\n--    esFeliz 17  ==  False\r\n-- ---------------------------------------------------------------------\r\n\r\nesFeliz :: (Read a, Integral a) => a -> Bool\r\nesFeliz n = head (caminoALaFelicidad n) == 1\r\n\r\n-- --------------------------------------------------------------------\r\n-- Ejercicio 4. Definir la funci\u00f3n\r\n--    numerosFelices :: (Read a, Integral a) => a -> [a]\r\n-- tal que (numerosFelices n) es la lista de los n\u00fameros felices menores\r\n-- que n. Por ejemplo,\r\n--    numerosFelices 50  ==  [1,7,10,13,19,23,28,31,32,44,49]\r\n-- ---------------------------------------------------------------------\r\n\r\nnumerosFelices :: (Read a, Integral a) => a -> [a]\r\nnumerosFelices n = [x | x <- [1..n-1], esFeliz x]\r\n<\/pre>\n<h2>3. Ejercicio de los n\u00fameros felices en Maxima<\/h2>\n<pre lang=\"haskell\">\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 1. Definir la funci\u00f3n cifras tal que cifras(n) es la lista\r\n   de las cifras de n. Por ejemplo,  \r\n      cifras(325)  =  [3,2,5]\r\n   ------------------------------------------------------------------ *\/\r\n\r\ncifras(n) :=\r\n   cifrasAux(n,[])$\r\n\r\ncifrasAux(n,xs) :=\r\n   if n<10 then cons(n,xs)\r\n   else cifrasAux(quotient(n,10),cons(mod(n,10),xs))$\r\n\r\n\/* Un ejemplo del c\u00e1lculo con la traza es\r\n      (%i26) trace(all);\r\n      (%o26)                        [cifras, cifrasAux]\r\n      (%i27) cifras(325);\r\n      1 Enter cifras [325]\r\n       1 Enter cifrasAux [325, []]\r\n        2 Enter cifrasAux [32, [5]]\r\n         3 Enter cifrasAux [3, [2, 5]]\r\n         3 Exit  cifrasAux [3, 2, 5]\r\n        2 Exit  cifrasAux [3, 2, 5]\r\n       1 Exit  cifrasAux [3, 2, 5]\r\n      1 Exit  cifras [3, 2, 5]\r\n      (%o27) [3, 2, 5]\r\n      (%i28) untrace;\r\n      (%o28) untrace\r\n*\/      \r\n\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 2. Definir la funci\u00f3n caminoALaFelicidad tal que\r\n   caminoALaFelicidad(n) es la lista de los n\u00fameros obtenidos en el\r\n   proceso de la determinaci\u00f3n si n es un n\u00famero feliz: se comienza con\r\n   la lista [n], ampliando la lista con la suma del cuadrado de las\r\n   cifras de su primer elemento y se repite el proceso hasta que se\r\n   obtiene el n\u00famero 1 o se entra en un ciclo que no contiene al 1. Por\r\n   ejemplo, \r\n      (%i1) caminoALaFelicidad(7);\r\n      (%o1) [1, 10, 130, 97, 49, 7]\r\n      (%i2) caminoALaFelicidad(17);\r\n      (%o2) [89, 58, 37, 16, 4, 20, 42, 145, 89, 85, 29, 25, 50, 17]\r\n   ------------------------------------------------------------------ *\/\r\n\r\ncaminoALaFelicidad(n) := caminoALaFelicidadAux([n])$\r\n\r\ncaminoALaFelicidadAux(vs) := block([x:first(vs), xs:rest(vs)],\r\n   if is(x=1) then vs\r\n   elseif member(x,xs) then vs\r\n   else caminoALaFelicidadAux(cons(lsum(y^2,y,cifras(x)),vs)))$\r\n\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 3. Definir la funci\u00f3n esFeliz tal que esFeliz(n) se\r\n   verifica si n es un n\u00famero feliz. Por ejemplo, \r\n      esFeliz(7)   =  true\r\n      esFeliz(17)  =  false\r\n   ------------------------------------------------------------------ *\/\r\n\r\nesFeliz(n) := is(first(caminoALaFelicidad(n)) = 1)$\r\n\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 4. Definir la funci\u00f3n numerosFelices tal que\r\n   numerosFelices(n) es la lista de los n\u00fameros felices menores que\r\n   n. Por ejemplo,  \r\n      numerosFelices(50)  =  [1,7,10,13,19,23,28,31,32,44,49]\r\n   ------------------------------------------------------------------ *\/\r\n\r\nnumerosFelices(n) :=\r\n   reverse(numerosFelicesAux(n-1))$\r\n\r\nnumerosFelicesAux(n) :=\r\n   if is(n=0) then []\r\n   elseif esFeliz(n) then cons(n,numerosFelicesAux(n-1))\r\n   else numerosFelicesAux(n-1)$\r\n\r\n\/* La definici\u00f3n recursiva terminal es *\/\r\nnumerosFelices2(n) :=\r\n   numerosFelices2Aux(n-1,[])$\r\n\r\nnumerosFelices2Aux(n,xs) :=\r\n   if is(n=0) then xs\r\n   elseif esFeliz(n) then numerosFelices2Aux(n-1,cons(n,xs))\r\n   else numerosFelices2Aux(n-1,xs)$\r\n\r\n\/* La definici\u00f3n iterativa es *\/\r\nnumerosFelices3(n) := block([xs:[]],\r\n   for x:n-1 step -1 thru 1 do\r\n     (if esFeliz(x) then xs:cons(x,xs)),\r\n   xs)$\r\n\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 5. Compilar todas las funciones anteriores.\r\n   ------------------------------------------------------------------ *\/\r\n\r\ncompile(all)$\r\n\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 6. Calcular el tiempo necesario para calcular la cantidad\r\n   de n\u00fameros felices hasta 500, 1000 y 2000 con cada una de las 3\r\n   definiciones de numerosFelices.\r\n   ------------------------------------------------------------------ *\/\r\n\r\n\/* La sesi\u00f3n es\r\n      (%i1) showtime:true$\r\n      Evaluation took 0.0000 seconds (0.0000 elapsed)\r\n      (%i2) length(numerosFelices(500));\r\n      Evaluation took 0.4800 seconds (0.5100 elapsed)\r\n      (%o2) 76\r\n      (%i3) length(numerosFelices2(500));\r\n      Evaluation took 0.4400 seconds (0.4500 elapsed)\r\n      (%o3) 76\r\n      (%i4) length(numerosFelices3(500));\r\n      Evaluation took 0.4900 seconds (0.5000 elapsed)\r\n      (%o4) 76\r\n      (%i5) length(numerosFelices(1000));\r\n      Evaluation took 0.9100 seconds (0.9000 elapsed)\r\n      (%o6) 142\r\n      (%i6) length(numerosFelices2(1000));\r\n      Error in PROGN [or a callee]: Bind stack overflow.\r\n      (%i7) length(numerosFelices3(1000));\r\n      Evaluation took 1.0100 seconds (1.0200 elapsed)\r\n      (%o7) 142\r\n      (%i8) length(numerosFelices(2000));\r\n      Error in PROGN [or a callee]: Bind stack overflow.\r\n      (%i9) length(numerosFelices3(2000));\r\n      Evaluation took 1.9600 seconds (1.9600 elapsed)\r\n      (%o9) 298\r\n      (%i10) showtime:false$\r\n   En resumen\r\n       x   | Def. 1 | Def. 2 | Def. 3\r\n      -----+--------+--------+--------\r\n       500 | 0.48   | 0.44   | 0.49    \r\n      1000 | 0.91   | error  | 1.01\r\n      2000 | error  | error  | 1.96 \r\n*\/    \r\n\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 7. Definir la funci\u00f3n puntos tal que puntos(a) es la lista\r\n   de los pares [x,y] tales que x es un n\u00famero de la forma 100*n con n\r\n   entre 1 y a e y es la cantidad de n\u00fameros felices menores que x. Por\r\n   ejemplo,\r\n      (%i1) puntos(5);\r\n      (%o1) [[100,19],[200,32],[300,44],[400,66],[500,76]]\r\n   ------------------------------------------------------------------ *\/\r\n   \r\npuntos(a) :=\r\n   makelist([x,length(numerosFelices3(x))],x,makelist(100*n,n,1,a))$\r\n\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 8. Cargar la librer\u00eda de inferencia estad\u00edstica.\r\n   ------------------------------------------------------------------ *\/\r\n   \r\nload(\"stats\")$\r\n\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 9. Definir la funci\u00f3n regresion tal que regresion(n) que es\r\n   la recta de regresi\u00f3n para los puntos(n). Por ejemplo,\r\n      (%i1) regresion(5);\r\n      (%o1) 0.148 x + 3.000000000000036\r\n   Indicaci\u00f3n: Usar la funci\u00f3n simple_linear_regression de la librer\u00eda\r\n   stats. \r\n   ------------------------------------------------------------------ *\/\r\n\r\nregresion(n) :=\r\n   take_inference(model,simple_linear_regression(puntos(n)));\r\n\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 10. Calcular los valores de puntos(10) y regresion(10).\r\n   ------------------------------------------------------------------ *\/\r\n\r\n\/* El c\u00e1lculo es\r\n      (%i1) puntos(10);\r\n      (%o1) [[100,19],[200,32],[300,44],[400,66],[500,76],[600,81],\r\n             [700,100],[800,111],[900,124],[1000,142]]\r\n      (%i2) regresion(10);\r\n      (%o2) 0.13290909090909 x + 6.399999999999992\r\n*\/      \r\n\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 11. Dibujar en una figura los puntos de puntos(10) y la\r\n   recta regresion(10).\r\n   ------------------------------------------------------------------ *\/\r\n\r\nplot2d([[discrete,puntos(10)],regresion(10)],\r\n       [x,100,1000],\r\n       [style,points,lines],\r\n       [gnuplot_term,png],\r\n       [gnuplot_out_file,\"NumerosFelices_1.png\"])$\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 1. Definir la funci\u00f3n cifras tal que cifras(n) es la lista\r\n   de las cifras de n. Por ejemplo,  \r\n      cifras(325)  =  [3,2,5]\r\n   ------------------------------------------------------------------ *\/\r\n\r\ncifras(n) :=\r\n   cifrasAux(n,[])$\r\n\r\ncifrasAux(n,xs) :=\r\n   if n<10 then cons(n,xs)\r\n   else cifrasAux(quotient(n,10),cons(mod(n,10),xs))$\r\n\r\n\/* Un ejemplo del c\u00e1lculo con la traza es\r\n      (%i26) trace(all);\r\n      (%o26)                        [cifras, cifrasAux]\r\n      (%i27) cifras(325);\r\n      1 Enter cifras [325]\r\n       1 Enter cifrasAux [325, []]\r\n        2 Enter cifrasAux [32, [5]]\r\n         3 Enter cifrasAux [3, [2, 5]]\r\n         3 Exit  cifrasAux [3, 2, 5]\r\n        2 Exit  cifrasAux [3, 2, 5]\r\n       1 Exit  cifrasAux [3, 2, 5]\r\n      1 Exit  cifras [3, 2, 5]\r\n      (%o27) [3, 2, 5]\r\n      (%i28) untrace;\r\n      (%o28) untrace\r\n*\/      \r\n\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 2. Definir la funci\u00f3n caminoALaFelicidad tal que\r\n   caminoALaFelicidad(n) es la lista de los n\u00fameros obtenidos en el\r\n   proceso de la determinaci\u00f3n si n es un n\u00famero feliz: se comienza con\r\n   la lista [n], ampliando la lista con la suma del cuadrado de las\r\n   cifras de su primer elemento y se repite el proceso hasta que se\r\n   obtiene el n\u00famero 1 o se entra en un ciclo que no contiene al 1. Por\r\n   ejemplo, \r\n      (%i1) caminoALaFelicidad(7);\r\n      (%o1) [1, 10, 130, 97, 49, 7]\r\n      (%i2) caminoALaFelicidad(17);\r\n      (%o2) [89, 58, 37, 16, 4, 20, 42, 145, 89, 85, 29, 25, 50, 17]\r\n   ------------------------------------------------------------------ *\/\r\n\r\ncaminoALaFelicidad(n) := caminoALaFelicidadAux([n])$\r\n\r\ncaminoALaFelicidadAux(vs) := block([x:first(vs), xs:rest(vs)],\r\n   if is(x=1) then vs\r\n   elseif member(x,xs) then vs\r\n   else caminoALaFelicidadAux(cons(lsum(y^2,y,cifras(x)),vs)))$\r\n\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 3. Definir la funci\u00f3n esFeliz tal que esFeliz(n) se\r\n   verifica si n es un n\u00famero feliz. Por ejemplo, \r\n      esFeliz(7)   =  true\r\n      esFeliz(17)  =  false\r\n   ------------------------------------------------------------------ *\/\r\n\r\nesFeliz(n) := is(first(caminoALaFelicidad(n)) = 1)$\r\n\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 4. Definir la funci\u00f3n numerosFelices tal que\r\n   numerosFelices(n) es la lista de los n\u00fameros felices menores que\r\n   n. Por ejemplo,  \r\n      numerosFelices(50)  =  [1,7,10,13,19,23,28,31,32,44,49]\r\n   ------------------------------------------------------------------ *\/\r\n\r\nnumerosFelices(n) :=\r\n   reverse(numerosFelicesAux(n-1))$\r\n\r\nnumerosFelicesAux(n) :=\r\n   if is(n=0) then []\r\n   elseif esFeliz(n) then cons(n,numerosFelicesAux(n-1))\r\n   else numerosFelicesAux(n-1)$\r\n\r\n\/* La definici\u00f3n recursiva terminal es *\/\r\nnumerosFelices2(n) :=\r\n   numerosFelices2Aux(n-1,[])$\r\n\r\nnumerosFelices2Aux(n,xs) :=\r\n   if is(n=0) then xs\r\n   elseif esFeliz(n) then numerosFelices2Aux(n-1,cons(n,xs))\r\n   else numerosFelices2Aux(n-1,xs)$\r\n\r\n\/* La definici\u00f3n iterativa es *\/\r\nnumerosFelices3(n) := block([xs:[]],\r\n   for x:n-1 step -1 thru 1 do\r\n     (if esFeliz(x) then xs:cons(x,xs)),\r\n   xs)$\r\n\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 5. Compilar todas las funciones anteriores.\r\n   ------------------------------------------------------------------ *\/\r\n\r\ncompile(all)$\r\n\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 6. Calcular el tiempo necesario para calcular la cantidad\r\n   de n\u00fameros felices hasta 500, 1000 y 2000 con cada una de las 3\r\n   definiciones de numerosFelices.\r\n   ------------------------------------------------------------------ *\/\r\n\r\n\/* La sesi\u00f3n es\r\n      (%i1) showtime:true$\r\n      Evaluation took 0.0000 seconds (0.0000 elapsed)\r\n      (%i2) length(numerosFelices(500));\r\n      Evaluation took 0.4800 seconds (0.5100 elapsed)\r\n      (%o2) 76\r\n      (%i3) length(numerosFelices2(500));\r\n      Evaluation took 0.4400 seconds (0.4500 elapsed)\r\n      (%o3) 76\r\n      (%i4) length(numerosFelices3(500));\r\n      Evaluation took 0.4900 seconds (0.5000 elapsed)\r\n      (%o4) 76\r\n      (%i5) length(numerosFelices(1000));\r\n      Evaluation took 0.9100 seconds (0.9000 elapsed)\r\n      (%o6) 142\r\n      (%i6) length(numerosFelices2(1000));\r\n      Error in PROGN [or a callee]: Bind stack overflow.\r\n      (%i7) length(numerosFelices3(1000));\r\n      Evaluation took 1.0100 seconds (1.0200 elapsed)\r\n      (%o7) 142\r\n      (%i8) length(numerosFelices(2000));\r\n      Error in PROGN [or a callee]: Bind stack overflow.\r\n      (%i9) length(numerosFelices3(2000));\r\n      Evaluation took 1.9600 seconds (1.9600 elapsed)\r\n      (%o9) 298\r\n      (%i10) showtime:false$\r\n   En resumen\r\n       x   | Def. 1 | Def. 2 | Def. 3\r\n      -----+--------+--------+--------\r\n       500 | 0.48   | 0.44   | 0.49    \r\n      1000 | 0.91   | error  | 1.01\r\n      2000 | error  | error  | 1.96 \r\n*\/    \r\n\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 7. Definir la funci\u00f3n puntos tal que puntos(a) es la lista\r\n   de los pares [x,y] tales que x es un n\u00famero de la forma 100*n con n\r\n   entre 1 y a e y es la cantidad de n\u00fameros felices menores que x. Por\r\n   ejemplo,\r\n      (%i1) puntos(5);\r\n      (%o1) [[100,19],[200,32],[300,44],[400,66],[500,76]]\r\n   ------------------------------------------------------------------ *\/\r\n   \r\npuntos(a) :=\r\n   makelist([x,length(numerosFelices3(x))],x,makelist(100*n,n,1,a))$\r\n\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 8. Cargar la librer\u00eda de inferencia estad\u00edstica.\r\n   ------------------------------------------------------------------ *\/\r\n   \r\nload(\"stats\")$\r\n\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 9. Definir la funci\u00f3n regresion tal que regresion(n) que es\r\n   la recta de regresi\u00f3n para los puntos(n). Por ejemplo,\r\n      (%i1) regresion(5);\r\n      (%o1) 0.148 x + 3.000000000000036\r\n   Indicaci\u00f3n: Usar la funci\u00f3n simple_linear_regression de la librer\u00eda\r\n   stats. \r\n   ------------------------------------------------------------------ *\/\r\n\r\nregresion(n) :=\r\n   take_inference(model,simple_linear_regression(puntos(n)));\r\n\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 10. Calcular los valores de puntos(10) y regresion(10).\r\n   ------------------------------------------------------------------ *\/\r\n\r\n\/* El c\u00e1lculo es\r\n      (%i1) puntos(10);\r\n      (%o1) [[100,19],[200,32],[300,44],[400,66],[500,76],[600,81],\r\n             [700,100],[800,111],[900,124],[1000,142]]\r\n      (%i2) regresion(10);\r\n      (%o2) 0.13290909090909 x + 6.399999999999992\r\n*\/      \r\n\r\n\/* ---------------------------------------------------------------------\r\n   Ejercicio 11. Dibujar en una figura los puntos de puntos(10) y la\r\n   recta regresion(10).\r\n   ------------------------------------------------------------------ *\/\r\n\r\nplot2d([[discrete,puntos(10)],regresion(10)],\r\n       [x,100,1000],\r\n       [style,points,lines],\r\n       [gnuplot_term,png],\r\n       [gnuplot_out_file,\"NumerosFelices_1.png\"])$\r\n<\/pre>\n<h2>4. Comentarios<\/h2>\n<p>He actualizado el libro <a href=\"http:\/\/www.cs.us.es\/~jalonso\/pub\/Introduccion_al_calculo_simbolico_con_Maxima.pdf\">Introducci\u00f3n al C\u00e1lculo simb\u00f3lico con Maxima<\/a> y le he a\u00f1adido el problema de los n\u00fameros felices.<\/p>\n<p>Una tarea pendiente es estudiar el problema de los n\u00fameros felices en un sistema de razonamiento autom\u00e1tico (ACL2, Isabelle, PVS). Para ello, hay que demostrar la terminaci\u00f3n de la funci\u00f3n caminoALaFelicidad. Pienso que en ninguno de los tres sistemas, la prueba de la terminaci\u00f3n es autom\u00e1tica.<\/p>\n<h2>Referencias<\/h2>\n<p>Este ejercicio se basa en el art\u00edculo <a href=\"http:\/\/programmingpraxis.com\/2010\/07\/23\/happy-numbers\/\">Happy Numbers<\/a> publicado el 23 de julio de 2010 en ProgrammingPraxis y su <a href=\"http:\/\/bonsaicode.wordpress.com\/2010\/07\/23\/programming-praxis-happy-numbers\">respuesta en Bonsai<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. El problema de los n\u00fameros felices Seg\u00fan la Wikipedia, un n\u00famero feliz se define por el siguiente proceso. Se comienza reemplazando el n\u00famero por la suma del cuadrado de sus cifras y se repite el proceso hasta que se obtiene el n\u00famero 1 o se entra en un ciclo que no contiene al 1&#8230;.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","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":[5,74],"tags":[270,80,281,79],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/298"}],"collection":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/comments?post=298"}],"version-history":[{"count":16,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/298\/revisions"}],"predecessor-version":[{"id":3049,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/298\/revisions\/3049"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=298"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=298"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=298"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}