awkでパズルを解く(小町算part3)

前回の続きです。次は小町平方数を行います。
問題:○に1〜9を1回ずつ入れて式を完成させましょー。
小町平方数(1)
○○○^2=○○○○○○

これもa ^ 2 = bという形で考えてみる。
aの最小値を適当な数値で2乗しながらもとめてみると、317であった。最高値は987.。
それぞれの桁の値が大きくなってきたのでtempという一時変数を利用しています。

# 小町平方数(1)
# ○○○^2=○○○○○○

BEGIN{
a = 317; # aの最小値。317 ^ 2 = 100489となり6桁
while(a <= 987){
b = a ^ 2;
if(keisan1(a,b)){
print "ans=",a,b;
}
a++;
}
}

function keisan1(a,b){
keta[0] = int(a / 100);
keta[1] = int((a - keta[0] * 100) / 10);
keta[2] = int((a - keta[0] * 100) % 10);

keta[3] = int(b / 100000);
temp = b - keta[3] * 100000;
keta[4] = int(temp / 10000);
temp = temp - keta[4] * 10000;
keta[5] = int(temp / 1000);
temp = temp - keta[5] * 1000;
keta[6] = int(temp / 100);
temp = temp - keta[6] * 100;
keta[7] = int(temp / 10);
keta[8] = int(temp % 10);

for(i = 0;i <= 8;i++){
for(j = i + 1;j <= 8;j++){
if(keta[i] == keta[j]){
return 0;
}else if(keta[i] == 0 || keta[j] == 0){
return 0;
}
}
}
return 1;
}

実行してみると、


ans= 567 321489
ans= 854 729316

うむ。出来てるっぽい。