LoginSignup
2
2

More than 5 years have passed since last update.

Project Euler Q32 【パンデジタル積】

Last updated at Posted at 2017-12-01

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

問題

すべての桁に $1$ から $n$ が一度だけ使われている数を$n$桁の数がパンデジタル (pandigital) であるということにしよう: 例えば$5$桁の数 $15234$ は$1$から$5$のパンデジタルである.

$7254$ は面白い性質を持っている. $39 × 186 = 7254$ と書け, 掛けられる数, 掛ける数, 積が$1$から$9$のパンデジタルとなる.

掛けられる数/掛ける数/積が$1$から$9$のパンデジタルとなるような積の総和を求めよ.

HINT: いくつかの積は, 1通り以上の掛けられる数/掛ける数/積の組み合わせを持つが$1$回だけ数え上げよ.

解答

seq 9876 |
awk -v FS= '{s=1;for(i=1;i<=NF;i++){s*=gsub($i,$i)};if(s==1){print}}' |
factor |
awk 'NF!=2{print $1*1}' |
awk '{for(i=1;i<=$1;i++){if($1%i==0){print i"@"$1/i,$1}}}' |
grep -v "0" |
awk -v FS= 'length==11{s=1;for(i=1;i<=NF;i++){s*=gsub($i,$i)};if(s==1){print}}' |
uniq -f1 |
awk '{s+=$2}END{print s}'
45228

factorみたいに約数を出力するコマンドないかなあ。

スタートのseqを$98765$から$9876$に変更したところ、実行時間が$11$分から$12$秒へと劇的に改善した!

答え合わせ

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

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2