Bash
ProjectEuler
数学

Project Euler Q62 【立方数置換】

Project Eulerをワンライナーで解いてみる。
間違っていたらコメントください。

問題

立方数 $41063625 (345^3)$ は, 桁の順番を入れ替えると$2$つの立方数になる: $56623104 (384^3)$ と $66430125 (405^3)$ である. $41063625$は, 立方数になるような桁の置換をちょうど$3$つもつ最小の立方数である.

立方数になるような桁の置換をちょうど$5$つもつ最小の立方数を求めよ.

解答

time seq 345 9999 |
awk '{print $1^3}' |
awk '{split($1,a,"");asort(a,b);for(i=1;i<=length(b);i++){printf b[i]};printf " "$0"\n"}' |
sort |
awk '{if(k!=$1){printf "\n"$0" "}else{printf $2" "};k=$1}' |
awk 'NF==6{print $2}' |
sort |
head -1
127035954683

real    0m0.287s
user    0m0.300s
sys     0m0.017s

「数字を並び替えて同じ」ということは「使用している数字を配列としてみてsortした結果が同じ」ということである。
なので、sortした結果をキーに横に並べたときに$5$個あるものを拾えばよい。

答え合わせ

こちらのサイト様と一致していればOKとした。
Project Euler 62 _ 立方数置換 - PEをMathematicaで

参考にさせて頂いたサイト様

asort = 配列の要素を並び替える(Gawk専用) - AWK - to_dk notebook