私は、ブルートフォースアルゴリズムを利用してコードロックを解決する方法に取り組んでいますが、私はこれをいかに効率的に行うことができるかについてアイデアが不足しています。 This image shows how my program is structured.ブルートフォースaコードロック
アルゴリズムは、それぞれが任意の量の列を含むことができる任意の量の行に作用するべきであるという考えがあります(理由は、50個以下の合計の2乗を意味します)。最初の四角形に '2'を配置し、次に空の四角形に '3'を配置するなどして開始する必要があります。メソッドがtrueを返す場合、それは停止します。そうでない場合は、最初の四角に「3」を置き、次に「3」を入力して再起動します。
すべての行のすべての正方形が正しい桁を持つとき、ロックは開いていると見なされます。メソッドはtrueを返します。可能なすべてのシーケンスが試され、何も機能していないとき(プログラムのどこかで何かが間違っていた)、falseを返すだけです。
最初の行のみを考えてみましょう。正しい順序は "3 - 4 - 9"としましょう。上の画像に続いて、これはtrueを返す必要があります。
//Returns true for a = 0, b = 0, c = 1 --- x = 0, y = 1, z = 2
allEmptySquares[a][b].putValue(allEmptySquares[a][b].getPossibleSolutions.someArray[c]);
allEmptySquares[x][y].putValue(allEmptySquares[x][y].getPossibleSolutions.someArray[z]);
私は、forループ使用して、メソッドの再帰を作ってみましたが、私は解決策は、z> Cを持っているとき、それは仕事を得ることができません。
これを書く方法についてのヒントを教えてください。
編集:私のコードを書くよりも、可能な解決策のアイデアにもっと興味があります。
編集:私は大きなディテールについて言及していませんでした。新しい桁が得られるすべての四角形に対して、他の四角形の選択肢は少なくなります。それは数独のように考えてください。つまり、someArray.length = 0の場合、メソッドは2番目の段落で説明したように再開します。最後の四角はsomeArray.length = 1になります。他のすべての四角が正しい桁を受け取っている場合は1です。
編集:可能な解決策と、どの四角形があらかじめ入力されているかは、プログラムの他の場所で決まるため、この方法は可能な限り「汎用」である必要があります。
あなたはこの問題が実際に解決するには大きすぎる理解し、右?あなたの「理由」の例には10^50の解決策があります。あなたは3桁のロックのようなより簡単な問題を解決するコードを書いて、コードを表示してください。 – markspace
しかし、あなたはアルゴリズムを持っています。あなたが求めているのは、「このアルゴリズムを実装するにはどうしたらいいですか? - これはコードです。マークスペースが指摘しているように、10^50はかなり大きいです。例えば、1ナノ秒ごとに1つのコードをチェックした場合、3.16887646×10^33年です。 – gilleain
一方、質問は、まだそれは少し神秘的です。なぜ2ではなく1で始まるのですか?なぜ可能な解決策は、[1 ... 9]ではなく、[3,7,9]だけに戻るのでしょうか? – gilleain