Exercitium1-0.1.0.0: Problemas de Exercitium (Volumen 1)

CopyrightExercitium (27-05-14)
LicenseGPL-3
MaintainerJoseA.Alonso@gmail.com
Safe HaskellSafe
LanguageHaskell2010

Triangulares_con_cifras

Description

Números triangulares con n cifras distintas

Los números triangulares se forman como sigue

   *     *      * 
        * *    * *
              * * *
   1     3      6

La sucesión de los números triangulares se obtiene sumando los números naturales. Así, los 5 primeros números triangulares son

    1 = 1
    3 = 1+2
    6 = 1+2+3
   10 = 1+2+3+4
   15 = 1+2+3+4+5

Definir la función

triangularesConCifras :: Int -> [Integer]

tal que (triangulares n) es la lista de los números triangulares con n cifras distintas. Por ejemplo,

>>> take 6 (triangularesConCifras 1)
[1,3,6,55,66,666]
>>> take 6 (triangularesConCifras 2)
[10,15,21,28,36,45]
>>> take 6 (triangularesConCifras 3)
[105,120,136,153,190,210]
>>> take 5 (triangularesConCifras 4)
[1035,1275,1326,1378,1485]
>>> take 2 (triangularesConCifras 10)
[1062489753,1239845706]

Synopsis

Documentation

triangulares1 :: [Integer] Source #

triangulares es la sucesión de los números triangulares. Por ejemplo,

>>> take 15 triangulares1
[1,3,6,10,15,21,28,36,45,55,66,78,91,105,120]

triangulares2 :: [Integer] Source #

2ª definición de triangulares (usando zipWith).

triangulares3 :: [Integer] Source #

3ª definición de triangulares (usando scanl).

triangulares4 :: [Integer] Source #

4ª definición de triangulares (con la fórmula)

prop_triangulares :: Int -> Bool Source #

(prop_triangulares n) se verifica si las definiciones de triangulares son equivalentes en sus primeros n términos. Por ejemplo,

>>> prop_triangulares 100
True

Comparación de eficiencia:

> sum (take (10^6) triangulares1)
166667166667000000
(1.07 secs, 475,647,576 bytes)
> sum (take (10^6) triangulares2)
166667166667000000
(1.23 secs, 667,646,128 bytes)
> sum (take (10^6) triangulares3)
166667166667000000
(0.50 secs, 370,832,960 bytes)
> sum (take (10^6) triangulares4)
166667166667000000
(1.09 secs, 489,997,432 bytes)

triangulares :: [Integer] Source #

Usaremos como triangulares la 3ª definición.

nCifras :: Integer -> Int Source #

(nCifras x) es el número de cifras distintas del número x. Por ejemplo,

>>> nCifras 325275
4