問題タブ [sudoku]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
5869 参照

c# - 揮発性が良い考えでない場合のロックのC#代替

申し訳ありませんが、このトピックが完全に終わったことを知っています (私はこれを読んだ、これこれを読んだ、その他いくつかを読んだ) が、「正しく」行う方法がわからない問題が 1 つあります。

現在、マルチスレッド数独戦略のコードは次のとおりです。

(はい、再帰の有無にかかわらず、上記の戦略が変更するBFSを使用してDFSを実行しました)

private bool _solved;myを aに変更してprivate volatile solved;、アクセサーを削除できるかどうか疑問に思っていました。私のメソッドはAm I correct?ProcessQueue()の状態を変更するため、これは悪いことかもしれません。_solvedブール値がアトミックであることは知っていますが、コンパイラの最適化によって読み取り/書き込みステートメントの順序が乱れることは望ましくありません (特に、書き込みは 1 回しか行われないため)。

基本的に、lock ステートメントにより、この戦略の実行時間が数十秒長くなります。ロックがなければ、非常に高速に実行されます (ただし、DFS 内のメモリ割り当てのため、DFS に比べて比較的低速です)。currentNode.GenerateChildrenAndRecordSudoku()

0 投票する
2 に答える
701 参照

algorithm - 数独質問の生成

数独ゲームをしています。私の問題は数独の質問の生成です。3つの難しさで質問を出したいです。3レベルの質問を生成するアイデアはありますか?

0 投票する
2 に答える
816 参照

java - ランダム数独ジェネレーターが停止し続ける

私のプログラミング コースでは、GUI で数独ボードを作成することにしました。ボードのコードだけのクラスを作成しましたが、埋める必要のあるスロットに何も入れられない場合はいつでも、ボードが失速し、再起動できないようです。何か助けはありますか?失速する原因は何ですか?再起動するにはどうすればよいですか?

これまでの私のコード:

0 投票する
1 に答える
509 参照

java - 再帰的な数独ソルバーはJavaでは機能しません

私はCでソルバーを含む数独ゲームを書いていましたが、Javaで試してみて、人々が少し簡単に使用できるようにしたいと思いました(移植性)。言語間の類似性が非常に高いため、移植はかなり単純になると思いましたが、少し面倒なようです。

私のソルバーは無限に繰り返されますが、これはCでは発生しませんでした。パズルを解くための元のC関数は次のとおりです。

これが必ずしも最速または最高のソルバーであるとは限りませんが、機能しました。可能な限り最小の値を持つタイルを見つけるだけで、ランダムな値から開始し、解決可能なパズルが得られるまで(再帰を使用して)すべての可能な値を試します。sudoku_get_maskは、対応する値に最初の9ビットが設定された整数を返します。すでに使用されている値の水平、垂直、およびサブスクエアをチェックし、それらをマスクから削除します。

さて、これがJavaポートです:

それらはほとんど同じなので、Javaポートが無限に繰り返される理由がわかりません。ソルバーは常に1.解決策を見つけるか2.解決策がないことを見つける必要があります。私の論理では、それが無限に繰り返される方法を私は見ることができません。

GetMaskJavaコードは次のとおりです。

これがsquareIndexとsquarePoint(サブスクエアのルックアップテーブルのみ)です。

0 投票する
1 に答える
1183 参照

objective-c - iOS数独グラバー用OpenCV

私はこのチュートリアル http://aishack.in/tutorials/sudoku-grabber-with-opencv-detection/に従っています が、iOS には対応していません。そこで説明されているいくつかのメソッドを使用できますが、フラッドフィル (cvFloodFill として使用) はもはや int ではありません。それは空虚です

最大のブロブのサイズを取得しようとしていますが、それは私が見逃している部分です。これはループとフラッドフィル用です。

それを行う良い方法はありますか?

私はcvBlobライブラリについて考えましたが、Mac用にコンパイルすることはできません..多くの方法を試しました....

編集:アルキアズの答えの後、新しい質問に移動しました:

openCV cvContourArea

ありがとう!

0 投票する
1 に答える
668 参照

