問題(和訳)

Problem 28 「螺旋状に並んだ数の対角線」
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2028

回答例

seq 1 2 1001 | awk 'NR==1{print}NR>1{print 4*$1^2-6*$1+6}' | awk '{a+=$1}END{print a}'

実行結果

669171001

real    0m0.004s
user    0m0.000s
sys     0m0.000s

解説

  • 螺旋は 1x1, 3x3, 5x5, ..., のように、一辺の長さが奇数になる
  • 一辺の長さ n > 1 のとき、四つ角の合計値は、
    n^2 + {n^2-(n-1)} +{ n^2-2(n-1)} +{ n^2-3(n-1)} = 4n^2-6n+6 で求められる
  • n=1..1001 を素直に計算し、和を求める
# 1..1001までの奇数を生成
seq 1 2 1001 |
# 螺旋の4隅の合計値を求める
awk '
  # n=1 の時、 1 を出力
  NR==1{ print }
  # n>1 の時、4隅の合計値を出力
  NR>1 { print 4*$1^2-6*$1+6}
' |
# 和を出力
awk '{a+=$1}END{print a}'

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-10-11 (水) 19:42:28