Next highest int from digits: Difference between revisions

→‎{{header|Haskell}}: Added a draft in Haskell
(→‎{{header|Haskell}}: Added a draft in Haskell)
Line 221:
9,589,776,899,767,587,796,600 -> 9,589,776,899,767,587,900,667
</pre>
 
=={{header|Haskell}}==
Defining a list of all (if any) digit-shuffle successors of a positive integer.
{{Trans|Python}}
(Generator version)
<lang haskell>import Data.List (nub, permutations, sort)
import Data.Bool (bool)
 
digitShuffleSuccessors :: Integer -> [Integer]
digitShuffleSuccessors n =
let go ds =
let delta = (read ds :: Integer) - n
in bool [delta] [] (0 >= delta)
in (+ n) <$> (nub $ sort (permutations (show n) >>= go))
 
---------------------------TEST----------------------------
main :: IO ()
main =
putStrLn $
fTable
"Taking up to 5 digit-shuffle successors of a positive integer:\n"
show
(\xs ->
let harvest = take 5 xs
in rjust
12
' '
(show (length harvest) ++ " of " ++ show (length xs) ++ ": ") ++
show harvest)
digitShuffleSuccessors
[0, 9, 12, 21, 12453, 738440, 45072010, 95322020]
 
--------------------------DISPLAY--------------------------
fTable :: String -> (a -> String) -> (b -> String) -> (a -> b) -> [a] -> String
fTable s xShow fxShow f xs =
unlines $
s : fmap (((++) . rjust w ' ' . xShow) <*> ((" -> " ++) . fxShow . f)) xs
where
w = maximum (length . xShow <$> xs)
 
rjust :: Int -> Char -> String -> String
rjust n c = drop . length <*> (replicate n c ++)</lang>
{{Out}}
<pre>Taking up to 5 digit-shuffle successors of a positive integer:
 
0 -> 0 of 0: []
9 -> 0 of 0: []
12 -> 1 of 1: [21]
21 -> 0 of 0: []
12453 -> 5 of 116: [12534,12543,13245,13254,13425]
738440 -> 5 of 96: [740348,740384,740438,740483,740834]
45072010 -> 5 of 1861: [45072100,45100027,45100072,45100207,45100270]
95322020 -> 1 of 1: [95322200]</pre>
 
 
=={{header|Perl 6}}==
9,659

edits