注:これは、他の回答の続きと改訂です。
削減の問題
決定の問題を思い出してください。
与えられた(n+1)×(n+2)グリッドをnユニークなタイルで覆う完璧なタイルはありますか?
そのため、(n+1)×(n+2)グリッドでは、n変数のみを使用できます。
しかし:
- 削減には、O(n )よりもはるかに多くの一意の変数が必要です。O(n)
- さらに、当社のワイヤはオープンエンドであり、次のことにつながります。
- 空き領域をタイル化できることをどのようにして知るのですか?
最初の問題を解決するために、ゲームボードを人為的にはるかに大きくしています。基本的に、nを実際に必要な変数の数に等しくしてから、サイズのグリッドを作成します左下隅に配置します。これにより、二次爆発が発生します。(n+1)×(n+2)
2番目の問題については、ガジェットを少し再考する必要があります。
ルールに従ってボードの残りの部分を正常にタイリングできることを証明するのは、少々気難しいかもしれません。そこで、実際にサイズのゲームボードを生成するのに使用するのと同じ戦略から始めます。(n+1)×(n+2)
最初に、すべての可能なタイルのセットを生成します。これらのタイルはすべてボードに配置する必要があります。次に、タイルを削除し、正方形を残します。
ただし、ガジェットは特定のタイルセットが配置されることを保証しません。配置されるタイルは状態によって異なります。我々は慎重にするガジェットを変更する必要がありますので、保証、特定のタイルを、状態が選択されているに関係なく削除されます。
それでは、ガジェットを見ていきましょう。
ワイヤーと節ゲートは2つの理由で問題があります。
- ワイヤまたは節ゲートを囲む正方形が正しくタイル表示できることはわかりません。結局、一部のワイヤは左に、他のワイヤは右に押すことができ、残りの空白の正方形を並べることは簡単ではなくなります。この問題を「フロー」問題と呼びます。
- どのタイルがタイルセットから削除されるかを知る方法はありません。ある状態では、ワイヤーまたは節ゲート内の1組の正方形がタイル状になり、別の状態では、まったく異なる正方形のセットがタイル状になります。
これらの問題を解決するには:
- 最初に、可能なすべてのタイルのセットを生成します。これらのタイルはすべてボードに配置する必要があります。ボードに配置したら、セットからタイルを削除します。最初は知らないかもしれないけどんが、定式化をまだ完全に説明していないので、必要に応じて nをインクリメントしながら新しいタイルの可能性をすべて追加できます。このセットから削除するすべてのタイルは、配置可能であることが保証されている必要があります(少なくとも、式が満たされる場合は、配置可能であることが保証されている必要があります)。ゲームボードに配置する義務を果たすために、タイルセットからタイルを削除して、タイルセットからタイルを「放電」します。nn
- どの状態が選択されても、特定のタイルが削除されることを保証するために、ガジェットを慎重に設計する必要があります。
- ガジェットを閉じて、状態に応じてボード全体にタイルを押し込まないようにする必要があります。むしろ、すべての州は特定の明確に定義された領域のみを占有しなければなりません。
- あるいは、すべての州が明確に定義された領域を占有できることを保証する必要があります。これにより、満足のいくタイリングが保証されますが、特定のタイリングが発生することは保証されません。これは、Dominosaゲームの作成方法と同じです。
- 最初に、タイルがセットに生成されます。
- 次に、タイルはランダムな構成で配置され、
- 各タイルが配置されると、タイルセットから削除されます。
- その後、タイルがボードから削除され、正方形が残ります。
- これは、意図した構成が選択されることを保証するものではありません。
- むしろ、意図した構成を選択できることを保証するため、ソリューションが存在します。ここでも同じことができます。
- 独自の⋆を配置する代わりに、製剤のすべてのガジェットを配置した後⋆、デフォルトで正方形、つまりすべての「空白」に、空白が1次元の長方形の領域であることを確認するか、空白を1次元の長方形に分割します、タイルセット内の残りのタイルで空白を並べるだけです。
- セットからすべてのタイルを配置すると、すべてが配置可能であることがわかります。
- 壁のタイルなど、明らかに配置可能なタイルもあれば、ガジェット間の関係の性質上、式が満たされる場合にのみ配置可能なタイルもあります。
- 次に、タイルを削除し、正方形を残します。
それでは、ガジェットを見ていきましょう。
強制的なガジェット
それぞれが自分自身とペアリングできないようにすることで、任意の数のビルディングブロックを作成できます。
たとえば、私たちが強制的にしたいとしましょうので、我々が使用できることを、タイルを1 ⋆をビルディングブロックとして。(音符、1 ⋆我々は自身にペアとして強制する任意の変数であり、必ずしもビルディングブロック我々は、使用される1(1 ⋆、1 ⋆)1 ⋆1 ⋆1以前の値)
私たちのことを保証するために、 -buildingブロック埋蔵(1 ⋆、11 ⋆、我々は次のような構成で底壁に対してそれを配置します:我々は、予約番号を配置します、私たちはそれを呼びましょう 1 ⋆ ANのような壁にアップタック(⊥のような形); 壁に3つ、中央の2列目に1つ。その後、我々は、他の2つの数値を置く私たちはそれらを呼び出すようになる 2 ⋆と 3 ⋆。これらはこのガジェットに固有のものです。私たちは、左右の上にこれらを置く 1 ⋆(1 ⋆、1 ⋆)1 ⋆⊥32 ⋆3 ⋆1 ⋆。
以下に示すように、共有の黒い境界線はゲームボードの下部にあり、左から右への説明です。
- ガジェットの構成。各と3 ⋆ここでは、このガジェットに固有のものです。2 ⋆3 ⋆
- 中心タイリングの3つの可能な状態の。1 ⋆
これを実行した後、私たちは私たちのガジェットがあることを保証することができますすることができます私たちのガジェットがいることを保証しながら、タイルの特定のセットでタイル状にする必要があります強制のペアを。(1 ⋆、1 ⋆)
- 私たちは、それは知っているが低いために、中央のすべての3つの可能なタイル張りの状態、行われなければならない1 ⋆として、タイル(1 ⋆、1 ⋆)(1 ⋆、1 ⋆)1 ⋆(1 ⋆、1 ⋆)の上に、右図に示すように、。
- 残りのタイルができるようにタイル張りされる及び(1 ⋆、3 ⋆)ガジェットを覆います。したがって、これらのタイルをグローバルタイルセットから削除できます。以下に説明します。(1 ⋆、2 ⋆)(1 ⋆、3 ⋆)
説明、左から右:
- 左、上:左の状態、左、下:残りの正方形の有効なタイル。
- 中央、上:中央の状態、中央、下:残りの正方形の有効なタイル。
- 右、上:右の状態、右、下:残りの正方形の有効なタイル。
注、残りの正方形のタイル張りがされていないことを強制、彼らは近くの隣人の代わりとタイルすることができますので、それはすべての状態でゲームボードの有効なタイル張りであるため、しかし、我々はからそれらを削除することができますタイルセット、およびそれらがまさにその方法でタイル張りされると仮定します。有効な可能性のあるタイリングがあることがわかっているため、式が満足できる場合、ゲームボードの少なくとも1つの可能性のあるタイリングがあります。これらは、このようにタイル張りされるという保証はありませんが、という保証はあり(1 ⋆、1 ⋆)タイルが強制されますが。1 ⋆(1 ⋆、1 ⋆)
注:これに満足していない場合、または「タイル化が可能」と「タイル化を強制」の違いに困惑している場合は、ガジェットの周りに壁を配置するだけで済みます。作る3 × 2節-ガジェットについては、以下の壁を。3 × 23 × 2
このガジェットは閉じている必要はありません(閉じていてもかまいません)。実行可能な構成があり、タイルセットから削除できるため、その必要はありません。別の構成を行うことは可能かもしれませんが、これは問題の充足可能性には影響しません。
以下のタイルは(したがってタイルセットから削除することができます)タイル張りされることが保証されています (1 ⋆、1 ⋆)
次のタイルはタイル化できることが保証されています(したがって、タイルセットから削除できます)。 (1 ⋆、2 ⋆)、(1 ⋆、3 ⋆)
このガジェットを壁で閉じることを選択した場合、(1 ⋆、2 ⋆)、(1 ⋆、3 ⋆)もカバーされることが保証されます。
新しいワイヤーおよび節ゲート
フローの問題とタイルセットを空にするため、ワイヤを少し再設計する必要があります。
フローの問題を解決する1つの方法は、単純な左右の状態ではなく、ワイヤを回路にすることです。つまり、線ではなく円形になるため、円の上部を右に押すと、下部が左に押されます。これにより、フローの問題が解決されます。
このルートに従って、ワイヤと節ゲートを変更して、両方の問題を解決できます。
予約するとFをTF
2つの新しい普遍的な価値を紹介しましょう。 と Fを。これら2つの値は普遍的です。グリッド内の実際の値(平方値 2および 3など)(慣例により、 1TF231を壁のビルディングブロックとしてているため)など)、または任意の値。それらはそれぞれ真と偽を表します。
タイルを強制的に予約、(T、F)、(F、F)します。下の図、左から右への説明:(T、T)(F,F)
- 我々は、任意の強制と同じスキームを使用する、タイルを使用してTのよう(1⋆,1⋆)T。各 2 ⋆と 3 ⋆1⋆2⋆3⋆ここでは、このガジェットに固有のものです。
- 私たちは、任意の強制と同じスキームを使用する使用して、タイルをFを通り1 ⋆各2 ⋆と3 ⋆ここでは、このガジェットに固有のものです。(1 ⋆、1 ⋆)F1 ⋆2 ⋆3 ⋆
- 私たちは、強制と同じスキームを使用する使用して、タイルをFを通り1 ⋆(1 ⋆、1 ⋆)F1 ⋆中心に、及び使用アップタックの他の場所に。これは(F、T)を強制的にタイル化します。2 ⋆と3 ⋆でタイルすることができますT(F、T)2 ⋆3 ⋆我々はタイルセットからそれらを削除して、。各 2 ⋆と 3 ⋆ここでは、このガジェットに固有のものです。T2 ⋆3 ⋆
ワイヤー
各ワイヤは、開始値と終了します、私たちはそれを呼び出してみましょう⋆A ⋆線にユニークです。各句ワイヤ参加中のために、ワイヤは、2ワイヤ値を有する、及びX ' ⋆、各ワイヤに固有である、と同じ句に参加します。以下の図と、左から右への説明。X ⋆バツ′⋆
- 1つの節に参加するワイヤ。ワイヤの高さはで、長さは2 ∗ p + 3です。ここで、pはワイヤが関与する節の数です。ワイヤには、左側に2つのA⋆正方形、右側に2つの正方形が埋め込まれます。もちろん、すべての側面が青い輪郭で示された壁に囲まれています。なお、1 ⋆この線にユニークで、かつワイヤのみに使用され、句はそれがに参加しています。22 ∗ p + 3pA ⋆1 ⋆
以下に、2つの状態、左から右への説明を示します。
- 真の状態で、1つの節に参加するワイヤ。ワイヤはときに、真であると考えられる正方形をして対になっているTの正方形、およびX ' ⋆正方形をして対になっているFの正方形。タイルが逆になっている他の状態では偽と見なされます。タイリングを一度に強制されるか注意A ⋆タイルが選択されている:(T、F)X ⋆Tバツ′⋆FA ⋆(T、F)すでにので、タイルの残りの部分は水平でなければならない、それ以前に強制されています。
- 偽状態の同じワイヤ。
複数の節に参加したときに、そこより多くの価値ある 、及びX ' ⋆、各句の一対。彼らは、頂部及び底部に代替されると、としてないで、ワイヤ参加TとFそれぞれ分離正方形Xを⋆、X 「 ⋆ペア。X ⋆バツ′⋆TFX ⋆、 X′⋆
2つの対応する状態。
このガジェットは閉じられているため、「フローの問題」はありません。
注いずれかの状態では、我々は次のタイルを収集する方法、無の状態を問題では: 、(A ⋆、T)、 (A ⋆、F)(A ⋆、A ⋆)(A ⋆、T)(A ⋆、F)。
ただし、いくつかのタイルがありますが、それらは不明です。一方の状態では、除去することができるタイルセットから、別の状態では、削除することができながら、( 1 ⋆、 F)、( 1 ' ⋆、 T)、( 2(1 ⋆、T)、(1′⋆、 F)、(2 ⋆、T)、(2′⋆、 F)。。。タイルセットから、どのタイルを実際に削除できますか?答えは次のとおりです。句ゲートにも同じ問題がありますが、タイルの反対のセットがあります。次のセクションで説明するように、残りの反対の未収集のタイルを常に収集します。これらはそれぞれ節ゲートとペアになっているため、両方を削除できます。(1⋆,F),(1′⋆,T),(2⋆,F),(2′⋆,T)...
句
次に、新しい節ゲートの最初の反復を作成します。壁で囲まれたガジェットで構成されています。ガジェット内に、Fを1つ配置します2 × 3Fを中央上部に配置し、2つの正方形を下隅に配置します。1つは左下に、もう1つは右下にあります。残りの正方形は、3つの異なるワイヤのワイヤ変数を表す値になります。私たちはこれらの呼びましょうA ⋆、B ⋆、およびC ⋆。のT⋆、 B ⋆、C ⋆ワイヤの変数の一つと対に強制され、残りのワイヤの変数はと対であろう Tの値。下の図、左から右の説明。FT
- 左:新しい句ゲートの最初の反復の構成。
- 右タイリングの3つの可能な状態。F
これらの3つの状態は、3つのタイリングにつながります。以下の図、左から右への説明。
- 左、上:タイル左、左、下:残りの正方形のタイル。F
- 中央、上:右にタイル、中央、下:残りの正方形をタイルします。F
- 右、上:タイルダウン、右、下:残りの正方形のタイル。F
F以来Fは節内のワイヤー変数の1つとペアになる、そのワイヤー変数はワイヤー内のとペアにできなくなります。したがって、ワイヤをtrueに強制します。逆に、Tでタイリングする残りのワイヤー変数は、ワイヤー内でFでタイリングされます。これは、1 - in - 3 - S A T句とまったく同じ制約です。F TF1 -in- 3 - S A T
メモ、⋆、B ⋆、及びC ⋆ワイヤ変数であるが、これらはそれぞれ参照することができ、X ⋆またはX ' ⋆ワイヤ変数。を使用して⋆、 B ⋆、C ⋆X ⋆バツ′⋆ことは、本質的にワイヤ変数を無効にすることです。バツ′⋆
さらに、どのタイルをタイルセットから削除できるかを知る義務を果たすには、この条項を「二重かつ反正」にする必要があります。私はこれで何を意味するか、別のようにすることですで、ガジェットを3つの追加の否定表す変数⋆を、B ⋆、およびC ⋆。私たちはこれら呼ぶことにしましょうA " ⋆、B " ⋆、およびC " ⋆。これらがなければならないの否定可変ワイヤ値であり3 × 23⋆、 B ⋆、C ⋆a′⋆、 b′⋆、c′⋆および C ⋆。この 3 × 2ガジェットは異なり中心に Tがあり2つの F(T、X ' ⋆)、(F、X ⋆)、(F、X⋆、 B ⋆、C ⋆3 × 2TFコーナーの値。これまで説明した句ガジェットの正反対。このように句を「二重化」することにより、上記のガジェットと同じ制約を再度追加します。しかし、我々はまた、すべての組み合わせ放電 タイルセットから、各変数に対する(したがってため ⋆、B ⋆、及び C ⋆同様に、それらはすべて後であるため、ワイヤの変数)。以下に、説明を左から右に示します。(T、X ⋆)、(T、x′⋆)、( F、X ⋆)、(F、x′⋆)⋆、 B ⋆、C ⋆
- 「二重の反正」条項。下部のセクションは上記の条項です。上部のセクションは、新たに記述された反対の条項です。新しい句には、まったく同じ論理的制約があります。それは下の条項の反対です。一緒に、これらの組み合わせガジェットワイヤ放電の組合せの全てタイルセットから、用条項に参加する各ワイヤー変数。(T、X ⋆)、(F、X ⋆)、(T、x′⋆)、( F、x′⋆)
- 左端の図の中央にある青い線は、見やすくするためのものです。実際には、これ以上状態を許可せずに削除できます。
そこで、例を挙げて、すべてのタイルが約束どおりに放電されることを示しましょう。以下に、左から右への説明を示します。
- 単一の条項に参加しているワイヤーの図。句の状態が選択されます。ここで、我々が使用している、つつ⋆及びB ⋆この句に他のワイヤの値を表しています。1 ⋆ = B ⋆A ⋆B ⋆
- 句で指定された状態のために、値が隣接して対にすることを余儀なくされているT。1 ⋆T
- これにより、ワイヤは強制的に真値になります(ワイヤの正の変数はとペアになり、負の変数はFとペアになります)。TF
- これにより、反正の句(句の上部セクション)のが、句内でTとペアになります。ワイヤを見ると、ワイヤ内のすべてのタイルが放電されることが保証されています。ワイヤ自体または対応する節ガジェットで放電されています。この状態で、我々は、タイル、有する(A ⋆、A ⋆)、(A ⋆、T)、(A ⋆、F)、(1 ⋆、T)1′⋆T(A ⋆、A ⋆)(A ⋆、T)(A ⋆、F)(1 ⋆、T)、。、(1 ' ⋆、F)、および(1 ' ⋆、T)(1 ⋆、F)(1′⋆、 F)(1′⋆,T)
他の状態を試すと、下の図の説明が左から右に表示されます。
- 句は、タイリング、他の状態である 2つの方法のいずれかで。(1⋆,T
- したがって、ワイヤ上強制され、(1⋆,F
- ワイヤの残りの部分を対応するタイルに導き、ワイヤをfalseとして評価します。
- 最後に、句・ガジェットのcontrapositive /上部に、マストタイルため(1 ' ⋆、Tは)ワイヤに取り込まれます。この状態では、我々は、タイルを持っている(A ⋆、A(1′⋆,F)(1′⋆,T)、(A ⋆、T)、(A ⋆、F)、(1 ⋆、T)、(1 ⋆、Fを(A⋆,A⋆)(A⋆,T)(A⋆,F)(1⋆,T)、(1 ' ⋆、F)、および(1 ' ⋆、T)。これらは、他の状態と同じように放出されたタイルです。(1⋆,F)(1′⋆,F)(1′⋆,T)
したがって、どちらの状態でも、同じタイルを放電します。したがって、ワイヤと句は、満足のいく割り当てがある場合に、特定のタイルを正常に放電します。
このガジェットは閉じられているため、フローの問題は発生しません。
節ガジェットとワイヤガジェットは、常に同じタイルペア値を放電することが保証されているため、どの方法でタイル化するかわからなくても放電できます。
これで、すべてのガジェットが基準を満たしました。
処方
最終的な定式化では、それぞれが水平の壁で区切られた3行のガジェットを作成します。
- 下部には、2枚のタイルである強制ガジェットを配置します。ビルディングブロック、およびとFの組み合わせ用の強制ガジェットが必要です。強制ガジェットを互いに直接隣接して配置します。TF
- 中央の行に、2つの高さのワイヤーガジェットを水平に配置します。ワイヤーガジェットは、垂直の壁で互いに分離する必要があります。
- 一番上の行には、4タイルの高さの節ガジェットを配置します。節ガジェットは、垂直の壁で互いに分離する必要があります。
各図の上に説明が続きます。フル解像度の画像をクリックします。画像を再現/生成するためのソースコードは、ページの下部にリストされています。
式を用いて、一例として、我々は溶液を満足する(¬ X 1は、xは2、XΦ (x)=(x1、¬x2、x3)∧ (x2、¬x3、x4)∧ (x1、x2、¬x4)(¬ X1、x2、x3、¬ X4) 証人として。
まず、ガジェットの行を分離する水平の壁から始めます。正方形と、壁の中にタイルを張るペアを示します。
次に、ガジェットを表示します。青いアウトラインは、ガジェットの境界を表します。フォーシングガジェットは壁で囲まれていないため、破線で青く表示されます。句ガジェットの中央の線は壁で囲まれていないことに注意してください。見やすくするためにあります。上記で説明したように、この行を削除しても、句内でこれ以上状態が発生することはありませんが、このデモでは青い線を示しています。注:必要に応じて、数字にセマンティックな読みやすさを与えるために正方形名を使用します。各名前は数値を表します。
ここで、垂直の壁を埋めます。
ここで、証人のソリューションを記入します。つまり、SATソリューションを使用して生成する場合、これはタイルソリューションです。
次に、フィラーエリアをタイルします。残りのボード、必要な大きさ、nこれまでのタイル化にはが必要です。したがって、タイルセットの残りのペアを放電します。ここの破線は、有効だが強制されていないタイリングを表しています。これらを並べる別の方法があるかもしれません。ここでは、左下隅を示しています。
ここで、残りの四角に簡単な有効なタイルを入力します。
ここでは、グリッドの右下隅を示しています。
ここでは、グリッドの右上隅を示しています。垂直タイルが収まらないことに注意してください。必要に応じて、上の行を水平に並べます。
そして最後に、左上隅。
TeXを介してゲームボード全体を一度に生成すると、pdflatexのメモリ不足エラーで失敗するため、見たい場合は、クリップを生成してパッチを適用する必要があります。ノートブックビューアを必ずチェックしてください。
TikZソース
ゲームジェネレーター: