問題(和訳)

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2062

回答例

$ time seq 10000 | sed 's/$/^3/' | bc | awk '{for(i=1;i<=length($1);i++){print NR,substr($1,i,1)}}' | LANG=C sort -k1,1n -k2,2n | awk '$1!=a{print a,b;b=""}{a=$1;b=b""$2}' | awk '{a[$2]=a[$2]" "$1}END{for(v in a){print a[v]}}' | awk 'NF>4' | sort | sed 1q | awk '{print $1,$1^3}'
5027 127035954683

real    0m0.348s
user    0m0.407s
sys     0m0.034s

解説

立方数の各桁を小さい順に並べ替えたものをキーとする連想配列に、
元となる数字 (n^3で言うところのn) を格納していき、
5個になるもののうち、最小のものを抽出する

 # 元となる数字は多分4桁だろうという勝手な予想
 seq 10000 | 
 
 # 立方数の計算は、sed で式を作り bc に食わせる
 sed 's/$/^3/' | bc | 
 
 # 立方数をバラして各桁を小さい順に並べ替える
 # awkで 1列目:元となる数字 2列目:各桁数字 となるようにバラす
 awk '{for(i=1;i<=length($1);i++){print NR,substr($1,i,1)}}' | 
 
 # 一気に sort する
 LANG=C sort -k1,1n -k2,2n | 
 
 # sort した結果を再び awk で結合する
 #   a:元となる数字 b:立方数の各桁を小さい順に並べ替えたもの
 awk '$1!=a{print a,b;b=""}{a=$1;b=b""$2}' | 
 
 # 連想配列に元となる数字を結合していく
 awk '{a[$2]=a[$2]" "$1}END{for(v in a){print a[v]}}' | 
 
 # 立方数になるような桁の置換が5つのものを抽出
 awk 'NF==5' | 
 
 # 最も小さい元となる数を抽出
 sort | sed 1q | 
 
 # 解答を出力
 awk '{print $1,$1^3}'

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-08-15 (火) 22:03:06