Project Euler #1 with SQL
遅ればせながらAbout - Project Eulerでもやってみようかと登録。
なるほど。プロフィールの代わりに使用する言語を登録するのか、プログラマはこういうところで自己主張するよな、とか思って見てみると
、、、SQLは?(;´Д`)
ということでSQLで解いてみました。第一問目。
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.
標準SQL以外にPostgreSQLの関数を使ってます。
SQLだと集合を集合として扱えるので美しいですね。ループを使っていいのは小学(ry*1
また気が向いた時に続きをSQLで解いていきたいと思います。
SETOF関数
問題を解くだけだと何なので簡単な解説を一つ。
解答の中のgenerate_series関数は、始まりと終わりの数を引数にとって、その「集合」を返す関数です。
このような集合を返す関数はPostgreSQLではSETOF関数と呼ばれています。
詳しくはここらへんを参照。
9.24. 集合を返す関数
SETOF関数のあれこれ - 象と戯れ - postgresqlグループ
generate_seriesを使うと連番の集合を簡単に生成できるので、Project Eulerのような問題向きですね。
なのでProject Eulerの管理者は早くSQLをLanguageから選べるようにするべきです!SQL!SQL!
*1:今時の言語ならmapを使うか