初投稿です.表現下手なところがあるので温かい目で見ていただけると幸いです.
天秤パズルをもとにしたパズルを作りました!ぜひ,挑戦してみてください!
「そもそも天秤パズルとは?」という人向けに天秤パズルの紹介もしています.
「知ってる!」と言う人は,
自作パズルに挑戦
へ飛んでいただいても大丈夫です.
天秤パズル(balance puzzle, weighting puzzle)とは,天秤を限られた回数使って重さの違うコインを探し出す論理パズルです.さっそくですが,例題を見てみましょう.
あなたはコインを9枚持っています.そのうち1枚だけ重さが重いコインがあるそうです.天秤を2回使って重いコインを探し出してください.
この問題は,次で解くことができます.
説明のために,コインに1から9までの数字をつけておきます.
図のように,天秤の左右にコインを置くと左右に傾いたり,傾かなかったりします.その結果を使って重さの違うコインを当てるパズルが天秤パズルです.なんとなくわかっていただけたでしょうか?
どんなパズルかわかっていただけたところで,もう一つ例題を出します.
あなたはコインを4枚持っています.そのうち1枚だけ重さが違う(重い or 軽い)コインがあるそうです.天秤を2回使ってそのコインを探し出してください.
この問題のように,重いか軽いかがわからないタイプの問題もあります.
この問題は,次で解くことができます.
説明のために,コインに1から4までの数字をつけておきます.
重いか軽いかがわからないと難しくなりますね….
もっとコインの枚数が多くなったらどうですか?解けそうですか?2つ問題を出しておくので,ぜひ挑戦してみてください!
あなたはコインを27枚持っています.そのうち1枚だけ重さが重いコインがあるそうです.天秤を3回使って重いコインを探し出してください.
あなたはコインを13枚持っています.そのうち1枚だけ重さが違う(重い or 軽い)コインがあるそうです.天秤を3回使ってそのコインを探し出してください.
この章では,天秤パズルの解法を紹介します.
解法を考える前にパズルを深掘りしておきたいと思います.
前章で紹介したように,天秤パズルはタイプが2つあり,次の形をしていました.
例題1のタイプ:
あなたはコインを$c$枚持っています.そのうち1枚だけ重さが重いコインがあるそうです.天秤を$n$回使って重いコインを探し出してください.
例題2のタイプ:
あなたはコインを$c$枚持っています.そのうち1枚だけ重さが違う(重い or 軽い)コインがあるそうです.天秤を$n$回使ってそのコインを探し出してください.
今回は説明の都合上扱いませんが,実は次のような天秤パズルもあります.
あなたはコインを12枚持っています.それらコインは重さが全て同じか,1枚だけ重さが違う(重い or 軽い)そうです.天秤を3回使って重さが違うコインがあるかを判定し,重さが違うコインがある場合はそのコインを見つけてください.
このタイプの問題に関しては,また後日記事を書きたいと思います.
これから,この2つのタイプの問題を深掘りしていきます.説明の都合上,コインには1から$c$までの数字がついていることとします.
まずは,条件にあたる次の部分の定式化を考えていきましょう.
これらは,数字$i$がついたコインの重さを$w_i$とすると,次で定式化できます.
$\exists w \in \mathbb{R}_{>0}, \exists w' \in \mathbb{R}_{>0}, \exists! \, i \in \{1, \ldots, c\}, \, \mathrm{s.t.} \,((\forall \, j \in \{1, \ldots, c\} \setminus\{i\}, w_j = w) \land (w_i = w+w'))$
$\exists w \in \mathbb{R}_{>0}, \exists w' \in \mathbb{R}_{\ne0}, \exists! \, i \in \{1, \ldots, c\}, \, \mathrm{s.t.} \,((\forall \, j \in \{1, \ldots, c\} \setminus\{i\}, w_j = w) \land (w_i = w+w'))$
この2つは,"$i$以外は同じ重さ$w$で,$i$は重さが$w'$違って$w+w'$.そんな$i$はひとつだけ"ということを表しています.$\exists$の部分に関しては,回答者には教えないけど…という感じでしょうか.
少しづつ形が違うのは,
というところからきています.
次は,天秤の操作にあたる部分の定式化を考えていきましょう.
考える土台がないと難しいので,
例題1の解法
をもとに定式化を考えていきます.
天秤を使ったのは,次の操作でした.
コイン1,2,3を左に,コイン7,8,9を右に置き,重さを比べる.
これは,
のいずれかが成り立つかを調べたことになります. これを言い換えると,
のいずれかが成り立つかを調べたことになります.さらに言い換えると,$\mathrm{sgn}(w_1+w_2+w_3 - w_4 +w_5 + w_6)$を得たことになります.
ただし,$\mathrm{sgn}$は実数の符号を返す関数で,実数$x \in \mathbb{R}$に対し,$\mathrm{sgn}(x) =
\begin{cases}
1 & x > 0 \\
0 & x = 0 \\
-1 & x < 0 \\
\end{cases}$としておきます.
$\mathrm{sgn}$を作用させた後の結果は,
で,天秤の傾き方と対応します.
これで,一回の天秤の操作は定式化できました.
そういえば,例題1ではもう一回天秤を使っていましたね.
コイン1,4,7を左に,コイン3,6,9を右に置き,重さを比べる.
これは先ほど同様に考えると,$\mathrm{sgn}(w_1+w_4+w_7 - w_3 +w_6 + w_9)$を得たことになります.
この2つをまとめてものが次になります.
$\mathrm{sgn}\left(\left(\begin{array}{cccccccccc}
1 & 1 & 1 & 0 & 0 & 0 & -1 & -1 & -1 \\
1 & 0 & -1 & 1 & 0 & -1 & 1 & 0 & -1
\end{array}\right)
\left(\begin{array}{c}
w_1 \\
w_2 \\
w_3 \\
w_4 \\
w_5 \\
w_6 \\
w_7 \\
w_8 \\
w_9
\end{array}\right)\right)$を得ること.
ただし,実数$x_1, \ldots, x_n \in \mathbb{R}$に対し,$\mathrm{sgn}\left( \left(\begin{array}{c}
x_1 \\
\vdots \\
x_n
\end{array}\right)\right) =
\left(\begin{array}{c}
\mathrm{sgn}(x_1) \\
\vdots \\
\mathrm{sgn}(x_n)
\end{array}\right)$とします.
行列で書いてあげることで,2つの式を1つにまとめることができました.
これをもとにすると,天秤を$n$回使うは次で表せます.
$b_{1,1}, \ldots, b_{1,c}, \ldots, b_{n,1}, \ldots, b_{n,c}, \in \{1, 0, -1\}$に対し,$\mathrm{sgn}\left(\left(\begin{array}{ccc} b_{1,1} & \ldots & b_{1,c} \\ \vdots & \vdots & \vdots \\ b_{n,1} & \ldots & b_{n,c} \end{array}\right) \left(\begin{array}{c} w_1 \\ \vdots \\ w_c \end{array}\right)\right)$を得ること.
ここで現れる$b_{i,j} \in \{1, 0, -1\}$は,
で,天秤へのコインの乗せ方と対応します.例題1のコインの置き方と行列の関係を確認してみてください.
条件,天秤の操作の定式化ができたので,解法を考えていきましょう.
条件の定式化より,$i$を重さの違うコインとしたとき,$w_i$以外の重さは$w$,$w_i$の重さは$w+w'$で書けることをふまえると,天秤を$n$回使った結果は次になります.
$\mathrm{sgn}\left(\left(\begin{array}{ccccc} b_{1,1} & \ldots & b_{1,i} & \ldots & b_{1,c} \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ b_{n,1} & \ldots & b_{n,i} & \ldots & b_{n,c} \end{array}\right) \left(\begin{array}{c} w \\ \vdots \\ w+w' \\ \vdots \\ w \end{array}\right)\right)\begin{array}{c} \\ \\ \leftarrow i \, \text{行目} \\ \\ \\ \end{array}$
抽象的でわかりづらいですね….具体例を一つあげておきます.
例題と同じ天秤の置き方をして,数字3のついたコインが重かったとします(仮に,他のコインの重さが100.数字3のついたコインの重さがそれより50重かったとします).このとき,天秤を2回使った結果は,
$\mathrm{sgn}\left(\left(\begin{array}{cccccccccc} 1 & 1 & 1 & 0 & 0 & 0 & -1 & -1 & -1 \\ 1 & 0 & -1 & 1 & 0 & -1 & 1 & 0 & -1 \end{array}\right) \left(\begin{array}{c} 100 \\ 100 \\ 100+50 \\ 100 \\ 100 \\ 100 \\ 100 \\ 100 \\ 100 \end{array}\right)\right)= \mathrm{sgn}\left(\begin{array}{c} 50 \\ -50 \end{array}\right) =\left(\begin{array}{c} 1 \\ -1 \end{array}\right)$
となります.ちなみに,結果の解釈の仕方は,$1$が左に傾くで,$-1$が右に傾くだったので,この結果から1回目は左,2回目は右に傾いたことが分かります.
天秤を$n$回使った結果がわかったところで,結果から重さの違うコイン(すなわち,$i$)の見つけ方を考えていきましょう.そのために,結果をもう少し詳しくみていきます.天秤を$n$回使った結果
$\mathrm{sgn}\left(\left(\begin{array}{ccccc} b_{1,1} & \ldots & b_{1,i} & \ldots & b_{1,c} \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ b_{n,1} & \ldots & b_{n,i} & \ldots & b_{n,c} \end{array}\right) \left(\begin{array}{c} w \\ \vdots \\ w+w' \\ \vdots \\ w \end{array}\right)\right)$
は,行列の線形性より,
$\left(\begin{array}{ccccc} b_{1,1} & \ldots & b_{1,i} & \ldots & b_{1,c} \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ b_{n,1} & \ldots & b_{n,i} & \ldots & b_{n,c} \end{array}\right) \left(\begin{array}{c} w \\ \vdots \\ w+w' \\ \vdots \\ w \end{array}\right)= \left(\begin{array}{ccccc} b_{1,1} & \ldots & b_{1,i} & \ldots & b_{1,c} \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ b_{n,1} & \ldots & b_{n,i} & \ldots & b_{n,c} \end{array}\right) \left(\begin{array}{c} w \\ \vdots \\ w \\ \vdots \\ w \end{array}\right)+ \left(\begin{array}{ccccc} b_{1,1} & \ldots & b_{1,i} & \ldots & b_{1,c} \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ b_{n,1} & \ldots & b_{n,i} & \ldots & b_{n,c} \end{array}\right) \left(\begin{array}{c} 0 \\ \vdots \\ w' \\ \vdots \\ 0 \end{array}\right)= \left(\begin{array}{ccccc} b_{1,1} & \ldots & b_{1,i} & \ldots & b_{1,c} \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ b_{n,1} & \ldots & b_{n,i} & \ldots & b_{n,c} \end{array}\right) \left(\begin{array}{c} w \\ \vdots \\ w \\ \vdots \\ w \end{array}\right)+ w' \left(\begin{array}{c} b_{1,i} \\ \vdots \\ b_{n,i} \end{array}\right)$
が成り立つことに注意すると,
$\mathrm{sgn}\left(\left(\begin{array}{ccccc} b_{1,1} & \ldots & b_{1,i} & \ldots & b_{1,c} \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ b_{n,1} & \ldots & b_{n,i} & \ldots & b_{n,c} \end{array}\right) \left(\begin{array}{c} w \\ \vdots \\ w \\ \vdots \\ w \end{array}\right)+ w' \left(\begin{array}{c} b_{1,i} \\ \vdots \\ b_{n,i} \end{array}\right)\right)$
が成り立ちます.もしここで,
$\left(\begin{array}{ccccc} b_{1,1} & \ldots & b_{1,i} & \ldots & b_{1,c} \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ b_{n,1} & \ldots & b_{n,i} & \ldots & b_{n,c} \end{array}\right) \left(\begin{array}{c} w \\ \vdots \\ w \\ \vdots \\ w \end{array}\right)=\left(\begin{array}{c} 0 \\ \vdots \\ 0 \\ \vdots \\ 0 \end{array}\right)$
とすることができたら,結果は
$\mathrm{sgn}\left(w' \left(\begin{array}{c} b_{1,i} \\ \vdots \\ b_{n,i} \end{array}\right)\right)= \mathrm{sgn}(w')\mathrm{sgn}\left(\begin{array}{c} b_{1,i} \\ \vdots \\ b_{n,i} \end{array}\right)= \mathrm{sgn}(w')\left(\begin{array}{c} b_{1,i} \\ \vdots \\ b_{n,i} \end{array}\right)$
となります.つまり,結果はコイン$i$の置き方と,差$w'$の正負のみで決まることになるのです.ちなみに,最初の等式は,実数$x,y \in \mathbb{R}$に対し,$\mathrm{sgn}(xy)=\mathrm{sgn}(x) \mathrm{sgn}(y)$より,次の等式は,自然数$i,j$に対し,$b_{i,j} \in \{1,0,-1\}$より成り立ちます.
ここまでわかってしまえば,後は簡単です.
問題1のタイプは,差$w'$が正なので,コイン$i$が重いときはコイン$i$の置き方(すなわち,$\left(\begin{array}{c} b_{1,i} \\ \vdots \\ b_{n,i} \end{array}\right)$)が結果に出てきます.そのため,結果と一致する置き方をしているコインを探すことで重いコインを見つけることができます.その際,重さが重いコインの候補が複数あっては困るので,同じ置き方をしているコインがないこと(すなわち,$i_1 \ne i_2$に対し,$\left(\begin{array}{c} b_{1,i_1} \\ \vdots \\ b_{n,i_1} \end{array}\right) \ne \left(\begin{array}{c} b_{1,i_2} \\ \vdots \\ b_{n,i_2} \end{array}\right)$)が必要となります.
問題2のタイプは,差$w'$が正か負なので,コインが$i$重いときはコインの置き方が,軽いときはコインの置き方と逆の結果が出てきます.そのため,結果と一致する置き方をしているコイン,または結果と置き方が左右逆のコインを探すことで重さの違うコインを見つけることができます.その際,重さの違うコインの候補が複数あっては困るので,同じ置き方をしているコインがないことと,左右逆の置き方をしているコインがないこと(すなわち,$i_1 \ne i_2$に対し,$\left(\begin{array}{c} -b_{1,i_1} \\ \vdots \\ -b_{n,i_1} \end{array}\right) \ne \left(\begin{array}{c} b_{1,i_2} \\ \vdots \\ b_{n,i_2} \end{array}\right)$)が必要となります.
コインの見つけ方はこれでいいのですが,これができるのは,
$\left(\begin{array}{ccccc} b_{1,1} & \ldots & b_{1,i} & \ldots & b_{1,c} \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ b_{n,1} & \ldots & b_{1,i} & \ldots & b_{n,c} \end{array}\right) \left(\begin{array}{c} w \\ \vdots \\ w \\ \vdots \\ w \end{array}\right)=\left(\begin{array}{c} 0 \\ \vdots \\ 0 \\ \vdots \\ 0 \end{array}\right)$
のおかげでしたね.この条件も考えてみると,左と右におくコインの数が同じこと(すなわち,$\# \{j \in \{1,\ldots,c\}\mid b_{k,j} = 1\} = \# \{j \in \{1,\ldots,c\}\mid b_{k,j} = -1\}$)となります.「そんなの当たり前!」というような条件のおかげで,問題が簡単になるってすごくないですか!!
ここまでの議論をまとめておきます.
$b_{1,1}, \ldots, b_{1,c}, \ldots, b_{n,1}, \ldots, b_{n,c} \in \{1, 0, -1\}$が次の条件を満たすとする.
このとき,$\mathrm{sgn}\left(\left(\begin{array}{ccccc} b_{1,1} & \ldots & b_{1,c} \\ \vdots & \vdots & \vdots \\ b_{n,1} & \ldots & b_{n,c} \end{array}\right) \left(\begin{array}{c} w_1 \\ \vdots \\ w_c \end{array}\right)\right)= \left(\begin{array}{c} b_{1,i} \\ \vdots \\ b_{n,i} \end{array}\right)$なるコイン$i$が重さが重いコイン.
$b_{1,1}, \ldots, b_{1,c}, \ldots, b_{n,1}, \ldots, b_{n,c} \in \{1, 0, -1\}$が次の条件を満たすとする.
このとき,$\mathrm{sgn}\left(\left(\begin{array}{ccccc} b_{1,1} & \ldots & b_{1,c} \\ \vdots & \vdots & \vdots \\ b_{n,1} & \ldots & b_{n,c} \end{array}\right) \left(\begin{array}{c} w_1 \\ \vdots \\ w_c \end{array}\right)\right)= \left(\begin{array}{c} b_{1,i_2} \\ \vdots \\ b_{n,i_2} \end{array}\right)$または,$\mathrm{sgn}\left(\left(\begin{array}{ccccc} b_{1,1} & \ldots & b_{1,c} \\ \vdots & \vdots & \vdots \\ b_{n,1} & \ldots & b_{n,c} \end{array}\right) \left(\begin{array}{c} w_1 \\ \vdots \\ w_c \end{array}\right)\right)= \left(\begin{array}{c} -b_{1,i} \\ \vdots \\ -b_{n,i} \end{array}\right)$なるコイン$i$が重さが違うコイン.
具体例として, 天秤パズルとは? で紹介した問題を解いてみたいと思います.
あなたはコインを27枚持っています.そのうち1枚が他のコインと比べ重いということがわかっています.天秤を3回使って重いコインを探し出してください.
これは,例題1と同じタイプなので,
を満たすようなものを考えましょう.例えば,次が条件を満たします.
$\left(\begin{array}{ccccccccccccccccccccccccccc} 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & -1 & -1 & -1 & -1 & -1 & -1 & -1 & -1 & -1 \\ 1 & 1 & 1 & 0 & 0 & 0 & -1 & -1 & -1 & 1 & 1 & 1 & 0 & 0 & 0 & -1 & -1 & -1 & 1 & 1 & 1 & 0 & 0 & 0 & -1 & -1 & -1 \\ 1 & 0 & -1 & 1 & 0 & -1 & 1 & 0 & -1 & 1 & 0 & -1 & 1 & 0 & -1 & 1 & 0 & -1 & 1 & 0 & -1 & 1 & 0 & -1 & 1 & 0 & -1 \end{array}\right)$
この置き方を用いることで,前述の方法で重さの重いコインを見つけることができます.
あなたはコインを13枚持っています.そのうち1枚だけ重さが違う(重い or 軽い)コインがあるそうです.天秤を3回使ってそのコインを探し出してください.
これは,例題2と同じタイプなので,
を満たすようなものを考えましょう.例えば,次が条件を満たします.
$\left(\begin{array}{ccccccccc} 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 & 0 & -1 & -1 & -1 & -1 \\ 1 & 1 & 0 & -1 & 1 & 0 & 0 & -1 & -1 & 1 & 0 & 0 & -1 \\ 1 & -1 & -1 & 0 & 1 & 1 & 0 & 1 & 0 & -1 & 0 & -1 & 0 \\ \end{array}\right)$
この置き方を用いることで,前述の方法で重さの違うコインを見つけることができます.
それではお待ちかねの自作パズルです.ぜひ挑戦してみてください!
あなたは金貨6枚,銀貨7枚の計13枚持っています.そのうち1枚だけ重さが違う(重い or 軽い)そうです.ここで重さが違うとは,同じ種類のコインと比べて重さが違うことを意味します(すなわち,金貨の中に1つだけ他の金貨と比べ重さが違うものがあるか,銀貨の中に1つだけ他の銀貨と比べ重さが違うものがあります).天秤を3回使って重さの違うコインを探し出してください.
金貨の重さと銀貨の重さが同じ場合は,天秤パズルと同じ問題ですが,今回は重さが同じかもしれないし,違うかもしれません.そんな条件でも解けるのでしょうか?
途中に出てきた,『これがあると問題が簡単になる!!』という条件は,符号理論という分野でとても大切な条件になっています.今回の自作パズルもそこからの発想です(伝わる人がいるかはわかりませんが,オール1(全部同じ値)以外の符号語を考えてみたらこのパズルができました).このパズルを通じて,少しでも興味を持っていただけたら嬉しいです.また,このパズルも気に入ってくれると嬉しいです.