Menu Close

Mayor número equidigital

 

Definir la función

   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

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)
Inicial

Una solución de “Mayor número equidigital

  1. angruicam1
    import Data.List (sort)
     
    mayorEquidigital :: Integer -> Integer
    mayorEquidigital = read . reverse . sort . show

Los comentarios están cerrados.