В этом проекте мы создадим программное решение для простых головоломок судоку. Вы можете посмотреть видео с кодами скорости выше и получить доступ к кодам здесь.

Во-первых, позвольте мне объяснить, что такое побитовые операторы и как они используются. Это очень четко объясняется в документах MDN. Эти операторы возвращают новое значение, выполняя соответствующую операцию с двоичными значениями элементов, которые они используют. Приведем два примера и продолжим.

// 9 binary 1001
// 2 binary 0010
// | bitwise OR returns 0 if both digits are 0 otherwise returns 1
console.log(9 | 2); // 11 binary 1011
// & bitwise AND returns 1 if both digits are 1 otherwise returns 0 console.log(9 | 2); // 0 binary 0000

Мы создаем наш индексный HTML-файл и просто добавляем наши файлы CSS и Javascript, как обычно. В части CSS нет сложной ситуации.

В нашем файле javascript мы назначаем наш основной объект переменной с именем sudokuSolver. Судоку — игра из 81 клетки. Мы поместим входной элемент для каждой ячейки, заполним эти элементы и отобразим решение этих входных данных с помощью кнопки РЕШИТЬ.

В нашей функции решения мы определяем переменную, в которой мы берем зарегистрированные числа, и переменные, в которых мы храним значения строк, столбцов, квадратов 9×9. При добавлении наших чисел в ячейках к строкам, столбцам, квадратам берем степень 2 и объединяем с | оператор. Потому что мы хотим, чтобы каждая цифра соответствовала числу в двоичном формате. Все элементы строк, столбцов и квадратов массива представляют собой 9-значное двоичное число.

Мы начинаем искать решение, рекурсивно вызывая функцию findNumber. Делаем проверку при старте этой функции и ставим ограничение на количество рекурсий. Затем мы проверяем вероятности пустых ячеек в каждой координате с помощью вложенного цикла с оператором &. Если в массиве возможностей только один элемент, мы находим свое значение для этой ячейки. Мы обновляем необходимые переменные в массивах строк, столбцов и квадратов и возвращаем функцию findNumber. Этот процесс продолжается до тех пор, пока он не вернет TRUE и не будет найдено решение.

Это найдет правильные ответы только для простых головоломок судоку. Для судоку, требующих сложных методов, найденный сценарий решения может быть неправильным.