awkで多角数

さて、いよいよ年末に近づきつつありますが、皆様いかがお過ごしでしょうか?
私も仕事やプライベートやらで忙しい日々を送ております。
ブログ更新も大変ですが、頑張って更新作業は続けていきたいと思います。
今回は多角数という問題で、いつもように広井さんのサイトからです。

www.geocities.jp

では早速問題です。
n 番目の m 角数を求めるプログラムを作ってください。

pythonで書かれてあったものをそのままawkに直しただけです。

#!/usr/bin/awk -f

BEGIN{
        for(i = 3; i < 9; i++){
                printf i " : ";
                for(j = 1; j < 17;j++){
                        printf polygonal_number(i,j) " ";
                }
                print;

        }
}

function polygonal_number(p,n){
        return ((p - 2) * n * n - (p - 4) * n) / 2;
}

実行してみます。

$ awk -f polygonal_number.awk
3 : 1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136
4 : 1 4 9 16 25 36 49 64 81 100 121 144 169 196 225 256
5 : 1 5 12 22 35 51 70 92 117 145 176 210 247 287 330 376
6 : 1 6 15 28 45 66 91 120 153 190 231 276 325 378 435 496
7 : 1 7 18 34 55 81 112 148 189 235 286 342 403 469 540 616
8 : 1 8 21 40 65 96 133 176 225 280 341 408 481 560 645 736

polygonal_number関数の式の意味はまだよく分かっていないで、しっかり勉強したいと思う。