Problem 220
220 Heighway Dragon
Problem 220 - Project Euler
ドラゴン曲線といえば,有名なフラクタル.
フラクタルの自己相似性をうまく利用.
dragon :: Integer -> (Integer, Integer) dragon 0 = (0, 0) dragon n = let (s, (x, y)) = until ((>= n).fst) step $ (1, (0, 1)) (x', y') = dragon (s - n) in (x - y', y + x') where step (s, (x, y)) = (2 * s, (x + y, -x + y)) main :: IO () main = print.dragon $ 10^12