Bash
ProjectEuler
数学

Project Euler Q62 【立方数置換】

More than 1 year has passed since last update.

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