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