Menu Close

El 2019 es apocalíptico

Un número natural n es apocalíptico si 2^n contiene la secuencia 666. Por ejemplo, 157 es apocalíptico porque 2^157 es 182687704666362864775460604089535377456991567872 que contiene la secuencia 666.

Definir las funciones

   esApocaliptico       :: Integer -> Bool
   apocalipticos        :: [Integer]
   posicionApocaliptica :: Integer -> Maybe Int

tales que

  • (esApocaliptico n) se verifica si n es un número apocalíptico. Por ejemplo,
     esApocaliptico 157   ==  True
     esApocaliptico 2019  ==  True
     esApocaliptico 2018  ==  False
  • 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 !! 450  ==  2019
  • (posicionApocalitica n) es justo la posición de n en la sucesión de números apocalípticos, si n es apocalíptico o Nothing, en caso contrario. Por ejemplo,
     posicionApocaliptica 157   ==  Just 0
     posicionApocaliptica 2019  ==  Just 450
     posicionApocaliptica 2018  ==  Nothing

Soluciones

import Data.List (isInfixOf, elemIndex)
 
-- 1ª definición de esApocaliptico
esApocaliptico :: Integer -> Bool
esApocaliptico n = "666" `isInfixOf` show (2^n)
 
-- 2ª definición de esApocaliptico
esApocaliptico2 :: Integer -> Bool
esApocaliptico2 = isInfixOf "666" . show . (2^)
 
-- 1ª definición de apocalipticos
apocalipticos :: [Integer]
apocalipticos = [n | n <- [1..], esApocaliptico n]
 
-- 2ª definición de apocalipticos
apocalipticos2 :: [Integer]
apocalipticos2 = filter esApocaliptico [1..]
 
-- 1ª definición de posicionApocaliptica
posicionApocaliptica :: Integer -> Maybe Int
posicionApocaliptica n
  | y == n    = Just (length xs)
  | otherwise = Nothing
  where (xs,y:_) = span (<n) apocalipticos
 
-- 2ª definición de posicionApocaliptica
posicionApocaliptica2 :: Integer -> Maybe Int
posicionApocaliptica2 n
  | esApocaliptico n = elemIndex n apocalipticos
  | otherwise        = Nothing

Pensamiento

A vosotros no os importe pensar lo que habéis leído ochenta veces y oído
quinientas, porque no es lo mismo pensar que haber leído.

Antonio Machado

5 soluciones de “El 2019 es apocalíptico

  1. luipromor
    esApocaliptico :: Integer -> Bool
    esApocaliptico x = isInfixOf "666" (show (2^ x))
     
    apocalipticos :: [Integer]
    apocalipticos = [x | x <- [157..], esApocaliptico x]
     
    posicionApocaliptica :: Integer -> Maybe Int
    posicionApocaliptica x
      | esApocaliptico x = Just (aux x 0)
      | otherwise        = Nothing
      where aux x' n | x' == apocalipticos !! n = n
                     | otherwise                = aux x' (n+1)
  2. frahidzam
    import Data.List (isInfixOf)
     
    esApocaliptico :: Integer -> Bool
    esApocaliptico n = isInfixOf "666" (show (2^n))
     
    apocalipticos :: [Integer]
    apocalipticos = filter esApocaliptico [1..]
     
    posicionApocaliptica :: Integer -> Maybe Int
    posicionApocaliptica n
      | elem n (takeWhile (<= n) apocalipticos) = Just (posAux n)
      | otherwise                                 = Nothing
     
    posAux :: Integer -> Int
    posAux n = head [b | (a,b) <- zip apocalipticos [0..], n == a]
  3. adogargon
    import Data.List (isInfixOf)
     
    esApocaliptico :: Integer -> Bool
    esApocaliptico x  = isInfixOf "666" (show (2^x))
     
    apocalipticos :: [Integer]
    apocalipticos = [ x | x <- [157..] , esApocaliptico x]
     
    posicionApocaliptica :: Integer -> Maybe Int
    posicionApocaliptica x
      | esApocaliptico x =
          Just (snd (head [(a,b) | (a,b)<- zip (apocalipticos) [0..], a == x]))
      | otherwise = Nothing
  4. lucsanand
    import Data.List (isInfixOf)
     
    esApocaliptico :: Integer -> Bool
    esApocaliptico n = isInfixOf "666" (show (2^n))
     
    apocalipticos :: [Integer]
    apocalipticos = [n | n <- [157..], esApocaliptico n]
     
    posicionApocaliptica :: Integer -> Maybe Int
    posicionApocaliptica n
      | esApocaliptico n = Just (aux n)
      | otherwise          = Nothing
      where aux :: Integer -> Int
            aux n' = length (takeWhile (/=n') apocalipticos)
  5. javmarcha1
    import Data.List (isInfixOf)
     
    esApocaliptico :: Integer -> Bool
    esApocaliptico n = isInfixOf "666" (show (2^n))
     
    apocalipticos :: [Integer]
    apocalipticos = [x | x <- [157..], esApocaliptico x]
     
    posicionApocaliptica :: Integer -> Maybe Int
    posicionApocaliptica x
      | esApocaliptico x = Just (length (takeWhile (< x) apocalipticos))
      | otherwise        = Nothing

Escribe tu solución

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.