2017-06-25 (Sun.)
四則パズル、小町算とも.
大抵はひと桁程度の自然数が4つ与えられ、四則 (加減乗除) を補って組み合わせることで 10 を作るパズル. 私が初めて知ったバージョンでは、自然数は一列で与えられるのでその順序を変えず、 四則演算記号 +-*/
及び括弧 ()
を適切に挿入することで答えが 10 になる式を作るというものだった. けど順序くらい自由に変えられるのが普通のルールらしい. ということでここでは次のようなものを "Make 10" と呼ぶことにする.
「記号と括弧を挿入して式を作る」などと言っているが、ようは次のようなことである.
そうして得た \(\mathcal{A}\) の中の唯ひとつの数が式の結果である. 例えば \(\frac{8}{1 - 1 / 5}\) という式は、次の手順で構成される.
こうすると、\(\mathcal{A}\) のことを1つの状態だと見做せて、「2つ取り出して演算結果を追加」という操作によって別の状態に遷移するということを考えられる. これで \(\{10\}\) という状態に辿りつけられれば、そのパスが求める式になる.
8x8 のマスからなるチェス盤が与えられる. ここに出来るだけ多くのクイーンを置く. ただしあるクイーンで別のクイーンを取れるような位置にあってはいけない (攻撃範囲に入ってはいけない). どう配置すればよいか.
行について言うと1つの行に高々1つのクイーンしか置けない. 2つ以上あったら一方のクイーンの攻撃範囲に入ってることになるので. 盤面は8x8なので8個の駒を置くことを考える.
1行あたり1つ置くことになるので、何列目に置くか、という情報の持ち方で良さそう. \(i\) 行目のクイーンを \(a_i\) 列目に置く、ということで \[a_1, a_2, \ldots a_8 ~~(1 \leq a_i \leq 8)\] と書ける.
もちろん列についても同じ列に複数のクイーンがあってはいけない. つまり \(a_i \ne a_j\) である必要がある. とすると \(a_1, a_2, \ldots a_8\) は \(1,2,\ldots,8\) の置換でよい. というわけで \(8!\) 通りだけ試せばよい (\(8! = 40320\)).
この数列 \((a_i)\) について、行及び列に関してはクイーン同士は必ず交わってないので、斜めについてだけチェックする. \(|a_i - a_j| = |i-j| ~(i \ne j)\) のとき、ちょうど斜め方向にクイーンが攻撃しあってるので、これが無いことを、8 クイーンの全てのペアについて調べれば良い.
ちなみに NxN の盤面にはいつも N 個のクイーンを置くことができる.
先に紹介したパズルは初出も発案者もよくわからないけれどこのパズルは小説家の森博嗣が自身の小説 1 の中で登場させたもの. でも私はそういった小説は読まないので、とあるサイト 2 で初めてこのパズルを知った.
参考文献 3 にあるが、ここにも要約しておくと次の通り.
これこそ、\(\left(\begin{array}{c}15\\5\end{array}\right)\) 通り試しちゃえば良いだけ. 下の解答は何も考えず全通り試しているだけ.
でも敢えてより深く考察をするのなら、
というわけで、有り得るボールの組み合わせは次のいずれか
というわけで組み合わせ自体は100通り程度?に減らすことは出来る. けどその後、結局並び替えも考える必要がある.
その名の通り BinaryPuzzle.com 4 というサイトで知った.
BinaryPuzzle.com 5 にあるが、和訳を兼ねて要約すると、
同じ数字が3つ並ばないということから、
.00.
→ 1001
(.
はまだ数字が埋められていない空のマスのこと)0.0
→ 010
特別に考えたのはこのくらい. 他は深さ優先探索で埋めてく.