小町平方数(awk)
前回の続きです。
今回の問題も引き続き広井さんの記事から
小町平方数(1)
- ○○○2=○○○○○○
ほとんど前のソースと同じである。
以下ソース
#!/usr/bin/awk -f # 小町平方数(1) # XXX^2=xxxxxx BEGIN{ search(1); } function search(n, i){ if(n == 4){ check_answer(); }else{ for(i = 1; i <= 9;i++){ if(!use_flag[i]){ use_flag[i] = 1; number[n] = i; search(n + 1); use_flag[i] = 0; } } } } function check_answer(){ num1 = 0; c = 0; for(j = 1; j <= 9; j++){ flag[j] = use_flag[j]; #コピー } for(i = 1; i <= 3; i++){ num1 = num1 * 10 + number[i]; } num2 = num1 ^ 2; split(num2,a,""); for(k in a){ if( flag[a[k]]){ return 0; } c++; flag[a[k]] = 1; } if(c == 6){ print num1,num2; } }
実行してみる
awk -f komachi_heihou.awk 567 321489 854 729316
これくらいの計算量なら一瞬ですね。
アルゴリズムの勉強なら、どの言語でもいいと思うのですが、特定の言語でないとこのアルゴリズムは実行出来ないということはあるのでしょうか?