Банк был взломан, и у всех местных мафиозных головорезов есть необычное алиби: они были дома, играя в Connect 4! Чтобы помочь в расследовании, вас просят написать программу для проверки всех досок Connect 4, которые были изъяты, чтобы проверить, что позиции действительно являются позициями в действующей игре Connect 4 и не были спешно собраны вместе как только полиция постучала в дверь.
Правила подключения 4: игроки R
и Y
по очереди бросают плитки своего цвета в столбцы сетки 7x6. Когда игрок бросает плитку в столбец, он падает, чтобы занять самую низкую незаполненную позицию в этом столбце. Если игроку удается получить горизонтальный, вертикальный или диагональный ряд из четырех плиток своего цвета на доске, то он выигрывает, и игра немедленно заканчивается.
Например (с R
запуском), следующая позиция Connect 4 невозможна.
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | |R| | | | |
| | |Y| | | | |
|R| |Y| | | | |
Ваша программа или функция должны принимать плату Connect 4 и возвращать либо
- Ложное значение, указывающее, что позиция невозможна или
- Строка чисел от 1 до 7, что указывает на одну возможную последовательность ходов , ведущих к этой позиции (столбцы пронумерованы ,
1
чтобы7
слева направо, и так последовательности112
, например, указывает на красный движение в колонке1
, а затем желтый ход в столбце с1
последующим красным движением в столбце2
). Вы можете выбрать нумерацию столбцов, отличную от 1234567, если хотите, если вы указали в своем решении. Если вы хотите вернуть список в другом формате; например, в качестве массива[2, 4, 3, 1, 1, 3]
, это тоже хорошо, если легко увидеть, что движется.
Вы можете выбрать чтение доски в любом разумном формате, включая использование букв, отличных от R
и Y
для игроков, но вы должны указать, какой игрок идет первым. Вы можете предположить, что доска всегда будет 6х7 с двумя игроками.
Вы можете предположить, что полученные вами позиции, по крайней мере, физически возможно создать на стандартной плате Connect 4; то есть, что не будет «плавающих» фигур. Вы можете предположить, что доска будет непустой.
Это код гольф, поэтому самый короткий ответ выигрывает. Применяются стандартные лазейки.
Примеры
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | --> 1234567 (one possible answer)
| | | | | | | |
|R|Y|R|Y|R|Y|R|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | |R| | | | | --> false
| | |Y| | | | |
|R| |Y| | | | |
| | | | | | | |
| | |Y| | | | |
| | |R| | | | |
| | |Y| | | | | --> 323333 (only possible answer)
| | |R| | | | |
| |Y|R| | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | --> false (this is the position arising after
| |Y|Y|Y|Y| | | the moves 11223344, but using those moves
| |R|R|R|R| | | the game would have ended once R made a 4)
| | | | | | | |
| | | | | | | |
|Y| | | | | | |
|R|Y| | | | | | --> 2134231211 (among other possibilities)
|R|R|Y| | | | |
|Y|R|R|Y| | | |
| | | | | | | |
| | | | | | | |
|Y| | | | | | |
|R|Y| | | | | | --> false (for example, 21342312117 does not
|R|R|Y| | | | | work, because Y has already made a diagonal 4)
|Y|R|R|Y| | |R|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | --> 112244553 or similar
|Y|Y| |Y|Y| | |
|R|R|R|R|R| | |