2006-07-14 [長年日記]
λ. Re: Collatz予想
無限リストでメモ化すること自体は考えたのですが、私の考えたのは再帰呼び出し毎に(!!)を使って値を取り出すもので、かなり遅かったために書きませんでした。稲葉さんのコードは面白いですね。ただ、私ならこう書くかな。
-- まったくもってこれ以上ないくらいごくごく普通の何の変哲もないinterleave (/\/) :: [a] -> [a] -> [a] (x:xs) /\/ ys = x : (ys /\/ xs) [] /\/ ys = ys -- g!!n == 自然数(n+1)が収束するまでのステップ数 g :: [Int] g = 1 : map (+1) (g /\/ map head (iterate (drop 6) (drop 9 g))) -- h!!n == [1..n+1] の中で一番収束にかかるステップ数がでかいの h :: [Int] h = map fst $ scanl1 phi (zip [1..] g) where phi a@(_,gk) b@(_,gk') | gk' > gk = b | otherwise = a main = print h
追記
そっか、タプルの順番を入れ替えれば、scanl1に渡す関数は単にmaxで良いのか……気づかなかった。
2006-09-14 追記: 顔文字に見える件について
中置演算子を普通の関数として書くためには括弧で囲う必要があるので、こんなことになってます。しかし、まあ顔文字には見えますよね。特にこんなのとか。
Main> :t (^^) (^^) :: (Integral b, Fractional a) => a -> b -> a Main> 2 ^^ (-1) 0.5
λ. 『θは遊んでくれたよ』 森博嗣
を読んだ。トリックは予想通りだが、犯人の特定が少し面白かった。しかし、もはやキャラ萌え小説だよなぁ。キャラクタや先の展開が気になるから読むけど、単体で楽しむには辛くなってきたように思う。
Quotation
物理的な証拠が、仮説を少しずつ揺るぎないものにしていくだろう。事実とはこうして後から形成されるものだ。しかし、人の心の中の、その時々の葛藤 は、二度と正確に再現されることはない。たとえ、本人の口が語ったとしても、その言葉は明らかに虚構である。理由も動機もすべて、光が当てられたときに現れる影に過ぎない。光の当て方によっては、影はどちらにも現れ、形の歪 み方も変わり、幾つもが同時に現れることさえある。 )