Definir las siguientes funciones
numeroContado :: Integer -> Integer
contadora :: Integer -> [Integer]
lugarPuntoFijoContadora :: Integer -> Integer -> Maybe Integer |
numeroContado :: Integer -> Integer
contadora :: Integer -> [Integer]
lugarPuntoFijoContadora :: Integer -> Integer -> Maybe Integer
tales que
- (numeroContado n) es el número obtenido al contar las repeticiones de cada una de las cifras de n. Por ejemplo,
numeroContado 1 == 11
numeroContado 114213 == 31121314
numeroContado 1111111111111111 == 161
numeroContado 555555555500 == 20105 |
numeroContado 1 == 11
numeroContado 114213 == 31121314
numeroContado 1111111111111111 == 161
numeroContado 555555555500 == 20105
- (contadora n) es la sucesión cuyo primer elemento es n y los restantes se obtienen contando el número anterior de la sucesión. Por ejemplo,
λ> take 14 (contadora 1)
[1,11,21,1112,3112,211213,312213,212223,114213,31121314,41122314,
31221324,21322314,21322314]
λ> take 14 (contadora 5)
[5,15,1115,3115,211315,31121315,41122315,3122131415,4122231415,
3132132415,3122331415,3122331415,3122331415,3122331415] |
λ> take 14 (contadora 1)
[1,11,21,1112,3112,211213,312213,212223,114213,31121314,41122314,
31221324,21322314,21322314]
λ> take 14 (contadora 5)
[5,15,1115,3115,211315,31121315,41122315,3122131415,4122231415,
3132132415,3122331415,3122331415,3122331415,3122331415]
- (lugarPuntoFijoContadora n k) es el menor i <= k tal que son iguales los elementos en las posiciones i e i+1 de la sucesión contadora que cominza con n. Por ejemplo,
λ> lugarPuntoFijoContadora 1 100
Just 12
λ> contadora 1 !! 11
31221324
λ> contadora 1 !! 12
21322314
λ> contadora 1 !! 13
21322314
λ> lugarPuntoFijoContadora 1 10
Nothing
λ> lugarPuntoFijoContadora 5 20
Just 10
λ> lugarPuntoFijoContadora 40 200
Nothing |
λ> lugarPuntoFijoContadora 1 100
Just 12
λ> contadora 1 !! 11
31221324
λ> contadora 1 !! 12
21322314
λ> contadora 1 !! 13
21322314
λ> lugarPuntoFijoContadora 1 10
Nothing
λ> lugarPuntoFijoContadora 5 20
Just 10
λ> lugarPuntoFijoContadora 40 200
Nothing
Nota: Este ejercicio ha sido propuesto por Ángel Ruiz.
Soluciones
import Data.List ( genericLength
, genericTake
, group
, nub
, sort
)
-- Definición de numeroContado
numeroContado :: Integer -> Integer
numeroContado n =
(read . concat . map concat) [[(show . length) m,nub m]
| m <- (group . sort . show) n]
-- 1ª definición de contadora
contadora :: Integer -> [Integer]
contadora n = n : map numeroContado (contadora n)
-- 2ª definición de contadora
contadora2 :: Integer -> [Integer]
contadora2 = iterate numeroContado
-- Definición de lugarPuntoFijoContadora
lugarPuntoFijoContadora :: Integer -> Integer -> Maybe Integer
lugarPuntoFijoContadora n k
| m == k-1 = Nothing
| otherwise = Just m
where xs = genericTake k (contadora n)
ds = zipWith (-) xs (tail xs)
m = genericLength (takeWhile (/=0) ds) |
import Data.List ( genericLength
, genericTake
, group
, nub
, sort
)
-- Definición de numeroContado
numeroContado :: Integer -> Integer
numeroContado n =
(read . concat . map concat) [[(show . length) m,nub m]
| m <- (group . sort . show) n]
-- 1ª definición de contadora
contadora :: Integer -> [Integer]
contadora n = n : map numeroContado (contadora n)
-- 2ª definición de contadora
contadora2 :: Integer -> [Integer]
contadora2 = iterate numeroContado
-- Definición de lugarPuntoFijoContadora
lugarPuntoFijoContadora :: Integer -> Integer -> Maybe Integer
lugarPuntoFijoContadora n k
| m == k-1 = Nothing
| otherwise = Just m
where xs = genericTake k (contadora n)
ds = zipWith (-) xs (tail xs)
m = genericLength (takeWhile (/=0) ds)
Se puede imprimir o compartir con
Si haces
Cuando deberías obtener 411 como se obtiene con la definición de jaibengue.
Creo que el problema esta en el head utilizado en el aux2 que deberías solucionar.
Espero que te sirva de algo.
Buenas, la definición es incorrecta. Por ejemplo:
λ> numeroContado 11111111110
10101
λ> numeroContado2 11111111110
1101
Donde numeroContado2 es tu definición
Si se cambia la definción de numeroContado por:
Dejando el resto igual parece que ya se soluciona el problema.
Acabo de caer en que tenía el mismo problema que pabhueacu con los 0.