こんな日は数学パズル。これを解くのがComputational Thinkingなのだろうか?
次の四角の中には1〜9の数が1回づずはいる。その配列を求めよ。という問題をtwitterでみかけた。
図 ピーターからの問題?
これを解くためにJuliaを用いると次のようになった。9重の整数のループがあってとてもださい。ループの範囲を集合にして1つずつ減らしていくということも考えられたが,もっときたなくなりそうなのでこれはやめ。それでも取り合えず答えは得られた。和と積で絞るのはちょっとトリッキーなので,正統的ではない。答えは1通りしかないというヒントに基づいている。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
function loop()
for i1 in 1:9
for i2 in i1+1:9
for i3 in i2+1:9
for i4 in 1:9
for i5 in 1:9
for i6 in 1:9
for i7 in 1:9
for i8 in 1:9
for i9 in 1:9
a=i1+i2+i3+i4+i5+i6+i7+i8+i9
b=i1*i2*i3*i4*i5*i6*i7*i8*i9
c=i1/(10*i4+i7)+i2/(10*i5+i8)+i3/(10*i6+i9)
if a==45 && b==362880 && c==1
return (i1,i2,i3,i4,i5,i6,i7,i8,i9)
end
end
end
end
end
end
end
end
end
end
end
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@time loop()
0.191865 seconds (201.31 k allocations: 10.933 MiB, 2.17% gc time)
(5, 7, 9, 3, 6, 1, 4, 8, 2)
0 件のコメント:
コメントを投稿