Otrzymujesz pozycję na planszy do gry Go i ruch do gry. Musisz podać, czy ruch jest legalny, czy nie, oraz nową pozycję na tablicy, jeśli jest legalna.
Krótkie wyjaśnienie ruchów Go: gra polega na naprzemiennym umieszczaniu czarno-białych elementów („kamieni”) w pustych miejscach na kwadratowej planszy. Zestawy elementów tego samego koloru, które są ze sobą połączone (4-kierunkowe) są nazywane grupami. Puste miejsca na planszy, które sąsiadują z grupą (także czterokierunkowe) są uważane za „wolności” tej grupy. Grupa z 0 swobodami zostaje schwytana (usunięta z planszy). Ruch, który spowodowałby schwytanie własnej grupy („samobójstwo”) jest nielegalny, chyba że chwyta jedną lub więcej grup przeciwnika (zyskuje w ten sposób swobody, więc nie jest faktycznie schwytany).
Dla zainteresowanych nie musisz zajmować się ko (i superko), tzn. Możesz założyć, że łapanie ko jest legalne. Jeśli nie wiesz, co to znaczy, po prostu postępuj zgodnie z powyższymi zasadami, a wszystko będzie dobrze.
Wprowadzanie: liczba n między 2 a 19 (włącznie) reprezentująca rozmiar planszy, następnie n wierszy n liczb od 0 do 2 (włącznie) reprezentujących pozycję planszy, a następnie 3 liczby oddzielone spacją, reprezentujące ruch do wykonania. W pozycji na planszy 0 oznacza puste miejsce, 1 oznacza czarny kamień, a 2 oznacza biały kamień. Ruch daje kolumnę, rząd i kolor (1 lub 2) kamienia do umieszczenia. Kolumna i wiersz są oparte na 0, od 0 do n-1 (włącznie) i są liczone w tej samej kolejności, co wejście na płytce.
Możesz założyć, że dana pozycja zarządu jest legalna (wszystkie grupy mają co najmniej jedną swobodę).
Dane wyjściowe: wiersz zawierający 1 lub 0 (lub prawda / fałsz, jeśli wolisz), jeśli ruch jest legalny, czy nie, po którym następuje (tylko w przypadku legalnego ruchu) nowa pozycja tablicy w tym samym formacie co dane wejściowe.
Wynik: liczba bajtów pełnego kodu źródłowego, im mniejsza, tym lepiej. 20% dodatkowej kary za użycie znaków innych niż ascii i 20% dodatkowej kary, jeśli twój kod nie może być przetestowany w Linuksie przy użyciu swobodnie dostępnego oprogramowania.
Reguły: Brak połączeń sieciowych i bibliotek zewnętrznych. Twój program powinien używać standardowych strumieni wejściowych i wyjściowych lub standardowego odpowiednika dla Twojego języka programowania.
Przykłady:
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
źródło
6 000000 011221 121121 122221 011110 000000 4 0 1
wyjściowe: 0. Dodano teraz jako przykład 4.5 22100 20211 12211 12120 01120 1 1 2
Wyjście powinno wynosić 0.Python (
9121004)Przejdź: przeanalizuj dane wejściowe, sprawdź, czy ruch jest w pustym miejscu, wykonaj ruch, zainicjuj siatkę „grupową”, uprość / zminimalizuj siatkę grupową, sprawdzając kolor sąsiednich kamieni (s = 0) i powtarzaj aż do pełnego zminimalizowania , sprawdź dla swobód grupowych (s = 1), usuń kamienie przeciwnika dla grup bez swobód (s = 2), powtórz s = 0 i s = 1, sprawdź, czy wszystkie grupy graczy mają wolności, zwróć wynik.
Można to prawdopodobnie znacznie skrócić ...
Przykładinteraktywnydziała:źródło