Definir la función
mayorEquidigital :: Integer -> Integer |
mayorEquidigital :: Integer -> Integer
tal que (mayorEquidigital x) es el mayor número que se puede contruir con los dígitos de x. Por ejemplo,
mayorEquidigital 13112017 == 73211110
mayorEquidigital2 (2^100) == 9987776666655443322222211000000 |
mayorEquidigital 13112017 == 73211110
mayorEquidigital2 (2^100) == 9987776666655443322222211000000
Soluciones
import Data.List (sort, permutations)
-- 1ª solución
-- ===========
mayorEquidigital1 :: Integer -> Integer
mayorEquidigital1 =
maximum . equidigitales
-- (equidigitales x) es la lista de los números que se pueden contruir
-- con los dígitos de x. Por ejemplo,
-- equidigitales 325 == [325,235,523,253,532,352]
equidigitales :: Integer -> [Integer]
equidigitales x =
[read ys | ys <- permutations ds]
where ds = show x
-- 2ª solución
-- ===========
mayorEquidigital2 :: Integer -> Integer
mayorEquidigital2 = read . reverse . sort . show
-- Comparación de eficiencia
-- =========================
-- λ> mayorEquidigital1 (2^30)
-- 8774432110
-- (11.77 secs, 26,334,106,664 bytes)
-- λ> mayorEquidigital2 (2^30)
-- 8774432110
-- (0.00 secs, 156,800 bytes) |
import Data.List (sort, permutations)
-- 1ª solución
-- ===========
mayorEquidigital1 :: Integer -> Integer
mayorEquidigital1 =
maximum . equidigitales
-- (equidigitales x) es la lista de los números que se pueden contruir
-- con los dígitos de x. Por ejemplo,
-- equidigitales 325 == [325,235,523,253,532,352]
equidigitales :: Integer -> [Integer]
equidigitales x =
[read ys | ys <- permutations ds]
where ds = show x
-- 2ª solución
-- ===========
mayorEquidigital2 :: Integer -> Integer
mayorEquidigital2 = read . reverse . sort . show
-- Comparación de eficiencia
-- =========================
-- λ> mayorEquidigital1 (2^30)
-- 8774432110
-- (11.77 secs, 26,334,106,664 bytes)
-- λ> mayorEquidigital2 (2^30)
-- 8774432110
-- (0.00 secs, 156,800 bytes)
Se puede imprimir o compartir con
Una solución de “Mayor número equidigital”