Collatz予想
http://ll.jus.or.jp/2006/blog/doukaku2
import List; skip2 x = head x : error "invalid" : skip2 (tail x) skip3 x = head x : (skip3$tail$tail$tail x) lencollatz :: [Integer] lencollatz = 1 : (map (\(n,x,y)->1+(if even n then x else y)) (zip3 [2..] (skip2 lencollatz) (tail$tail$skip3 lencollatz))) h = snd $ mapAccumL (\a b-> let m = max a b in (m,snd m)) (0,error "invalid") w where w = zip lencollatz [1..]
おまけ
collatz :: [[Integer]] collatz = [1] : (map (\(n,x,y)->n:(if even n then x else y)) (zip3 [2..] (skip2 collatz) (tail$tail$skip3 collatz)))
tail 乱射しているあたりにやる気なさが。洒落た書き方するとバグるから。
mapAccumL Prelude にないから使いたくなかったのだけれども。使わないと面倒だった。
http://www.kmonos.net/wlog/63.html#_1701060713 三つ飛ばしが洒落てる。大体同じことしたかったのだけれども。