2020年2月4日火曜日

立春の問題

今日は立春。暖く晴れた春の一日。

こんな日は数学パズル。これを解くのが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 件のコメント: