Menu Close

Categoría: Haskell

El problema de los números felices

1. El problema de los números felices

Según la Wikipedia, un número feliz se define por el siguiente proceso. Se comienza reemplazando el número por la suma del cuadrado de sus cifras y se repite el proceso hasta que se obtiene el número 1 o se entra en un ciclo que no contiene al 1. Aquellos números para los que el proceso termina en 1 se llaman números felices y los que entran en un ciclo sin 1 se llaman números desgraciados.

Por ejemplo, 7 es un número feliz porque

  7 ~> 7^2                              =  49
     ~> 4^2 + 9^2          = 16 + 81    =  97
     ~> 9^2 + 7^2          = 81 + 49    = 130
     ~> 1^2 + 3^2 + 0^2    =  1 + 9 + 0 =  10
     ~> 1^2 + 0^2          =  1 + 0     =   1

Pero 17 es un número desgraciado porque

   17 ~> 1^2 + 7^2           =  1 + 49        =  50
       ~> 5^2 + 0^2          = 25 +  0        =  25
       ~> 2^2 + 5^2          =  4 + 25        =  29
       ~> 2^2 + 9^2          =  4 + 81        =  85
       ~> 8^2 + 5^2          = 64 + 25        =  89
       ~> 8^2 + 9^2          = 64 + 81        = 145
       ~> 1^2 + 4^2 + 5^2    =  1 + 16 + 25   =  42
       ~> 4^2 + 2^2          = 16 +  4        =  20
       ~> 2^2 + 0^2          =  4 +  0        =   4
       ~> 4^2                                 =  16
       ~> 1^2 + 6^2          = 1 + 36         =  37
       ~> 3^2 + 7^2          = 9 + 49         =  58
       ~> 5^2 + 8^2          = 25 + 64        =  89

que forma un bucle al repetirse el 89.

El objetivo del ejercicio es definir una función que calcule todos los números felices hasta un límite dado.