apocalipticos es la lista de los números apocalípticos. Por ejemplo,
take 9 apocalipticos == [157,192,218,220,222,224,226,243,245]
apocalipticos !! 55 == 666
take 9 apocalipticos == [157,192,218,220,222,224,226,243,245]
apocalipticos !! 55 == 666
(mayorNoApocalipticoMenor n) es justo el mayor número no apocalíptico menor que n. Por ejemplo,
mayorNoApocalipticoMenor 40000 == Just 29784
mayorNoApocalipticoMenor 29784 == Just 26667
mayorNoApocalipticoMenor 40000 == Just 29784
mayorNoApocalipticoMenor 29784 == Just 26667
(grafica n) dibuja las gráficas de los n primeros términos de la sucesión de los números apocalípticos junto con los de la sucesión a(n) = 3715+n. Por ejemplo, (grafica 3000) dibuja
y (grafica 30000) dibuja
Nota: Este ejercicio ha sido propuesto por Ángel Ruiz Campos.
Soluciones
import Data.List (isInfixOf, find, genericTake)import Graphics.Gnuplot.Simple
esApocaliptico ::Integer->Bool
esApocaliptico = isInfixOf "666" . show . (2^)
apocalipticos ::[Integer]
apocalipticos =filter esApocaliptico [1..]
mayorNoApocalipticoMenor ::Integer->MaybeInteger
mayorNoApocalipticoMenor n = find (not . esApocaliptico)[n-1,n-2..1]
grafica ::Integer->IO()
grafica n =
plotLists [ Key Nothing
, PNG ("Numeros_apocalipticos_"++show n ++".png")][ genericTake n apocalipticos
, [3715..3715+n-1]]
-- Se me había olvidado, definir digitos, pero como ya ha aparecido en anteriores ejercicios, pues la tenía compilada.
digitos ::Integer->[Integer]
digitos x =[read[d]| d <-show x
-- Se me había olvidado, definir digitos, pero como ya ha aparecido en anteriores ejercicios, pues la tenía compilada.
digitos :: Integer -> [Integer]
digitos x = [read [d] | d <- show x
5 soluciones de “Números apocalípticos”