Zagrajmy w golfa kodowego!
Wyzwanie polega na znalezieniu zwycięzcy gry w kółko i krzyżyk.
Dokonano tego wiele razy, dając planszę, która ma jednego wyraźnego zwycięzcę, ale oto zwrot:
Komórki są ponumerowane w następujący sposób:
1|2|3
-+-+-
4|5|6
-+-+-
7|8|9
Otrzymujesz tablicę dokładnie 9 takich ruchów:
{3, 5, 6, 7, 9, 8, 1, 2, 3}
Jest to analizowane w następujący sposób:
- Gracz 1 oznacza komórkę 3
- Gracz 2 oznacza komórkę 5
- Gracz 1 oznacza komórkę 6
- Gracz 2 oznacza komórkę 7
- Gracz 1 oznacza komórkę 9
- Gracz 1 wygrał
Uwaga: Gra nie kończy się po wygraniu jednego gracza, może się zdarzyć, że przegrywającemu uda się zdobyć trzy z rzędu za wygranym graczem, ale liczy się tylko pierwsza wygrana.
Twoim zadaniem jest teraz zdobycie 9 liczb jako danych wejściowych i wyjściowych dla zwycięskiego gracza oraz rundy, w której nastąpiło zwycięstwo. Jeśli nikt nie wygra, wyślij coś stałego do wyboru. Możesz odbierać dane wejściowe i generować dane wyjściowe za pomocą dowolnej standardowej średniej / formatu.
Baw się dobrze!
Więcej przykładów zgodnie z życzeniem:
{2,3,4,5,6,7,1,8,9} => Player 2 wins in round 6
{1,2,4,5,6,7,3,8,9} => Player 2 wins in round 8
{1,2,3,5,4,7,6,8,9} => Player 2 wins in round 8
źródło
[X, Y]
? Czy w przypadku remisu możemy zamiast tego wygenerować inną spójną wartość? Polecam, ponieważ drukowanie tych dokładnych ciągów tak naprawdę nie jest częścią gry w golfa. W przypadku pomysłów na przyszłe wyzwania polecam korzystanie z piaskownicy . :-){3, 5, 6, 7, 9, 8, 1, 2, 3}
” - czy3
naprawdę powinien pojawić się dwa razy?Odpowiedzi:
Siatkówka , 114 bajtów
Wypróbuj online! Na podstawie mojej odpowiedzi na kółko i krzyżyk - X czy O? . Wywołuje,
X<N>
jeśli pierwszy gracz wygrywa poN
turach,O<N>
jeśli drugi gracz wygrywa,T
jeśli żaden nie wygrywa. Wyjaśnienie:Tworzy wewnętrzną planszę, a także oznacza każdy ruch gracza, którego jest to ruch.
Stosuje ruch.
Szuka wygranej, a jeśli zostanie znaleziona, zastąp tablicę zwycięzcą i liczbą pozostałych ruchów.
Jeśli ruchy są wyczerpane i nikt nie wygrał, gra kończy się remisem.
Oblicz liczbę rund na podstawie liczby pozostałych ruchów.
źródło
MATL , 39 bajtów
Dane wyjściowe to
1
orazR
w osobnych wierszach, jeśli użytkownik 1 wygra w rundzie R ;0
orazR
w osobnych wierszach, jeśli użytkownik 2 wygra w rundzie R ;Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
JavaScript (ES6), 130 bajtów
Wyjaśnienie
źródło
Java (OpenJDK 8) , 445 bajtów
Wypróbuj online!
Wartość zwrotna {1,8} oznacza, że gracz 1 wygrał w rundzie 8. Wartość zwrotna {0,0} oznacza remis.
źródło
false
można zastąpić1<0
, a spację po pierwszej]
można usunąć.//Code that was submitted
i//End of code
.Kotlin , 236 bajtów
Upiększony
Test
TIO
TryItOnline
źródło
Python 2 , 170 bajtów
Wypróbuj online! lub Wypróbuj wszystkie przypadki testowe
źródło
Galaretka , 38 bajtów
Wypróbuj online!
Gracz 1 wygrał:
[round, 1]
Gracz 2 wygrał:
[round, 2]
Remis:
[0, 0]
źródło
Python 3.6+, 137 bajtów
Format wyjściowy to
winner number:round
lub-1
remis. Gracz 2 to0
Gracz 1 to1
. Dane wejściowe w postaci nieusuniętego ciągu 1-indeksowanych liczb kwadratowych.źródło
Galaretka , 35 bajtów
Monadyczny link prowadzący do listy ruchów i zwracający listę, w
[move, player]
której gracze są określani jako1
(pierwszy do działania) i0
(drugi do działania).Wypróbuj online!
W jaki sposób?
źródło
Python 2, 168 bajtów
Wyjścia (gracz, runda) lub 0 dla remisu.
Mapuje grę na magiczny kwadrat 3 na 3 i szuka zestawów 3 Os lub X, których suma wynosi 15.
źródło
Czysty ,
244... 220 bajtówWypróbuj online!
Ciąg iterowany w
h
zawiera zawiera niedrukowalne i jest równoważny"\003\001\000\000"
.źródło
Python 2 ,
140136134 bajtówWypróbuj online!
EDYCJA: 4 bajty + 2 bajty dzięki Ericowi Outgolferowi.
Wysyła krotkę (playerNumber, roundNumber) lub False, jeśli nie ma zwycięzcy.
źródło