- ベストアンサー
囲碁の究極の終局(パート2)
これは、q=247284を見て思いついた質問です。 碁盤は19路盤を使用し、盤上の石の位置は左上を(1,1)とし、右下を(19,19)としてx座標は横、y座標は縦を表すことにし、打ち方のルールを次のように定めます。 1)黒から打ちはじめ、黒、白交互に打ちます。パスはありません。 2)黒は(1,1)から打ちはじめ、(2,1),(3,1)・・(19,1),(1,2),(2,2),(3,2),・・・と石を置いていきます。白は(19,19)から打ちはじめ、(18,19),(17,19)・・(1,19),(19,18),(18,18),(17,18),・・・と石を置いていきます。 3)360手目で(10,10)の天元を残して黒は盤上の上半分、白は下半分を占めますが、次は黒の手番なので(10,10)へ打って、白の180石を打ち上げます。 4)打ち上げた跡へ、白はまた(19,19),(18,19)・・・と打ち、黒は(11,10),(12,10)と打っていくと、さらに179手進んだところで(5,15)を残して盤上が石で埋まりますが、次は黒の手番なので(5,15)へ打って白の90石を打ち上げます。 5)打ち上げた跡へ、白はまた(19,19),(18,19)・・・と打ち、黒は(6,15),(7,15)と打っていきます。 6)このようなことを繰り返していき、盤上を黒が埋め尽くして(19,19)の1目を残すだけになったとき、または盤上を白が埋め尽くして(1,1)の1目を残すだけになったときに終局とします。 終局の時点で、どちらが残っているでしょうか。あるいは途中で無限ループになってしまうのでしょうか?もし終局できるとすれば、初手から何手目でしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です。補足見ました。 最初に断っておきますが,○○手目で終局すれば,"○○"と表示されるようなアルゴリズム(?)を作ったわけではないです。あと、この方法が間違っていたら,ご指摘をお願いします。 エクセルに A1 1 B1 361 C1 0 A2 =IF(A1+1=B1,1,A1+1) B2 =IF(B1-1=A2,361,B1-1) C2 =IF(OR(A2=360,B2=2),1,0)+C1 と入力し、A3,B3,C3以降はA2,B2,C2のコピーしました。 このように入力すると, A?の欄の数字は黒が?番目にとったボールの番号を、 B?の欄の数字は白が?番目にとったボールの番号を、 意味しています。 ただ、↑のような数字だけで,終局の場所を探すのは面倒なので, A列に360という数字が現れるか,B列に2という数字が現れたら(=終局したら),1を足す。という関数(?)をC列に作りました。 このように作ると、もしどこかで終局すると、それに相当する行より下で,C列の数字は全て1以上になります。 なので、A3,B3,C3以降をコピーする時に、 ・適当なところまでコピーしてみる, ・C欄が0だったら、もっと下までコピーをする ・C欄が1以上になっていたら、そこでコピーをやめ、最初に1になる行(=終局した場所)を探す、 という事にすれば、コピーの量が比較的少なくてすみます。 実際にこの通りにやってみると、 A4575 1 B4575 2 C4575 1 と、表示されているのが見つかります。 これは、白が4575番目に2番のボールを取ったこと(=(1,2)に石を打ったこと)を意味しているので, 4575*2=9150手目に終局した、という事が分かります。 ちなみに、もし、無限ループになっているか、終局が非常に遅かったら(エクセルで表示しきれないほど),この方法では,分かりませんよね?その場合はどうするのだろう、と思ったかもしれません。 その場合は、「○○手やっても終局しません。けど、ループしているのかは不明です」みたいな事を書くつもりでした(笑)
その他の回答 (2)
- stomachman
- ベストアンサー率57% (1014/1775)
q=247284をアゲたstomachmanです。数学の問題だっつーのに分かってくれない人もいて諦めてたのですけど、興味を持ってくださる方がいらっしゃって嬉しいです。 と、挨拶するだけでは回答になんないので… ご質問の条件は 初期状態:黒先、盤上の石の数が黒0個,白0個、空き361箇所。 からスタートして、石が上げられる所だけを見ていきますと、 白先、黒a個,白b個、空きn箇所。nが偶数 → 白先、黒a+n/2個,白0個、空きb+n/2箇所 白先、黒a個,白b個、空きn箇所。nが奇数 → 黒先、黒0個,白b+(n+1)/2個、空きa+(n-1)/2箇所 黒先、黒a個,白b個、空きn箇所。nが偶数 → 黒先、黒0個,白b+n/2、空きa+n/2箇所 黒先、黒a個,白b個、空きn箇所。nが奇数 → 白先、黒a+(n+1)/2個,白0個、空きb+(n-1)/2箇所 と状態遷移し、 空きが1箇所となったところで終わり、というゲームですね。 この状態遷移をEXCELでやらせてみたところ、50行目、つまり石をアゲる回数が50回になった所で終局し、 手数は9150手(白)でした。No.2のご回答と一致しています。 白黒どちらも25回ずつ石をアゲます。アゲハマは黒4215個、白4575個。 もしもここで終わりにしないで黒が(1,1)に打つと、これは1手目と同じことだから、以後9150手周期でループするわけですね。 ところで、<「打てる限り打て」というルールであれば、どんな手順で打とうが、「(ご質問のように)行儀良く順番に打つ場合」に帰着する>というのだったら面白いんですが、証明できんかなあ…
お礼
いやぁ、まさかご本人さまに来ていただけるとは、実は密かに期待していましたが、ありがとうございます。 実際に碁石を盤に並べてみましたら(それが手計算かぃ!(^^;)、ご指摘のように空きnの奇偶により解を求めるプログラミングが出来そうかなという気がしていましたが、明解にまとめていただきました。 実際に対局するとしたら、まず確実に2眼を作って取られないようにしておいてから空き地を石で埋めていくと思いますが、どうなるのか複雑すぎて見当もつきません。 盤路を少なくして、『2目以上の空き地には必ず石を埋めなければならない』というルールのパソコンゲームを作ったら、面白そうですね。二人で特許を取って、一儲けしませんか?(まあ、売れんだろなぁ、、(^^;) ご回答をありがとうございました。私は十分満足いたしましたので、これにて閉めさせていただきます。
- eatern27
- ベストアンサー率55% (635/1135)
パソコン(Excel)で計算させたところ、 白の勝ちとなりました。 9150手目に白が(1,2)をとり、終局となります。 なお、この問題を次のように解釈して解きました。この解釈で間違っていたら,言ってください。 1~361の番号のついたボールを用意する。 黒は1,2,3,・・・の順に,白は361,360,・・・の順にボールをとっていく。 もし、自分が次にとるべきボールを既にとっていたら、最初からとりなおす。 黒が360番をとるか、白が2番をとったら、終了。
お礼
さっそく回答いただき、ありがとうございます。Excelは使ったことがないので私が理解できるかどうかはわかりませんが、もし差し支えなければ計算のアルゴリズムを教えていただけないでしょうか?
お礼
再度のご丁寧な回答をありがとうございます。教えていただいたことを参考に研究してみたいと思います。それにしても、9150手目とはすごいですね。手計算しなくてよかったよと思いました。 疑問は一応解決しましたが、まだほかに違ったアプローチをしてくださる方もおられるかもしれませんので、申し訳ありませんが締め切りはもう少し先にさせていただきます。 大変ありがとうございました。