平方根の数字
awkネタ
平方根を小数で表したときに、0~9までの数字が最も早くすべて現れる最小の整数を求めて下さい。 ただし、ここでは正の平方根のみを対象とします。 整数部分を含む場合と、小数部分のみの場合のそれぞれについて求めて下さい。 例)2の平方根:1.41421356237309514548・・・ (0~9がすべて現れるのに19桁が必要
#!/usr/bin/awk BEGIN{ num = 2; # 整数部分を含む while(1){ for(a in array){ delete array[a]; } for(b in ret){ delete ret[b]; } n = sprintf("%10.10f",sqrt(num)); # 整数、小数それぞれ10桁 ten = index(n,"."); # . の位置 number = substr(n,1,ten - 1) substr(n,ten + 1); # .を除く文字列 split(number,array,""); for(i in array){ ret[array[i]]++; if(ret[array[i]] >= 2){ # 重複があれば対象外 break; } } if(length(ret) == 10){ print num; print n; break; } num++; } num = 2; # 小数部分のみの場合 while(1){ for(a in array){ delete array[a]; } for(b in ret){ delete ret[b]; } n = sprintf("%10.10f",sqrt(num)); # 整数、小数それぞれ10桁 ten = index(n,"."); # . の位置 number = substr(n,ten + 1); # .を除く文字列(小数部分のみ) split(number,array,""); for(i in array){ ret[array[i]]++; if(ret[array[i]] >= 2){ #重複があれば対象外 break; } } if(length(ret) == 10){ print num; print n; break; } num++; } }
awk -f q12.awk 1362 36.9052841745 143 11.9582607431