のてすきあ − 完全独習非プログラマー −

Haskell で Project Euler を解く素人遊び

Problem 42

三角数列とは一般項が n(n+1)/2 で与えられる数列である。与えられたファイルに羅列された単語を所定の方法で数値に変換した際に、三角数となる単語がファイルにいくつ含まれているか調べる。

テキストファイルを読み込んで単語を文字列のリストとする処理は以前にも登場した。単語を数値に変換する手順もこの問題と同じだったので、まるまる再利用させていただく。

mitstream.hatenablog.jp

あとは数値が三角数かどうかを評価するだけだが、これはelemを使って三角数列の要素かどうかを調べる方法を採用した。実はelemはリストを全走査する処理なので、安易に使うと計算が遅くなる可能性がある。その時はデータ構造をリストから木に変換しようかと思いつつ、試しにelemを走らせてみたが、全く問題なく計算が終了したため、それで良しとした。

elemを使っても大丈夫☆