Bash
ProjectEuler
数学

Project Euler Q52 【置換倍数】

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

問題

$125874$を$2$倍すると$251748$となる. これは元の数$125874$と順番は違うが同じ数を含む.

$2x, 3x, 4x, 5x, 6x$ が $x$ と同じ数を含むような最小の正整数 $x$ を求めよ.

アプローチ

最小の正整数が$6$桁である場合、$1$倍から$6$倍まで並び替えで表せる為、使用されている数字は$6$個以下である。

解答

time seq 100000 999999 |
awk '$1%111111!=0' |
awk '{print $1,$1*2,$1*3,$1*4,$1*5,$1*6}' |
awk '{print $0,(length-5)/6}' |
awk '$7==length($1)' |
awk -v FS= '{delete s;for(i=1;i<=NF-length(index($0," ")-1);i++){s[$i]=1};print $0,length(s)-1}' |
awk '$7>=$8{print $1}'
142857

real    0m4.539s
user    0m6.636s
sys     0m0.117s

awk以外のコマンドも使いたいんだけど、問題の性質上awkが多くなるのは仕方ないのかなあ。

答え合わせ

こちらのサイト様と一致していればOKとした。
http://kingyojima.net/pje/052.html