RosettaCodeData/Task/Super-d-numbers/Miranda/super-d-numbers.miranda
2026-04-30 12:34:36 -04:00

21 lines
630 B
Text

main :: [sys_message]
main = map (Stdout . showSuperD) [2..6]
where showSuperD d = "First 10 super-" ++ show d ++ " numbers:\n"
++ show (take 10 (superd d)) ++ "\n\n"
superd :: num->[num]
superd d = filter (issuperd d) [1..]
issuperd :: num->num->bool
issuperd d n = consecutive d d (digits (n^d * d))
digits :: num->[num]
digits = map (mod 10) . takewhile (~= 0) . iterate (div 10)
consecutive :: num->*->[*]->bool
consecutive
= c 0
where c n n x xs = True
c i n x [] = False
c i n x (x:xs) = c (i+1) n x xs
c i n x (y:xs) = c 0 n x xs