小町分数(2)

昨日から寒い日が続いておりますが、皆様いかがお過ごしでしょうか?

さて、awkで小町分数を解いてみたいと思います。
今回は下記の問題です。

小町平方数(2)
○○○○○○○○○=□□□□□^2

いつものように、広井さんのサイトから問題をお借りしております。
www.geocities.jp

以下ソースです。

#!/usr/bin/awk -f
# 小町分数

BEGIN{
    search();
}
function check(num,flag){
    split(num,a,"");
    for(n in a){
        if(flag[a[n]] || a[n] == 0){
            return 0;
        }
        flag[a[n]] = 1;
    }
    return 1;
}
function search(num1,num2){
    for(num1 = 11112; num1 <= 31426; num1++){
        num2 = num1 * num1;
        if(check(num2)){
            print num1,num2;
        }
    }
}

今回のポイントはflagの配列をローカル変数にしないといけません。
このあたりはいつも気をつける必要がありますね。
さて、実行してみます。

$ awk -f komachi.awk
11826 139854276
12363 152843769
12543 157326849
14676 215384976
15681 245893761
15963 254817369
18072 326597184
19023 361874529
19377 375468129
19569 382945761
19629 385297641
20316 412739856
22887 523814769
23019 529874361
23178 537219684
23439 549386721
24237 587432169
24276 589324176
24441 597362481
24807 615387249
25059 627953481
25572 653927184
25941 672935481
26409 697435281
26733 714653289
27129 735982641
27273 743816529
29034 842973156
29106 847159236
30384 923187456

今のPCなら一瞬で計算してくれますね。