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

Haskell で Project Euler を解く素人遊び

2020-04-04から1日間の記事一覧

Problem 9

a < b < c a2 + b2 = c2 a + b + c = 1000 を満たす唯一の整数の組 (a,b,c) を見つけ、その積 abc を求める これはリスト内包表記のもとにズバッと一刀両断で終了。 ズバッ…っと ズバッ…と? 計算が終わらない。落ち着いて考えたらこれだとO(n3)あるのではな…

Problem 8

次の1000個の数字の中からひと続きの13個の数字の積を取る。積の最大値はいくらか。 非プログラマーの自分としては、 IO アクションにはどうも苦手意識がある。do構文も苦手である。だからこの問題は1000桁の数字をコピペして最初から[Int]型として扱うこと…

Problem 7

10001番目の素数を求める まずは伝統的なアレを使ってまっすぐやってみる。当然これで解決するが、思いの外計算が重い。素数列の生成に関しては速いパッケージが存在するので、それを使えばいいじゃないかという(内なる)声もあるが、人のふんどしでパズル…

Problem 6

100までの数の”2乗の総和”と”総和の2乗”の差を求める これはなんのヒネリもない問題。ごくごく素直に2乗の総和と総和の2乗を求めるだけ。計算量を削る工夫も不要。関数sumに感謝しながらパチパチとコードを書きましょう。 foldl を使ったり、ポイントフ…

Problem 5

1から20までのすべての数で割り切れる最小の数を求める Project Euler たまにこういうプログラミング不要の問題が出る。 一応方針らしきものを述べると、pn (pは素数、nは自然数)が20以下となるべきを全て掛けあわせれば良い。数が大きい場合はプログラム…

Problem 4

3桁の数同士の積で得られる最大の回分数を求める まずはリストが回分かどうかは判定するisPalindromeを準備する。これは鉄板。一応補足しておくと、こいつの型は[a] -> Bool でリストを引数に取る。1つの数(型で言うとInt)を評価することはできない。よっ…

Problem 3

大きな数の最大素因数を求める 最初に浮かんだ方針は、 1. 素数のリストを生成 2. filter と使って「大きな数」の素因数を抽出 3. その中で最大のものを拾う シンプルに行けると嬉しかったが、実際やってみると計算量が多すぎて一向に答えが出てこない。もう…

Problem 2

4,000,000を超えない偶数のフィボナッチ数の総和 まず"four million"っていくつだっけ?というところで間違いそうなので、最初に確認。フィボナッチ数列は泥臭く書き下す方がパッと見分かりやすいが、昔どこかでzipWithを使った小洒落たのを見たことがあった…