0

そのため、バイナリ パズルを解く Scilab のプログラムに取り組んでいます。しかし、私は問題に遭遇しました。[1 0 -1 0 -1 1 -1] のように、-1 は空のセルを意味します。指定されたシーケンスのすべての可能なソリューションが必要です。これまでのところ、私は持っています:

function P = mogelijkeCombos(V)
for i=1:size(V,1)
    if(V(i) == -1)
        aantalleeg = aantalleeg +1
    end
end
for i=1:2^aantalleeg 
    //creating combos here
end
endfunction

一部の単語がオランダ語で申し訳ありませんが、aantalleeg は空のセルの量を意味します。皆さんに十分な情報を提供できれば幸いです。コードを書く必要はありません。完全に行き詰まっているので、考えられるすべての表現を作成する方法のアイデアが欲しいだけです。

ところで、これは学校の課題ですが、課題はこれよりもはるかに大きく、アイデアが必要な小さな部分にすぎません

事前に

4

1 に答える 1

0

簡潔な答え

コードを拡張し、「amountempty」の長さのすべての可能なバイナリ ワードを作成し、V の空のセルでビットごとに置き換えることで、コンボを作成できます。

段階的な説明

  • すべての空のセル位置を見つける
  • 見つけた位置の数を数えます (空のセルの数に等しい)
  • カウントの長さで可能なすべての2進数を作成します
  • 生成する 2 進数ごとに、空のセルにビットを配置します。
  • 埋められたビットで可能なシーケンスを印刷/保存する

すべての空のセル位置を見つける

たとえば、1 から開始して左から右にチェックし、セルが空の場合はその位置を位置リストに追加できます。

V = [1 0 -1 0 -1 1 -1] 
          ^    ^    ^
          |    |    | 
     1 2  3 4  5 6  7

// result
positions = [3 5 7]

見つけたポジションの数を数えます

//result 
amountempty = 3;

amountty の長さを持つすべての可能な 2 進数を作成します。

dec2binSciLabの関数を使用して、考えられるすべての数字または単語を作成できます。可能な単語の数は簡単に決定できます。これは、空のビット長の単語でどれだけの個別の値を表すことができるかがわかっているためです。

// Create the binary word of amountEmpty bits long
binaryWord = dec2bin( i, amountEmpty );

生成された binaryWord は文字列になります。それを別々のビットに分割し、数値に変換する必要があります

生成する binaryWord ごとに

元の V から始めて、可能なソリューションを作成し、位置リストの位置にあるすべての空のセルに binaryWordPerBit のビットを入力します。

possibleSequence = V;

for j=1:amountEmpty
    possibleSequence( positions(j) ) = binaryWordPerBit(j);              
end

私はあなたに「veel succes met je opdracht」を願っています

于 2013-05-13T07:19:07.713 に答える