タグ付けされた質問 「sudoku」

この課題は、数独パズルの解決、作成、またはその他の方法での作業に直接関連しています。

2
数独のYウィング戦略
私は最近、本当に難しい数独を生成する新しい数独アプリを手に入れました。これは標準的な戦略では解決できません。それで、私はいくつかの新しいものを学ばなければなりませんでした。これらの戦略の1つはY-Wing戦略です。「厳しい戦略」の下にランク付けされていますが、実際はそれほど難しくありません。 例 この戦略では、4つのセルのみが重要です。したがって、画像内の他のセルはすべて無視しました。 各セルのすべての候補を調べます。次の例では、候補のあるセル3 7(つまり、同じ行に、同じ3x3ボックスに1 2 4 5 6 8 9あるなどの理由で候補をすでに拒否していることを意味します)、候補のあるセル、候補のあるセルと候補のあるセル。Y-Wing戦略は、正解セルの候補からを削除し、候補としてのみ残して、それを埋めることができることを示唆します。したがって、正しい数を見つけ、完全な数独を解決するための一歩近づいています。126 73 62 662 なぜ6削除できるのですか? 説明 6が真のセルの正しい数であると仮定しましょう。今そこにある6ので、我々は削除することができ、この列に6のみ残し、右上のセルの候補から7、我々は埋めることができたし。同じことは、左下のセルで発生します。を削除して6に記入でき3ます。ここで、左上のセルを見ると矛盾が生じています。これ7は、同じ行と列に既にaが存在するため、候補のと3を削除し7て、3候補をまったく残さないようにするためです。これは明らかに不可能です。したがって、6は正しいセルの正しい数にはなりません。 より正確には:候補を持つセルが4つあり[A B] [A C] [C D] [B C](この順序または循環回転)、セルが(同じ行、同じ列、または同じ3x3ボックスを介して)円で接続されている(セル1がセル2に接続されている場合) 1セルに接続された4セルに接続されているセル3)に接続され、削除することができるよりも、Cより[C D]細胞。これは3個のセルという、非常に重要である[A B]、[A C]と[B C]2人のだけの候補者それぞれが含まれています。異なるセルには[C D]、多かれ少なかれ含まれている可能性があります(Dゼロ、1つ、またはさらに多くの候補が可能です)。 どちらの方法でも接続できると明示的に述べたことに注意してください。次の例では、戦略が再び適用されていることがわかります。しかし、今回は4つのセルが長方形を形成していません。左下と右下のセルは、同じ3x3ボックス内にあるため、単純に接続されています。Y-Wingによると、1左上のセルの候補として削除できます。今回は、このセルにまだ2つの候補が残っているため、実際には新しい正しい番号が見つかりませんでした。しかし、それにもかかわらず、1さまざまな戦略への扉を開くことができます。 戦略についての詳細が必要な場合、またはさらにいくつかの例が必要な場合は、sudokuwiki.orgにアクセスしてください。 チャレンジ仕様 セルの候補を表す4つのリストを入力として受け取ります。4つのセルは円のように接続されます(セル1はセル2に接続され、セル2はセル3に接続され、セル3はセル4に接続され、セル4はセル1に接続されます)。各リストは昇順でソートされていると想定できます。 あなたの仕事は、(Y-Wing戦略を適用して)1人の候補者を削除し、結果の候補者リストを同じ順序で返すことです。戦略を適用できない場合は、同じ候補者リストを返すだけです。 2つの解決策がある場合(セルBのAを削除するか、セルDのCを削除することができます)、1つのソリューションのみを返します。どちらでもかまいません。 入力は、任意のネイティブリストまたは配列形式にすることができます。リストのリストなどを使用することもできます。STDIN、コマンドライン引数、プロンプトまたは関数引数を介して入力を受け取り、戻り値を介して、または単にSTDOUTに出力することで出力を返すことができます。 これはコードゴルフです。最短のコード(バイト単位)が優先されます。 テストケース [3 7] [6 7] [2 6] [3 6] => [3 …
11 code-golf  sudoku 

1
数独パズルはいくつありますか?
これは数独ソルバーでも数独チェッカーでもありません。 あなたの課題は、(3次元である数独パズルの「ブロック」サイズの入力として与えられ、その関数またはスクリプトを書くことである古典的な9x9のボードのために、4を16×16ボード、等)数の近似値を計算しますそのサイズで存在する明確なパズル(ソリューション)の。 たとえば、入力3が与えられた場合、プログラムは、6,670,903,752,021,072,936,960という異なる精度の9x9数独パズルの既知の数、またはさまざまな対称性を考慮に入れると5,472,730,538 の望ましい精度の近似値を出力する必要があります。ソリューションでは、対称性をカウントするか無視するかを指定する必要があります。 「必要な精度」は未定義のままです。プログラムは一定時間実行され、その結果を出力したり、指定された有効桁数まで計算したり、永久に実行されたりして、ますます適切な近似を出力します。重要なのは、有限の時間で、必要な精度で結果を計算できるようにする必要があるということです。(したがって、「42」は許容される回答ではありません。)結果の精度を使用可能なマシンのフロートに制限することは許容されます。 オンラインリソースにアクセスしたり、ソースコードをファイル名に保存したりすることはできません。 PS:私はこれが難しい問題であることを知っています(私が間違っていなければNP完全です)。しかし、この質問は、おおよその統計的解決策を求めているだけです。たとえば、1つ(または2つ以上)の制約を満たすランダムな構成を試して、それらの数を計算し、3つの制約すべてを満たすパズルを取得する頻度を確認できます。これは小さいサイズではまともな時間で動作しますが(確かにsize = 3、場合によっては4の場合)、アルゴリズムは任意のサイズで動作するように十分に汎用的である必要があります。 最良のアルゴリズムが優先されます。 PS2:私は、コードゴルフからコードチャレンジに変更して、問題の難易度をより適切に反映し、馬鹿でよくゴルフされたものよりもスマートなソリューションを奨励しました。しかし、明らかに「最適なアルゴリズム」は不明確なので、適切に定義してみましょう。 十分な時間を与え、一定の要素(CPUとインタプリタの速度を含む)を無視するか、または同等に、それらの漸近的な動作を考慮すると、どのソリューションが正確な結果に最も速く収束するでしょうか?

3
キラー数独ソルバーを構築する
通常の数独は難しいと思っていましたが、今度はキラー数独を試してください! キラー数独のゲームでは、あなたはまったく番号を与えられていません。代わりに、特定の数になると言われる地域が与えられます。Wikipediaの次の例を考えてみます。 そしてその解決策: 作成するプログラムは、リージョンを表す81文字のシーケンスとそれに続く一連の数字で構成される形式になります。次に、シーケンスの各数値は、「A」、「B」などから始まる各文字領域の数値の合計を表します。 次に、解を表す81桁のシーケンスを出力します。 たとえば、上のパズルの例には次の入力があります。 AABBBCDEFGGHHCCDEFGGIICJKKFLMMINJKOFLPPQNJOORSPTQNUVVRSTTQWUUXXSYZWWaaXXSYZWbbbcc 3 15 22 4 16 15 25 17 9 8 20 6 14 17 17 13 20 12 27 6 20 6 10 14 8 16 15 13 17 結果の出力は次のようになります。 215647398368952174794381652586274931142593867973816425821739546659428713437165289 入力は有効であり、領域は常にA、B、...、Y、Z、a、b、...、zの順に表示されると想定できます。 (動作する最も短いコードが優先されます。)

4
各列が1つのTrueになる行を見つけます(以前はKnuthのアルゴリズムX)。
仕事 ブール行列を指定して、各列にTrueが1つだけある行の1つ(またはオプションで複数)のサブセットを見つけます。任意のアルゴリズムを使用できますが、前の例のように非常に大きな行列をサポートする必要があります。 可能なアルゴリズムの1つ(KnuthのアルゴリズムX) このアルゴリズムを使用する必要はありませんが、これが最善のオプションになる場合があります。 行列Aに列がない場合、現在の部分解は有効な解です。正常に終了します。 それ以外の場合は、列cを選択します。 A r、c = 1となるような行rを選択します。 行rを部分解に含めます。 各列のためのJようにAのR、J = 1、 行ごとにIようにA 、I、J = 1、 削除行I行列からA。行列Aから 列jを削除します。 削減された行列Aに対してこのアルゴリズムを再帰的に繰り返します。 *ステップ3は非決定的であり、後でステップ3を呼び出して行を見つけられなかった場合に、バックトラックする必要があります。 入力 最小の2×2行列Aの任意の表現、たとえば数値またはブール配列 1 0 0 1 0 0 1 1 0 0 1 0 0 0 0 0 0 1 1 0 1 0 0 1 0 1 …

5
数独パズルに配置できるすべてのマークを取得する[終了]
休業。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善してみませんか?詳細を追加し、この投稿を編集して問題を明確にしてください。 3年前休業。 数独パズルを考えて、各空のセルに記入できるすべての可能なマークを見つけます。 テストケース 入力: [ [ // Top left: [ 0, 0, 0, 3, 4, 0, 0, 0, 2 ], // Top middle: [ 7, 4, 0, 0, 0, 0, 0, 0, 3 ], // Top right: [ 8, 0, 0, 1, 7, 0, 0, 0, 0 ] …

3
PHPゴルフのヒント:ファイルの読み書きとCLI
私はゴルフは最近、およびなどのファイルからデータを読み取るために使用されている技術のいくつかの課題PHPコードの数に参加しているfopen()とfread()か、file_get_contents()本当に私のコードchar型の数に打撃を与えます。特に、コマンドライン入力を読み込むために提供されるメソッド。 私の質問は、ファイルの内容を読み書きする最速の方法(最小キーストローク)と、プロンプトから行を読み込む最速の方法(最小キーストローク)は何ですか? (注:これはコードゴルフなので、外部ライブラリは使用できません。)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.