Завершение списка возможных двоичных последовательностей дает двоичную последовательность с пробелами
Итак, я работаю над программой в 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"