引き算魔方陣
Excel VBA でパズルを解こう プログラムで脳トレに挑戦
という本に引き算魔方陣の問題が載っていた。
例えば、
2 1 4
3 5 7
6 9 8
がある。
これを[2, 1, 4, 3, 5, 7, 6, 9, 8] と表すこととし、
他の引き算魔方陣も出力してみた。
という本に引き算魔方陣の問題が載っていた。
例えば、
2 1 4
3 5 7
6 9 8
がある。
これを[2, 1, 4, 3, 5, 7, 6, 9, 8] と表すこととし、
他の引き算魔方陣も出力してみた。
# -*- coding: cp932 -*-
def f(i, j, ary)
ary[i] + ary[j] - ary[(i + j) / 2]
end
ary = []
(1..9).to_a.permutation(9){|p|
i = f(0, 2, p)
# 縦横斜めの各列で、両端の数字の合計から真ん中の数字を引いた値がどれも同じ
if i == f(3, 5, p)
if i == f(6, 8, p)
if i == f(0, 6, p)
if i == f(1, 7, p)
if i == f(2, 8, p)
if i == f(0, 8, p)
if i == f(2, 6, p)
ary << p
end
end
end
end
end
end
end
}
p ary
puts "#{ary.size}通りある。"
出力結果
[[2, 1, 4, 3, 5, 7, 6, 9, 8], [2, 3, 6, 1, 5, 9, 4, 7, 8], [4, 1, 2, 7, 5, 3, 8, 9, 6], [4, 7, 8, 1, 5, 9, 2, 3, 6], [6, 3, 2, 9, 5, 1, 8, 7, 4], [6, 9, 8, 3, 5, 7, 2, 1, 4], [8, 7, 4, 9, 5, 1, 6, 3, 2], [8, 9, 6, 7, 5, 3, 4, 1, 2]]
8通りある。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。