小町分数(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なら一瞬で計算してくれますね。