Project Eulerをワンライナーで解いてみる。
間違っていたらコメントください。
問題
数$1406357289$は$0$から$9$のパンデジタル数である ($0$から$9$が$1$度ずつ現れるので). この数は部分文字列が面白い性質を持っている.
$d_1$を上位$1$桁目, $d_2$を上位$2$桁目の数とし, 以下順に$d_n$を定義する. この記法を用いると次のことが分かる.
$d_2d_3d_4=406$ は $2$ で割り切れる
$d_3d_4d_5=063$ は $3$ で割り切れる
$d_4d_5d_6=635$ は $5$ で割り切れる
$d_5d_6d_7=357$ は $7$ で割り切れる
$d_6d_7d_8=572$ は $11$ で割り切れる
$d_7d_8d_9=728$ は $13$ で割り切れる
$d_8d_9d_{10}=289$ は $17$ で割り切れる
このような性質をもつ$0$から$9$のパンデジタル数の総和を求めよ.
解答
seq -w 17 17 987 |
awk '{for(i=1;i<=int(987/7);i++){printf("%03d%03d\n",7*i,$1)}}' |
awk '{for(i=1;i<=int(987/2);i++){printf("%03d%06d\n",2*i,$1)}}' |
awk 'substr($1,6,3)%13==0' |
awk 'substr($1,5,3)%11==0' |
awk 'substr($1,3,3)%5==0' |
awk 'substr($1,2,3)%3==0' |
awk -v FS= '{delete a;for(i=1;i<=NF;i++){a[$i]+=1;b[NR]+=$i};print $0,length(a),b[NR]}' |
awk '$2==9{print (45-$3)$1}' |
awk '{s+=$1}END{print s}'
16695334890
seq 9876543210
とかやればスッキリするだろうけど、時間かかってしまうからさすがに難しい。。
答え合わせ
こちらのサイト様と一致していればOKとした。
http://kingyojima.net/pje/043.html