Mayor número equidigital
Definir la función
1 |
mayorEquidigital :: Integer -> Integer |
tal que (mayorEquidigital x) es el mayor número que se puede contruir con los dígitos de x. Por ejemplo,
1 2 |
mayorEquidigital 13112017 == 73211110 mayorEquidigital2 (2^100) == 9987776666655443322222211000000 |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
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) |
Un comentario