Завершение списка возможных двоичных последовательностей дает двоичную последовательность с пробелами

Итак, я работаю над программой в 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 означают amountempty, под которым я подразумеваю количество пустых ячеек. Надеюсь, я дал вам достаточно информации. Мне не нужен написанный код, я просто хотел бы получить представление о том, как сделать все возможное, поскольку я полностью застрял в этом.

Кстати, это школьное задание, но задание намного больше, чем это, и это лишь малая часть, мне нужны некоторые идеи

Ты заранее

1 ответ

Короткий ответ

Вы можете создать комбо, расширив свой код и создав все возможные двоичные слова длиной "amountempty" и заменяя их побитно в пустых ячейках V.

Пошаговое описание

  • Найти все пустые ячейки
  • Подсчитайте количество позиций, которые вы нашли (что равно количеству пустых ячеек)
  • Создайте все возможные двоичные числа с длиной вашего счета
  • Для каждого сгенерированного вами двоичного числа поместите биты в пустые ячейки
  • распечатать / сохранить возможную последовательность с заполненными битами

пример

Найти все пустые ячейки

Например, вы можете проверить слева направо, начиная с 1, и, если ячейка пуста, добавить позицию в список позиций.

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

// result
positions = [3 5 7]

Подсчитайте количество позиций, которые вы нашли

//result 
amountempty = 3;

Создайте все возможные двоичные числа с длиной amountempty

Вы можете создать все возможные числа или слова с помощью dec2bin функция в SciLab. Количество возможных слов легко определить, потому что вы знаете, сколько отдельных значений можно представить словом длиной в несколько бит.

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

Сгенерированная двоичная строка будет строкой, вам придется разбить ее на отдельные биты и преобразовать в числа.

Для каждого двоичного слова вы генерируете

Теперь создайте возможное решение, начав с исходного V, и заполните каждую пустую ячейку в позиции из списка позиций битом из binaryWordPerBit.

possibleSequence = V;

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

Я желаю вам "Veel успехов встретил меня opdracht"

Другие вопросы по тегам