では正解発表を始めます。
まずはvipperさんの回答
>>7を公開します。
さらに改良した結果、ロボットへの指示は30行、8種類で済むようになりました。
それに到達するには少々手間がかかります。
カード7枚の順列は7!=5040通り。
この中で作れないものがあれば、それを指定されたときに勝つことはできません。
よって5040通りすべてを作らざるを得ません。
ある順列の1枠と他の枠のカードを交換すると、別の順列ができます。
その順列の1枠とある枠のカードを交換すると、また別の順列ができます。
実は1枠と他の枠のカードの交換だけで、すべての順列を作り最初の順列に戻ってくることができます。
(後で示します)
このようにしてできる順列に1,2,3,・・・,5040と番号をつけます。
・現在の順列が何番なのか判別する
・次の順列になるよう1枠とある枠を入れ替える(5040番の次は1番とする)
・カードをすべて裏向きにする
これを繰り返せばすべての順列を作ることができますので確実に勝つことができます。
順列の番号を求めるためにはすべてのカードの数字を知る必要があります。
すべてのカードの数字を知るためには少なくとも6枚が表でないといけません。
7枠のみ裏の状態で判定することにします。
n番の順列から次の順列を作るためには、1枠とf(n)枠を入れ替えればよいとします。
(nの求め方、関数fの内容は後で書きます)
次のような指示をすればうまくいきます。
@すべて裏の場合、1枠のカードをひっくり返せ
A1枠のみ表の場合、2枠のカードをひっくり返せ
B1,2枠のみ表の場合、3枠のカードをひっくり返せ
C1-3枠のみ表の場合、4枠のカードをひっくり返せ
D1-4枠のみ表の場合、5枠のカードをひっくり返せ
E1-5枠のみ表の場合、6枠のカードをひっくり返せ
F1-6枠のみ表の場合
現在の順列がn番だとする。
F-1:f(n)が2以上5以下の場合、f(n)枠のカードをひっくり返せ。
F-2:f(n)=6の場合、7枠のカードをひっくり返せ。
F-3:f(n)=7の場合、1枠と7枠のカードを交換せよ。
G2枠,3枠,4枠,5枠のいずれか1枚と7枠の計2枚のみが裏になっている場合
2-5枠の中の裏向きのカードと1枠のカードを交換せよ。
Hすべてのカードが表向きの場合、6枠のカードをひっくり返せ。
I6枠のカードだけが裏の場合、1枠と6枠のカードを交換せよ。
J以上のいずれにも該当しない場合
表になっているカードの内、枠番号が最小のカードをひっくり返せ。
Fのときにn,f(n)が決まったとすると、
f(n)=2,3,4,5の場合、F−1、Gの操作により、1,7枠のみ裏の状態になります。
その後はJにより、すべて裏向きになります。
f(n)=6の場合、F-2,H、Iにより、1枠のみ裏の状態になります。
その後はJにより、すべて裏向きになります。
f(n)=7の場合、F-3により、1枠のみ裏の状態になります。
その後はJにより、すべて裏向きになります。
あとは順列の番号を求めf(n)を決定する方法を考えるだけです。
宇奈月 2011/10/24 17:32
まずはvipperさんの回答>>7を公開します。
さらに改良した結果、ロボットへの指示は30行、8種類で済むようになりました。
それに到達するには少々手間がかかります。
カード7枚の順列は7!=5040通り。
この中で作れないものがあれば、それを指定されたときに勝つことはできません。
よって5040通りすべてを作らざるを得ません。
ある順列の1枠と他の枠のカードを交換すると、別の順列ができます。
その順列の1枠とある枠のカードを交換すると、また別の順列ができます。
実は1枠と他の枠のカードの交換だけで、すべての順列を作り最初の順列に戻ってくることができます。
(後で示します)
このようにしてできる順列に1,2,3,・・・,5040と番号をつけます。
・現在の順列が何番なのか判別する
・次の順列になるよう1枠とある枠を入れ替える(5040番の次は1番とする)
・カードをすべて裏向きにする
これを繰り返せばすべての順列を作ることができますので確実に勝つことができます。
順列の番号を求めるためにはすべてのカードの数字を知る必要があります。
すべてのカードの数字を知るためには少なくとも6枚が表でないといけません。
7枠のみ裏の状態で判定することにします。
n番の順列から次の順列を作るためには、1枠とf(n)枠を入れ替えればよいとします。
(nの求め方、関数fの内容は後で書きます)
次のような指示をすればうまくいきます。
@すべて裏の場合、1枠のカードをひっくり返せ
A1枠のみ表の場合、2枠のカードをひっくり返せ
B1,2枠のみ表の場合、3枠のカードをひっくり返せ
C1-3枠のみ表の場合、4枠のカードをひっくり返せ
D1-4枠のみ表の場合、5枠のカードをひっくり返せ
E1-5枠のみ表の場合、6枠のカードをひっくり返せ
F1-6枠のみ表の場合
現在の順列がn番だとする。
F-1:f(n)が2以上5以下の場合、f(n)枠のカードをひっくり返せ。
F-2:f(n)=6の場合、7枠のカードをひっくり返せ。
F-3:f(n)=7の場合、1枠と7枠のカードを交換せよ。
G2枠,3枠,4枠,5枠のいずれか1枚と7枠の計2枚のみが裏になっている場合
2-5枠の中の裏向きのカードと1枠のカードを交換せよ。
Hすべてのカードが表向きの場合、6枠のカードをひっくり返せ。
I6枠のカードだけが裏の場合、1枠と6枠のカードを交換せよ。
J以上のいずれにも該当しない場合
表になっているカードの内、枠番号が最小のカードをひっくり返せ。
Fのときにn,f(n)が決まったとすると、
f(n)=2,3,4,5の場合、F−1、Gの操作により、1,7枠のみ裏の状態になります。
その後はJにより、すべて裏向きになります。
f(n)=6の場合、F-2,H、Iにより、1枠のみ裏の状態になります。
その後はJにより、すべて裏向きになります。
f(n)=7の場合、F-3により、1枠のみ裏の状態になります。
その後はJにより、すべて裏向きになります。
あとは順列の番号を求めf(n)を決定する方法を考えるだけです。