Задание выполняется на Scala, использование мутабельных объектов и переменных запрещено.
- Реализуйте игру в классическое судоку по аналогии с разобранным примером TicTacToe.
Начальное состояние задаётся как
List[List[Int]]
. Ваша игра должна поддерживать игрока, вводящего из консоли три числа x y v, где x - номер строки, y - номер столбца и v - число, которое игрок хочет поместить в ячейку. Программа должна обрабатывать не нарушит ли введённое число правила судоку, а так же проверять введённые значения на возможность их в рамках судоку. - Между вводами игрок должен получать текущее состояние поля.
- Должна быть возможность поиграть в вашу реализацию.
- С полученным кодом реализуйте два метода
SudokuUtils
, для прохождения тестов. Форматом вывода судоку считается следующий:
val sudokuInput =
List(
List(3, 1, 6, 5, 7, 8, 4, 9, 2),
List(5, 2, 9, 1, 3, 4, 7, 6, 8),
List(4, 8, 7, 6, 2, 9, 5, 3, 1),
List(2, 6, 3, 0, 1, 0, 0, 8, 0),
List(9, 7, 4, 8, 6, 3, 0, 0, 5),
List(8, 5, 1, 0, 9, 0, 6, 0, 0),
List(1, 3, 0, 0, 0, 0, 2, 5, 0),
List(0, 0, 0, 0, 0, 0, 0, 7, 4),
List(0, 0, 5, 2, 0, 6, 3, 0, 0)
)
val sudokuString: String =
"""
| 1 2 3 | 4 5 6 | 7 8 9 |
--+-------+-------+-------+
0 | 3 1 6 | 5 7 8 | 4 9 2 |
1 | 5 2 9 | 1 3 4 | 7 6 8 |
2 | 4 8 7 | 6 2 9 | 5 3 1 |
--+-------+-------+-------+
3 | 2 6 3 | 1 | 8 |
4 | 9 7 4 | 8 6 3 | 5 |
5 | 8 5 1 | 9 | 6 |
--+-------+-------+-------+
6 | 1 3 | | 2 5 |
7 | | | 7 4 |
8 | 5 | 2 6 | 3 |
--+-------+-------+-------+
"""
- (+10) На поле судоку покажите визуально почему последний ввод игрока был не верен.
- (+10) Реализуйте игрока, который ищет решение судоку при помощи алгоритма Backtracking.