Вам предоставляется позиция на доске для игры в Го и ход для игры. Вам необходимо указать, является ли ход законным или нет, и новую позицию на доске, если это законно.
Краткое объяснение ходов Го: игра состоит в альтернативном размещении черно-белых фигур («камней») в пустых местах на квадратной доске. Наборы кусочков одного цвета, которые соединены друг с другом (4-сторонние), называются группами. Пустые места на доске, прилегающие к группе (также 4-сторонние), считаются «свободами» этой группы. Группа с 0 свободами захватывается (удаляется с доски). Ход, который привел бы к захвату его собственной группы («самоубийство»), является незаконным, если только он не захватывает одну или несколько групп противника (получая свободу в процессе, поэтому он фактически не захвачен).
Для тех, кто заинтересован, вам не нужно иметь дело с ко (и суперко), то есть вы можете предположить, что захват ко является законным. Если вы не знаете, что это значит, просто следуйте приведенным выше правилам, и все будет хорошо.
Входные данные: число n от 2 до 19 (включительно), представляющее размер доски, за которым следуют n строк из n чисел от 0 до 2 (включительно), представляющих позицию доски, за которыми следуют 3 числа, разделенные пробелом, представляющие ход, который необходимо сделать. В позиции на доске 0 означает пустое место, 1 означает черный камень и 2 означает белый камень. Движение дает столбец, ряд и цвет (1 или 2) камня для размещения. Столбец и строка основаны на 0, в диапазоне от 0 до n-1 (включительно) и считаются в том же порядке, что и вход платы.
Вы можете предположить, что данная позиция совета является законной (все группы имеют по крайней мере одну свободу).
Вывод: строка, содержащая 1 или 0 (или true / false, если вы предпочитаете), если ход разрешен или нет, за которым следует (только в случае допустимого перемещения) новая позиция на доске в том же формате, что и вход.
Оценка: количество байтов полного исходного кода, чем меньше, тем лучше. 20% дополнительного штрафа за использование символов, отличных от ascii, и 20% дополнительного штрафа, если ваш код не может быть протестирован в Linux с использованием свободно доступного программного обеспечения.
Правила: нет сетевых подключений и сторонних библиотек. Ваша программа должна использовать стандартные потоки ввода и вывода или стандартный эквивалент для вашего языка программирования.
Примеры:
1) Input:
2
10
01
1 0 2
Output:
0
2) Input:
2
10
11
1 0 2
Output:
1
02
00
3) Input:
5
22122
22021
11211
02120
00120
2 1 1
Output:
1
00100
00101
11011
02120
00120
4) Input:
6
000000
011221
121121
122221
011110
000000
4 0 1
Output:
1
000010
011221
121121
122221
011110
000000