No. 19≫ No.20 ≫No. 21
Yss
2015/12/16 10:50
問2はQに解説してもらいましょう。
Q「キミは、二進数を知っているかい?」
B「知ってますよ。」
Q「じゃあ、二進の『グレイコード』は知っているかい?」
B「・・・いや、分かりません。」
Q「グレイコードというのはね、普通の二進数と同様0と1で構成されているんだけど、数値が1進む度に、必ず1ビットだけ変化が出るように並べられているコードのことだよ。」
B「何となく分かるような、分からないような。」
Q「二進数で7はどう表す?」
B「111です。」
Q「では8は?」
B「1000です。」
Q「そうだね。数は1しか違わないのに、全ビットが反転していて、ここって妙に変化が大きいと思わないか?」
B「そうですけど、繰り上がりがあるので仕方ないですよね?」
Q「そうなんだけど、数字が1個進むごとに、1ビットだけ反転していく、というコードが便利なときもあるんだよ。この、スイッチの探索なんてまさに、そういう話じゃないか。」
B「はぁ・・・分かったような、分からないような。」
Q「二進4桁のグレイコードは、こういう並びになる。順に0から15までを表す」
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000
B「なるほど確かに、ひとつ進むごとに一桁だけ反転している・・・」
Q「このパズルでは、グレイコードそのものではないけれど、近い考え方でスイッチ探索をすると効率的だろう・・・ただ、キミはグレイコードを知らなかったのに、さっきの解法を思いついたのかい?」
B「え?まあそうですけど。」
Q「実際、最短の手数になっていたので、知っていたのかと思ったよ。」
B「えへへ。野生の勘ってヤツ?」
A「B太くん、あんまり野生は似合わないけど・・・」
Q「それで、スイッチの探索は、まずこんな風に行う。ひとつ入れて、隣を入れて、ひとつ前のを切る、といった手順だ。」
最初の数字が手数、あとの5桁はそれぞれT1からT5のスイッチのON(1)/OFF(0)を表す。
54321 ←スイッチの番号
0:00000
1:00001
2:00011
3:00010
4:00110
5:00100
6:01100
7:01000
8:11000
Q「以上はあくまで計画で、もしこの操作の途中で、音の鳴らないスイッチに遭遇したら、そのスイッチは以後スルーする。例えば今回の場合T3が無音だったね。つまり手順の4番目で無音だったよね。そうしたらその時点で桁数を減らす。」
54321
0:00000
1:00001
2:00011
3:00010
4:00110 ←無音(=T3は回路外)
↓考え方として、桁数を減らす(スイッチ操作はしていない)
5421
4:0010
↓そして、4桁にして続きを行う。
5:0110
6:0100
7:1100
ここまでで、回路外のスイッチを特定するだけでなくて、
正解があり得るパターンのうち、
0011
0110
1100
を試しているので、残りは、
1010
0101
1001
のみっつ。(なぜなら、ふたつON、ふたつOFFのパターンと分かっているので、1111などは探索から除外してよい)
8:0100
9:0101 *
a:0001
b:1001 *
c:1000
d:1010 *
*をつけたところで、開く可能性がある。
Q「というわけだけど。よく分からないと言いながら、実際にこのパターンで探索したんだから、大したもんだよ」
B「えへへ・・・」
Q「キミは、二進数を知っているかい?」
B「知ってますよ。」
Q「じゃあ、二進の『グレイコード』は知っているかい?」
B「・・・いや、分かりません。」
Q「グレイコードというのはね、普通の二進数と同様0と1で構成されているんだけど、数値が1進む度に、必ず1ビットだけ変化が出るように並べられているコードのことだよ。」
B「何となく分かるような、分からないような。」
Q「二進数で7はどう表す?」
B「111です。」
Q「では8は?」
B「1000です。」
Q「そうだね。数は1しか違わないのに、全ビットが反転していて、ここって妙に変化が大きいと思わないか?」
B「そうですけど、繰り上がりがあるので仕方ないですよね?」
Q「そうなんだけど、数字が1個進むごとに、1ビットだけ反転していく、というコードが便利なときもあるんだよ。この、スイッチの探索なんてまさに、そういう話じゃないか。」
B「はぁ・・・分かったような、分からないような。」
Q「二進4桁のグレイコードは、こういう並びになる。順に0から15までを表す」
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000
B「なるほど確かに、ひとつ進むごとに一桁だけ反転している・・・」
Q「このパズルでは、グレイコードそのものではないけれど、近い考え方でスイッチ探索をすると効率的だろう・・・ただ、キミはグレイコードを知らなかったのに、さっきの解法を思いついたのかい?」
B「え?まあそうですけど。」
Q「実際、最短の手数になっていたので、知っていたのかと思ったよ。」
B「えへへ。野生の勘ってヤツ?」
A「B太くん、あんまり野生は似合わないけど・・・」
Q「それで、スイッチの探索は、まずこんな風に行う。ひとつ入れて、隣を入れて、ひとつ前のを切る、といった手順だ。」
最初の数字が手数、あとの5桁はそれぞれT1からT5のスイッチのON(1)/OFF(0)を表す。
54321 ←スイッチの番号
0:00000
1:00001
2:00011
3:00010
4:00110
5:00100
6:01100
7:01000
8:11000
Q「以上はあくまで計画で、もしこの操作の途中で、音の鳴らないスイッチに遭遇したら、そのスイッチは以後スルーする。例えば今回の場合T3が無音だったね。つまり手順の4番目で無音だったよね。そうしたらその時点で桁数を減らす。」
54321
0:00000
1:00001
2:00011
3:00010
4:00110 ←無音(=T3は回路外)
↓考え方として、桁数を減らす(スイッチ操作はしていない)
5421
4:0010
↓そして、4桁にして続きを行う。
5:0110
6:0100
7:1100
ここまでで、回路外のスイッチを特定するだけでなくて、
正解があり得るパターンのうち、
0011
0110
1100
を試しているので、残りは、
1010
0101
1001
のみっつ。(なぜなら、ふたつON、ふたつOFFのパターンと分かっているので、1111などは探索から除外してよい)
8:0100
9:0101 *
a:0001
b:1001 *
c:1000
d:1010 *
*をつけたところで、開く可能性がある。
Q「というわけだけど。よく分からないと言いながら、実際にこのパターンで探索したんだから、大したもんだよ」
B「えへへ・・・」