Skip to content

Latest commit

 

History

History
6 lines (6 loc) · 2.85 KB

README.md

File metadata and controls

6 lines (6 loc) · 2.85 KB

Судоку верификатор решений

Функционал проверки решений судоку реализован в объекте SudokuCheckerUtils. Реализовано два сценария проверки regularChecker и fastChecker. regularChecker реализует проверку всех свойств правильного решения судоку. fastChecker реализует сценарий с меньшим числом проверок в соответствии с предлагаемой оптимизацией, сокращающей число проверок до 21 проверки последовательности длиной 9, а именно:4-х квадрантов 3 на 3, все столбцы и все строки кроме последней.

Детали реализации

Для проверки того, что в последовательности из 9 элементов есть все цифры из диапазона [1..9] реализован метод isNineDigitsMet. Основной его принцип это аккумуляция найденных цифр в переменной типа Int в виде соответствующих (по позиции) бит с последующим сравнением полученного числа с числом 0x1FF соответсвующим первым 9 единичным битам в двоичном представлении числа. Для обхода столбцов и квадрантов были реализованы ColumnIterator и QuadrantIterator. Так как regularChecker и fastChecker отличаются только наборами проверяемых последователльностей из 9 элементов, то сама проверка была реализована с помощью метода checkSudoku, которому на вход помимо самой матрицы поступает case класс ItemsToCheck, содержаший "индексы" проверяемых сущностей (строки,квадранты,столбцы).

Тестирование

Для проверки работоспособности реализованы модульные тесты с использованием библиотеки ScalaTest. Так как тестировать нужно 2 реализации, то был реализован трейт SudokuCheckBehavior, описывающий тесты и два класса RegularCheckingSpec и FastCheckingSpec предоставляющих соответствующие реализации