objective-c - OpenCV cvFindContours に関する質問

私はこのガイドに従っています: http://www.aishack.in/2010/08/sudoku-grabber-with-opencv/2/ そして iOS 5.0 に変更します。

なんとか最大の輪郭 (数独「ボード」) を見つけることができましたが、チュートリアルのように、内側に線がなく、周囲の正方形のみが見つかりました。これは簡単に解決できますか?

私はそれを回避する方法を見つけようとしますが、それでも知りたいです。ありがとう!

0 投票する
4 に答える
30986 参照

algorithm - 数独ジェネレータアルゴリズム

数独を生成するアルゴリズムを作成しましたが、それはひどく非効率的でした。各パズルの生成には数分かかりました。だから今、私はそれを最適な方法で書き直そうとしています。しかし、私は助けが必要ないくつかの問題を経験しています。

2つのアプローチがあります:

  1. 空白のグリッドから始めて番号を追加し、それが解決可能かどうかを確認します。
  2. 81個​​の数字すべてで完全に有効なグリッドを作成し、残りの数字の数に満足し、それでも解決できるまで削除します。

最初は最初のアプローチを使用しましたが、より効果的だと思うので、次に2番目を使用します(解決可能であることが保証されている有効なパズルから始めます)。私は2番目のアプローチがより良いというのは正しいですか?

完全に実装されたグリッドを生成しようとすると、問題が発生します。私のアルゴリズムは次のとおりです。

  • 各セルの候補を設定します。最初は1から9までの数字です。
  • 値のないランダムなセルを選択します。
  • そのセルからランダムな候補を選択し、セル値として割り当てます。他の候補は破棄されます。
  • ここで、割り当てられたセルに対応する各行、セル、および正方形について、これらの候補からセルの値を削除します。したがって、各番号は行/列/正方形で一意です。
  • 繰り返す

この手法は、重複する番号のないランダムグリッドを保証します。ただし、ほとんどの場合、配置のルールに違反しないと、競合が発生します。たとえば、すべての候補が削除された空のセルなど、最初からやり直す必要があります。配置のルールを破ることなく、グリッド全体を数字で埋める、よりエレガントで効率的な方法はありますか?

0 投票する
1 に答える
450 参照

java - 完成した数独ボードの行と列を数える

それで、完成した数独ボードの入力ファイルに含まれる行と列の数を数えようとしています。私はこのループを思いついた

数独ボードの入力ファイルの配列を読み取って作成した以前の方法から、この方法を作成するというアイデアを得ました。2つの方法は似ていると思いましたが、そうではありません..nrwsとncolumnsの出力は1と81です。列を数えて9があることを確認する適切な方法を誰かが見つけてくれますか.それとも行と列の値を比較して、正しい数の行と列があるかどうかを確認するエラーチェックを使用して、(1 ~ 9 の) 重複があるかどうかを確認することをお勧めします。

0 投票する
3 に答える
3269 参照

java - 2次元配列の行と列の整数を比較します。数独

ちょっと私は私のコードが与えられた行または列とブロックの整数を比較してそれらのパラメータ内に重複がないことを確認するのに問題があります。3つの制約を3つの異なる方法で分離するのが良いのか、それとも一度にすべてを実行しようとするのが良いのかはわかりません。

これが私のコードです。2D配列の行のすべての値を比較する方法に固執して、このimをコンパイルすることさえできなかったために、皆さんが私を打ちのめす前に。

0 投票する
3 に答える
9407 参照

java - 数独チェッカー2D配列Java

だから私のコードに少し問題があります..同じ整数の行と列をクロスチェックすることを想定しています。

これは私がこれまでに持っているものです..しかし、私がそれを実行すると、最初の整数のみをチェックするように見えます。(たとえば、数独ボードの最初の行は次のようになります。1 2 2 2 2 2 2 2 2 2)明らかな複数の2は検出されませんが、入力を1 1 2 2 2 2 222に変更するとエラーが発生します。この場合、複数の1のアップ。ループを微調整して列を通過させるための複数の提案はありますか?