クイズ大陸



履歴 検索 最新 出題

No. 17≫ No.18 ≫No. 19
?Yss 2015/08/04 22:23
まず、サイフが8枚の場合を考えてみる。
8=2^3であるから、3ビットあれば全ての番号を表せる。
サイフの番号は、右端が0、順に1,2,3…と決めておく。


サイフの並びを、二進数と対応させて、
サイフの表裏を表すベクトルWを定義する。
W=(w7,w6,…,w0)である。w7が一番左とする。

w7=1は一番左のサイフが表であることを表す。
w7=0は   〃    裏であることを表す。
他の添え字も同様。

ここで、パリティP1 P2 P3を次のように定義する。

P1=w7(+)w6(+)w5(+)w4
P2=w7(+)w6(+)w3(+)w2
P3=w7(+)w5(+)w3(+)w1

但し(+)記号は、排他的論理和を表す。
1(+)1=0
1(+)0=1
0(+)1=1
0(+)0=0
である。
(演算記号の左右が同じなら0、異なれば1となる)


ここで、たとえば、サイフの初期配置が、
(w7,w6,…,w0)=(0,0,1,0,0,1,0,0)
だったとして、

パリティを計算し、P1 P2 P3の順に並べて、
二進数を作ると、111となる。

さらに、実際に札が入っているサイフの番号を、
二進数で表す。
たとえば、実際に札が入っているサイフが
0,3,7番の場合、
それぞれ、000,011,111となる。

これらの数値と、
サイフの初期配置のパリティーとを、
各桁毎に排他的論理和を取る。

札の入っているサイフの番号が、0,3,7の場合、
結果は、
111(+)000 = 111(binary) = 7(decimal)
111(+)011 = 100(binary) = 4(decimal)
111(+)111 = 000(binari) = 0(decimal)


それぞれ、111,100,000となる。
これを二進数で解釈すると、
ひっくり返すべきサイフの番号が得られる。
それぞれ、7、4、0となるが、つまり、
w7,w4,w0が反転すべきサイフとなる。

(パリティの式とにらめっこすると、
 合っていることが分かると思います)


さて、ここからが本番。64個のサイフの場合、

W=(w63,w62,…,w0)
として、
パリティーも64=2^6 なので、
P1~P6まで必要となる。

パリティのつくり方ですが、
Wの要素のうち、wn(nは0から63の整数)の添え字の番号が、
以下の条件を満たすもの全ての、排他的論理和を取る。

nを二進数で表したとき、
P1:最上位ビットが1である要素全て
P2:上からふた桁目が1である要素全て
P3:上から3桁目が1である要素全て
P4:上から4桁目が1である要素全て
P5:上から5桁目が1である要素全て
P6:最下位ビットが1である要素全て

サイフの初期配置のパリティを計算し、
P1 P2 P3 P4 P5 P6の順に並べて二進数を作る。
この数をPIとする。

次に、実際に札が入ったサイフの位置を、
右端が0、左端が63と考え、番号で表す。
そしてその番号を二進数で表す。
この数をBIとする。

たとえばPI=101010(binary)
そして、BI=111100(binary) = 60(decimal)
だったとすると、
各桁毎に、両者の排他的論理和を取る。
この場合、
A=PI(+)BI=010110(binary)

これは、サインとして示すべきサイフの配置と、
サイフの初期配置の差異を、
パリティで表したものである。


つまりサイフを一枚だけひっくり返したときに、
上の例であれば、
P2,P4,P5が反転するような、サイフの番号が分かればよい。

実は、上のように定義しておくと、
このような、都合の良いサイフの番号が、
Aを数値として解釈したときの数と一致する。

たとえば上の例の場合、
A=010110(binary)=22(decimal)

であるから、
22番のサイフを反転させれば良い。


簡単に根拠を示す。
22番のサイフは、パリティのうち、
22を二進数で表したビットが1である桁のもの、
つまり、P2,P4,P5の計算に含まれる。

つまり22番のサイフを反転させることは、
PIの上から2、4、5番目のビットを反転させることを意味する。

つまり、
A=PI(+)BIとして作ったAを使えば、
かならず、
BI=PI(+)A となる。

つまりAを数値として解釈した番号のサイフを反転させれば、
サイフの初期配置PIを、
サインとして使うべき最終配置(=札の入った番号)である、
BIと等しくすることが出来る。

あとは、次郎が、
正しくパリティを計算すれば、
64個のサイフであっても、
正しく、札の入った一個を特定できる。

以上から、
サイフの初期配置、
そして札の入ったサイフの位置が、
どのような場合であっても、
この方法で反転すべきサイフの番号が求まる。



おまけ。

ここで、この考え方でサイフ4枚の時のことを考えると、
パリティーは2ビット分必要で、上と同様に生成すると、

P1 (○○××)
P2(○×○×)
○は使うビット、×は計算しないビット
となるが、
この場合、以下のようになる。


サイフの状態、パリティー(二進数)、結果の番号の順で表す。
(サイフの状態で、一番右のサイフはパリティに一切関与しないので、
 裏表どちらでも良いという意味で×で表記)

表表表× →00 0
表表裏× →01 1
表裏表× →10 2
表裏裏× →11 3
裏表表× →11 3
裏表裏× →10 2
裏裏表× →01 1
裏裏裏× →00 0

以上のようになる。
実はダミーが右端に行くが、それ以外、
私が先に回答した直感的に分かりやすい回答と一致する。
(それが意図解だそうですから、なかなか数学的に、
 スッキリした解だったわけですね)


以上です。


改行がおかしくなってしまいましたので、
重複投稿ですが、失礼します。

たっくん4さんとは、何か同じ文化背景というか、共通するものを感じます (**)
表現は違いましたけど、解き方は本質的に同じでしたし。
返信 編集