JavaScript
Node.js
ProjectEuler
シェル芸

【簡単!】ProjectEulerの問題をJavascript1行で解いてみる

ProjectEulerとは

プログラムで解く数学の問題集です。1


せっかくなのでJavascript1行で解いてみる


Q1

10未満の自然数のうち, 3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり, これらの合計は 23 になる.
同じようにして, 1000 未満の 3 か 5 の倍数になっている数字の合計を求めよ.2

https://projecteuler.net/problem=1


Q1

10未満の自然数のうち, 3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり, これらの合計は 23 になる.
同じようにして, 1000 未満の 3 か 5 の倍数になっている数字の合計を求めよ.2

https://projecteuler.net/problem=1

[...Array(1000)]
.map((v,i) => i)
.filter((v) => !(v%3) || !(v%5))
.reduce((s, v) => s + v , 0)

Q2

フィボナッチ数列の項は前の2つの項の和である. 最初の2項を 1, 2 とすれば, 最初の10項は以下の通りである.
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
数列の項の値が400万以下の, 偶数値の項の総和を求めよ.3

https://projecteuler.net/problem=2


Q2

フィボナッチ数列の項は前の2つの項の和である. 最初の2項を 1, 2 とすれば, 最初の10項は以下の通りである.
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
数列の項の値が400万以下の, 偶数値の項の総和を求めよ.3

https://projecteuler.net/problem=2

(
    (f = (a) => !a ? 
        f([ 1, 2 ]) : 
        a[a.length-2] + a[a.length-1] > 4000000 ? 
        a : 
        f([...a, a[a.length-2] + a[a.length-1]])
    ) => f()
        .filter((v) => !(v%2))
        .reduce((s, v) => s +v , 0)
).call()

Q4

左右どちらから読んでも同じ値になる数を回文数という. 2桁の数の積で表される回文数のうち, 最大のものは 9009 = 91 × 99 である.
では, 3桁の数の積で表される回文数の最大値を求めよ.4

https://projecteuler.net/problem=4


Q4

左右どちらから読んでも同じ値になる数を回文数という. 2桁の数の積で表される回文数のうち, 最大のものは 9009 = 91 × 99 である.
では, 3桁の数の積で表される回文数の最大値を求めよ.4

https://projecteuler.net/problem=4

[...Array(1000)]
.map((v,i) => i)
.filter((v) => v > 99)
.map((v,i,a) => 
    a
    .map((b) => b * v)
    .filter((v) => `${v}` === `${v}`.split("").reverse().join(""))
)
.reduce((p,a) => [...p, ...a], [])
.sort((a,b) => a - b)
.pop();

参考資料