Project Eulerをワンライナーで解いてみる。
間違っていたらコメントください。
問題
辺の長さが $\{a,b,c\}$ と整数の$3$つ組である直角三角形を考え, その周囲の長さを $p$ とする. $p = 120$のときには3つの解が存在する:
$\{20,48,52\}, \{24,45,51\}, \{30,40,50\}$
p ≤ 1000 のとき解の数が最大になる p はいくつか?
解答
seq 998 |
awk '{for(i=1;i<=1000;i++){if(1000<=$1+i){break};print $1,i,sqrt($1^2+i^2)}}' |
fgrep -v '.' |
awk '$1+$2+$3<=1000{print $0,$1*$2,$1+$2+$3}' |
sort -k5,5n -k4,4n |
uniq -f3 |
uniq -c -f4 |
sort -k1,1n |
awk 'END{print $6}'
840
別解(ピタゴラス数の公式から導出)
seq 1000 |
awk '{for(i=1;i<=1000;i++){a=$1^2-i^2;b=2*$1*i;c=$1^2+i^2;if(a<=0||1000<a+b+c){break};print a,b,c,a*b,a+b+c}}' |
awk '{for(i=1;i<=100;i++){if(1000<$5*i){break};print $1*i,$2*i,$3*i,$4*i^2,$5*i}}' |
sort -k5,5n -k4,4n |
uniq -f3 |
uniq -c -f4 |
sort -k1,1n |
awk 'END{print $6}'
840
答え合わせ
こちらのサイト様と一致していればOKとした。
http://kingyojima.net/pje/039.html