21 lines
576 B
Haskell
21 lines
576 B
Haskell
import Data.List (unfoldr)
|
|
|
|
yellowstone :: [Integer]
|
|
yellowstone = 1 : 2 : 3 : unfoldr (Just . f) (2, 3, [4 ..])
|
|
where
|
|
f ::
|
|
(Integer, Integer, [Integer]) ->
|
|
(Integer, (Integer, Integer, [Integer]))
|
|
f (p2, p1, rest) = (next, (p1, next, rest_))
|
|
where
|
|
(next, rest_) = select rest
|
|
select :: [Integer] -> (Integer, [Integer])
|
|
select (x : xs)
|
|
| gcd x p1 == 1 && gcd x p2 /= 1 = (x, xs)
|
|
| otherwise = (y, x : ys)
|
|
where
|
|
(y, ys) = select xs
|
|
|
|
main :: IO ()
|
|
main = print $ take 30 yellowstone
|