このクイズのヒント
-
ヒント知らないよ
このクイズの参加者(6人)
広告
広告
クイズ大陸関連書籍
|
几帳面な並べ方
難易度:★★★★
おのがあく 2010/09/05 12:06 1,2,3の三つの数字を並べていきます。(A,B,Cでも赤,白,黄色でもなんでもいいのですが。)
しかし同じパターンが連続しては、現れないように並べようと思っています。 例えば 11("1"というパターンが連続して現れている)、 1212("12"というパターンが連続して現れている) という並べ方はいけません。 しかし12312という並べ方は"12"というパターンが繰り返し現れていますが、連続してはいないので問題ありません。 さてこのように並べるとき、どれぐらい長く並べられるでしょうか。 ひらめきあり、試行錯誤あり、です。
|
ヒミツ
うーん… (’-)、
がんばればいくらでも並びそうな… もしかしたらどこかで終わりそうな… 私もまだ行くと思っていますが… 考えるのが面倒なのでいったんここで終了です。
おのがあく
さっそく御解答ありがとうございます。
囁きに問題はありませんね。 ですが、まだまだ行けそうです。
おのがあく
「正当な並び」と「修正」の仕方の具体例を挙げてもらえばうれしいですが、それが難しいとこですよね。でもなかなかなアイディアかと思われます。
おのがあく
長く続けていくには、繰返しを用いると楽になるのですが、単にそうするだけでは規則をやぶってしまうことになりますよね。
繰り返すのだけれど、規則をやぶらない繰り返し方をみつけたいものです。 この問題を解くにあたって僕には3回のひらめきがありましたが、これを見つけるのは、(順番で言うと)第2のひらめきでした。
おのがあく
第2段階で、例えば123と231は並べることができませんので(123231となり"23"が連続して繰り返す)、これではいけませんね。
具体的に34562個並べることができると囁いていただきました。 大変面白いですが、手ごわい問題ですね。
試しに12から始めて(対称性があるので、最初の2つは12に固定してもかまわないはず)、可能なパターンを全て列挙しながら長さを増やしてみましたが、長さ10くらいで手に負えなくなってきました。枝分かれの数は1.5より少し小さい数の指数関数になりそうです。 破綻するケース(1213121など次にどの数字が来てもアウト)は意外に少なく、無限に長くできそうな感触は持ちましたが、具体的な手順は思い浮かびません。
おのがあく
そうですよね。
僕も、この問題の答えのはじめの予想は20くらいかと思ったのですが、適当に並べただけでも40近くいけてしまいました。上手く並べていけばどこまでもいけそうな気がします。(はたして答えがどうなのかはさておき。) (楽に長く続けようと思えば、同じパターンを繰り返し使うのが有効そうですが、その時の) ポイントは、繰り返すのだけれども、ルールをやぶらない方法で沢山繰り返すことと、前後ろに何が来たとしても問題の起こりにくい「単語」を作ることかと思います。 ↑白抜きにしておきました。 さらに考えてみてください。 1 2 1 3 1 2 3 1 3 2 1 2 3 1 2 1 3 1 2 3
1 3 2 1 3 1 2 1 3 2 1 2 3 1 2 1 3 1 2 3 1 3 2 1 2 3 1 2 1 3 2 1 2 3 1 3 2 1 3 1 2 1 3 2 1 2 3 1 2 1 3 1 2 3 1 3 2 1 2 3 2 1 3 1 2 1 3 2 1 2 3 1 2 1 3 1 2 3 1 3 2 1 3 1 2 1 3 2 1 2 3 1 2 1 3 1 2 3 2 1 2 3 1 2 1 3 2 1 2 3 1 3 2 1 3 1 2 1 3 2 1 2 3 1 2 1 3 1 2 3 1 3 2 1 2 3 1 2 1 3 2 1 2 3 1 3 2 1 3 1 2 1 3 2 1 2 3 1 2 1 3 1 2 3 2 1 2 3 1 2 1 3 2 1 2 3 1 3 2 1 fortranでプログラミング組んで調べてみたら5000桁までは続きました/(^0^)\
(配列や条件反復を上手く組み合わせればアルゴリズムを作るのはそんなに難しくはないと思います、簡単でもなかったですが。) それ以上は調べてないので何処まで続くかは解りませんし、コンピューターでは無限に続くことの証明はしてくれません 一応、囁きではパソコンで解析した結果の200桁目まで張っておきます。
おのがあく
はい確かに。
とても素晴らしいので、公開しましょう。 200個並べていただきましたが、僕のやり方と照らし合わせて考えてみたところ、同じ原理が使われていました。 とても重要なところですので以下を白地に。(早く手掛かりをつかみたい場合はどうぞ。) @少なくともそうだとわかったのは「単語」のところで、ですが。 Aそしてさらなるヒントは"123"に注目することです。 ヒミツ
知ってる話で、答えは直ぐわかったのですが、それを示すのが大変でした
置換:<br>⇒\n (改行) お願いします 囁き訂正: @の部分 誤) n≡0 正) n≡1 Bの部分 不要)Aより
おのがあく
考えてみますので、少々お待ちを。
素晴らしいです。証明付きとは! 恥ずかしながら僕は証明なしの、「分かる」段階までの答えしか用意していませんでしたし、このような証明ができるとも思っていませんでしたので、驚きです。 <<手順A>> 右端に「1」を並べて、ルール(連続したパターンが表れない。)が成立しているかチェックする。チェックの仕方としては総当たり的というか、一見すればかなり人為的です。具体的にどうするかというと、
1 2 1 3 1 2 3 1 3「1」 という並びが出来たときに、 1 2 1 3 1 2 3 1 [3] [1] 1 2 1 3 1 2 [3 1] [3 1] 1 2 1 3 [1 2 3] [1 3 1] 1 2 [1 3 1 2] [3 1 3 1] [1 2 1 3 1] [2 3 1 3 1] …とこのように、[]内の配列が一致しているか否かを調べていきます。上のケースでは10桁ですから5回分調べる必要があります。勿論桁数が長くなればなる程チェック回数も多くなり、1000桁あれば500回この操作を繰り返します。 <<手順FALSE-1>> 上記の場合であれば2段目が[3 1][3 1]で一致していますから、ルールに当て嵌まりません。このときには右端の「1」を「2」に変え同様の操作を繰り返します。つまり 1 2 1 3 1 2 3 1 3「1」としていた配列を 1 2 1 3 1 2 3 1 3「2」に変え手順Aのようなルールチェックを行う訳です。 <<手順TRUE>> ところで手順F-1で出来た配列 1 2 1 3 1 2 3 1 3 2 はルールを満たします。この場合には手順Aに戻ります。要するにさらに右に「1」を続けて 1 2 1 3 1 2 3 1 3 2「1」という配列を作り、ルールチェックを行います。 <<手順FALSE-2>> 手順F-1に於いて、「1」が駄目なら「2」に変える操作をすると書きました、では「2」が駄目なら当然今度は「3」に変えてチェックを行います。問題は「1・2・3」で全て試して駄目な場合にどのようにアルゴリズムを組むか?です。 具体的には 1 2 1 3 1 2 1 という配列が出来た場合、の次です。 1 2 1 3 1 2 1「1」 1 2 1 3 1 2 1「2」 1 2 1 3 1 2 1「3」 これらは全部ルールに違反します。こうなったときには、右端の数字を一旦取ってしまって、1つ前に戻りその数字に+1を加えます。すなわち 1 2 1 3 1 2 1「3」だった配列を 1 2 1 3 1 2「2」に変えルールチェックに戻るようなアルゴリズムを組みます。 <<手順FALSE-3>> さらにもう1つ問題があって、「1・2・3」を全て試して駄目であり尚且つ1つ前の数字が「3」となっているケースがあります。つまり ……2 1 2 3 などと並んでいて、この次に「1・2・3」のどれもが当て嵌まらないような状況です。このときには1つ前の数字も取ってしまって、2つ前に戻り+1を加えてルールチェックを行います。要するに ……2 1 2 3「3」 だった配列は ……2 1「3」と変更される訳です。 <<手順END-1>> このようなプログラミングを組み、もしこのような数列が有限桁しか並べることが出来ないならば、どんどんと数列は前に繰り上がっていき、一番最初から 1 2 …… と並んでいた数列は、1「3」…… と変換されるはず!なのです!(←ちょっと解りにくいかもしれませんが)。こうなった段階でプログラムを終了させ、最大どこまで桁数が並んだかを記録します。 <<手順END-2>> 数列が有限であるとすれば手順E-1で良いのですが、無限に並ぶとすればプログラムは終わらず無限ループしてしまいますよね?なので予め、これだけ桁数が続いた段階でプログラムをストップします、というような設定を敷いておきます。最終的にはこの設定を5000桁まで伸ばして計算させました。 うーん、難しいです。無限に続くようには思うんですけどね。
あと、あまり本解の解決にはならないかもしれませんが、No.6の数列がどのような過程で算出されたものなのか?も囁いておきます。長々しく効率も良い気がしないのですが、要は「左側から出来る限り小さい数字を配置して出来た数列(←解りにくいですね )」だと解釈して貰えれば良いかと。
おのがあく
ありがとうございます。
参考にしてみます。
おのがあく
Cのmが偶数のときで分からないところがあったので、助かりました。
別のやり方も囁いていただきましたが、僕の解答はそちらに近いです。そのやり方でもゲーデルさんの解答の方がスマートです。 ヒミツ
やっぱりNo.10 見直したら、ちょっとした書き間違いが結構ありました。
No.10のコメントに書くと、<br>がつくみたいなので、新たにコメントします。
おのがあく
ご丁寧にありがとうございます。
正解発表です。あまりスマートではないので、恥ずかしながらですが…。 まず123で始まり、かつ後ろに123が来ても問題のないパターンを並べていく方法を思いつきました。 @12312132 A1231213 B12313213 C1231323 D123132 E123213 F1232 以上の7つのパターンを思いつきました。@からFはどれも123で始まり、その後ろに123が来ても問題のない塊ですので並べやすそうです。これらを並べていくことで、長い列が作れると考えました。 しかしそれぞれに相性があり、たとえばAの後ろに@が来ると問題があります。 @はDF、Aは@E、Bは@AE、Cは@ABD、DはBCF、Eは@A、FはE が後ろに来てはいけないし、さらにD→@→Aや{A,E}→B→{C,D}という並びが駄目であることがわかります。 考えていなかった駄目な相性に気が付きましたので、追加(10月2日16:00) E→B→{C,D}、F→@→A、F→D→{@,A} 以上の問題になる並べ方を避けて並べていけば、かなり長いものが作れると考えました。 さらに、この7つのうち3つを選んで、たとえば@BDを選んだとして、1を@に、2をBに、3をDに、置き換え、数字に直し、さらに置き換えることで無限に長くできるのではとも考えました。 こんな感じです。 123 @BD 1231213212313213123132 @BD@B@DB・・・ ・・・・・ しかしどの3つを選んでも、相性に問題がありました。その3つは、この問題でいう問題のない並べ方で並べたあらゆる時に、その中の1,2,3が問題ない並び方をするものでなければならないのです。 そこで考えたのが、@Aのようにセットを作る方法でした。 このセットの考え方でもって、条件に合う3つを探すと、ありました。 BF,CE,DAです。 A=BF=123132131232 B=CE=1231323123213 C=DA=1231321231213 A,B,Cは、 この問題でいう問題のない並べ方で並べたあらゆる時に、その中の1,2,3が問題ない並び方をします。 ですので、思いついたやり方のように、 1をA、2をB、3をCに置き換え、A,B,Cをそれぞれ数字に直す、ということをを繰り返すことで無限に長くすることができるのです。 123 ABC(1をA、2をB、3をCに置き換えた) 12313213123212313231232131231321231213(A,B,Cをそれぞれ数字に直した) ABCACBACABCBABC・・・(1をA、2をB、3をCに置き換えた) ・・・・・ まだNo.12をちゃんと読めてないですが、ゲーテルさんの回答とかも見てみたいです
ついでにNo.9も開けといてくれれば幸いです(別に見られたい訳じゃないんですが、出力結果だけを見せられるのは普通気持ち悪いものだと思うので。)プログラムコードは求められれば貼ります。 ちなみに自分のやった方法だと桁数の3乗に計算量が比例する感じなので、1000桁の文字列を作るのに5秒ぐらいでしたが5000桁だと1分近くかかっていました。 ↓いえ…飽きていたというより諦めていて解答を待っていたところでした No.12は多分正しいようには思うんですが、微妙に不十分というか怪しい気もしますよね…。「A、B、Cをルールに則って並べると、その中の1、2、3もルールを満たす。」のところに、も少し説明が欲しい感じがします。
おのがあく
No.9開けておきます。
もう誰も見ちゃいないだろうと思いながら、(だんだんと冷めつつあったこの問題への思いをわき起こしながら、)解答を書いたのですが、まだこの問題に興味を持っていてくださったようで、ありがたく思っています。 解答の意味、通じるでしょうか。自分でそうなるということが分かっただけで、解答としては不十分なのですが、大体どのような感じかつかんでもらえれば幸いです。 証明は、ゲーデルさん頼みということで。 >>13
No.8は brタグが入ってしまったので、見にくくなっているため、ここに書き直してみます。 subタグが見にくくなるので、No.8 の囁きの s と t を入れ替えてみました。 ============================ [解答] 無限に長くできる。 [証明] t0= 0, t2n = tn, t2n+1 = 1 - t2n によって定義される、{0,1} 上の無限列 T = t0t1t2... を考える。 T = 01101001100101101001011001101001... @【 tn = tn+1 ⇒ n ≡ 1 (mod 2) 】(定義より、明らか。) A【 T には 000 も 111 も現れない。】(@より、明らか。) B【 T の長さ5 の任意の連続部分列に必ず 00 か 11 が現れる。】 もし 00 か 11 が存在しないとすると、01010 か 10101 となるが、 定義より、t4nt4n+1t4n+2t4n+3 ∈ {0110,1001} なので、不可能。 C【 tn = tn+m = tn+2m ∧ tn+j = tn+m+j (0<j<m) を満たす n, m (n≧0, m>0) は存在しない。】 仮に存在したとして m が最小のものについて考える。 まず、Aより、m は 1 ではない。 また、m は 1 より大きな奇数でもない。なぜならこの時、 tn...tn+2m は長さ 7 以上になるが、Bにより 00 または 11 が現れることになる。 tn...tn+m = tn+m...tn+2m なので、その 00 か 11 は2度現れ、 その距離は丁度 m であるが、m は奇数なので、どちらかは@に反する。 更に、m は 偶数でもない。なぜなら、n が偶数の時、T の定義 より、 n→n/2, m→m/2 としたものも明らかにCの条件を満たす。 また、n が奇数の時も、T の定義 より、n が偶数の時と全く同様にして、 n→(n-1)/2, m→m/2 としたものが明らかにCの条件を満たす。 これは m が最小である仮定に反する。 以上により、m は 1以上の整数になり得ず、矛盾する。 [定理]【 繰り返しのパターンが現れない{0,1,2}上の無限列 S が存在する 】 S を、T の 0 から次の 0 までの 1 の個数を順に記した数列とする。 S = 210201210120210... Aにより、S は {0,1,2}上の無限列である。 仮に、S に繰り返しのパターン XX (X=x0...xn) が現れたとすれば、S の定義より 01x001x1...01xn01x001x1...01xn0 が T の中に現れることになるが、これはCに反する。 ============================ 数列 T は、Thue-Morse 数列と呼ばれています。 良く知られている、他の繰り返しパターンを含まない簡単な例は、 初期状態 0, 置換規則 0→012, 1→02, 2→1 を適用していく数列 01202101210201... で、この数列に、 置換規則:0→011, 1→01, 2→0 を適用したものが、T になることも知られています。 正解発表の補足をします。
(書きかけ、少々お待ちを。) まず、@からFのダメな相性について。 123〇・・〇の〇・・〇の部分を(a)、(b)などと表します。 〇・・〇(123を除いた部分の先頭から連続する部分)を(a)の前部、 〇・・〇(後尾から連続する部分)を(a)の後部などと呼ぶことにします。 (0)当然ながら、@@や@A@Aなどの問題ある並べ方はダメな相性です。以下はこの場合を除いて・・・ (1)123〇・・〇という形が部分的であれ2個関係する場合 (1.1)(a)=(b)の前部のとき、 123(a) 123(b )で同じパターンが連続します。 A→@、D→{B,C}、F→E (1.2)(a)の後部+1=23+(b)の前部、または(a)の後部+12=3+(b)の前部のとき、 123( a)1 23(b )または123( a)12 3(b )で同じパターンが連続します。 C→{@,A,B,D}、B→{@,A}、E→{@,A} (2)123〇・・〇という形が部分的であれ3個関係する場合 (2.1)(a)=(b)の後部のとき、 123( b)123 (a)123 …で同じパターンが連続します。 @→{D,F}、A→E、B→E、D→F (2.2)(a)を二分した時に(a)の前半=(c)の前部、(a)の後半=(b)の後部のとき、 123( b)123(a a)123(c )で同じパターンが連続します。 D→@→A、{A,E}→B→{C,D} (2.3)(a)を二分した時に(a)の前半=(c)の前部、(a)の後半=3+(b)のとき、 12 3(b)123(a a)123(c )で同じパターンが連続します。 (23+(b)も考えられるが、@からFの〇・・〇に23を含むものがないので良しとする。) E→B→{C,D}、F→@→A、F→D→A (3)123〇・・〇という形が部分的であれ4個関係する場合 (3.1)(a)を二分した時に(a)の前半=(c)+1、(a)の後半=(b)の後部のとき、 123( b)123(a a)123(c)1 23…で同じパターンが連続するが、どれも(2)で解決済み。 (3.2)以下のような場合で同じパターンが連続することはない。 1 23(b)123(a a)123(c)1 23… ((a)に123が含まれる) 1 23(b)123(a a)123(c)12 3… ((a)に1223が含まれる) 12 3(b)123(a a)123(c)1 23… ((a)=(c)13(b)はない) 12 3(b)123(a a)123(c)12 3… ((a)に123が含まれる) (3.3)以下のような場合で同じパターンが連続することはない。 123( a)123(b)1 23(c)123(d ) ((a)の後部=23(c)はない) 123( a)123(b)12 3(c)123(d ) ((d)の前部=(b)12はない) (3.4)(a)=(c)、(b)1=(d)の前部のとき 1 23(a)123(b)1 23(c)123(d )で同じパターンが連続するが、 BF、CE、DAとペアにしているので、(0)で解決済み。 (4)123〇・・〇という形が部分的であれ5個以上の奇数が関係する場合 123(a1)123(a2)…123(an+1/2-1)123(an+1/2)123(an+1/2+1)…123(an-1)123(an)とすると、 123(a2)…123(an+1/2-1)=123(an+1/2+1)…123(an-1)となるが、BF、CE、DAとペアにしているので (123(a2)がBやCやDなら123(an+1/2+1)はFやEやAになるので)、(0)で解決済み。 (イメージとしては3個関係する場合の間に入れ込む感じです) (5)123〇・・〇という形が部分的であれ6個以上の偶数が関係する場合 123(a1)123(a2)…123(an/2-1)123(an/2)123(an/2+1)…123(an-1)123(an)とすると、 123(a1)…123(an/2-1)=123(an/2+1)…123(an-1)((3.4)のに入れ込んだようなとき)または、 123(a2)…123(an/2-1)=123(an/2+1)…123(an-2)((3.1)のに入れ込んだようなとき)となるが BF、CE、DAとペアにしているので、それぞれ123(an/2)=123(an)、123(a1)=123(an/2)または123(an/2)=123(an)となり、(0)で解決済み。 |