Anonymous user
Esthetic numbers: Difference between revisions
→{{header|Haskell}}: added more efficient solution
m (→Python :: Functional: wrapped output) |
(→{{header|Haskell}}: added more efficient solution) |
||
Line 2,718:
differences lst = zipWith (-) lst (tail lst)
-- Monadic solution, inefficient for small bases.
do differences <- (\n -> replicateM n [-1, 1]) <$> [0..]
firstDigit <- [1..b-1]
differences >>= fromBase b <$> scanl (+) firstDigit
-- Much more efficient iterative solution (translation from Python)
-- Uses simple list as an ersatz queue.
esthetics b = tail $ fst <$> iterate step (1, q)
where
q = [(d, d) | d <- [1..b-1]]
step (_, queue) =
let (num, lsd) = head queue
new_lsds = [d | d <- [lsd-1, lsd+1], d < b, d >= 0]
in (num, tail queue ++ [(num*b + d, d) | d <- new_lsds])
-- representation of numbers as digits
Line 2,824 ⟶ 2,834:
λ> length $ takeWithin 100000000000000000 130000000000000000 $ esthetics 10
44744</pre>
=={{header|Java}}==
|