tło
Przejdź do „Zadania”, jeśli znasz Tic-Tac-Toe (myślę, że większość to!)
Tic-Tac-Toe to słynna gra dla dwóch graczy. Składa się z planszy 3x3, która jest stopniowo wypełniana przez dwóch graczy (wyjaśnienia poniżej); Pierwszy gracz używa postaci, X
a drugi używa O
. Zwycięzca jako pierwszy otrzymuje 3 kolejne i identyczne postacie ( X
lub O
), poziomo, pionowo lub ukośnie. W przypadku, gdy plansza jest zapełniona i żadnemu z graczy nie udało się zdobyć trzech kolejnych postaci, jak opisano powyżej, gra kończy się remisem. Zauważ, że na końcu gry mogą znajdować się puste miejsca, na wypadek gdyby którykolwiek z graczy wygrał w sumie mniej niż 9 ruchów (nie może się to zdarzyć w przypadku remisu).
Zadanie
Biorąc pod uwagę planszę kółko i krzyżyk na końcu gry (w postaci łańcucha, matrycy, płaskiej listy 9 uporządkowanych wartości, dowolnego innego przyzwoitego formatu), określ, kto wygrywa grę.
Dane wejściowe będą składały się z odrębnych i spójnych wartości, jednej dla
X
, jednej dlaO
i drugiej reprezentującej puste miejsce.Twój program powinien być w stanie wygenerować 3 różne, spójne i niepuste wartości: jedna w przypadku
X
wygranej, druga w przypadkuO
wygranej lub inna, jeśli gracze są remisowani.Podaj te wartości w swojej odpowiedzi. Możesz założyć, że wejście będzie prawidłową tablicą Kółko i krzyżyk.
Przypadki testowe
X
, O
, _
Są wartości wejściowe tutaj; X wins
, O wins
I Tie
są na wyjściu.
X O X
O X _
O _ X
Wyjście: X wins
.
X _ O
X O _
X O X
Wyjście: X wins
.
X O X
_ O X
_ O _
Wyjście: O wins
.
X O X
O O X
X X O
Wyjście: Tie
.
Jak zwykle obowiązują wszystkie nasze standardowe zasady. To jest code-golf , wygrywa najkrótszy kod w bajtach w każdym języku!
źródło
Odpowiedzi:
Galaretka ,
16 1514 bajtówMonadyczny link akceptujący listę list (wierszy lub kolumn) z wartościami:
Zwracane wyniki:
Uwaga: używając wartości zero dla
_
i równych, ale przeciwnych wartości dlaX
iO
, ta wartość (tutaj0.155
) może należeć do zakresu(1/6, 1/7)
(wyłączne na obu końcach) - wybrałem tylko wartość z tego zakresu, która dała dokładnie reprezentowalny wynik zmiennoprzecinkowy dla przypadków wygranych.Wypróbuj online!
W jaki sposób?
źródło
JavaScript (ES6),
10387 bajtówWejście
1
2
0
Wynik
"111"
"000"
"T"
Wyjaśnienie
Przypadki testowe
źródło
Galaretka , 18 bajtów
Wypróbuj online!
X
=1
,O
=-1
,_
=0
X wygrywa =
[1, 1, 1]
, O wygrywa =[-1, -1, -1]
, Remis =0
Wprowadź jako listę 3 list po 3 elementy w
(1, -1, 0)
każdym.źródło
X
=1
,O
=2
,_
=3
, zwraca1
(X zwycięstw),2
(O zwycięstw) lub3
(remis).Python 3 , 73 bajty
Wypróbuj online!
Python 2 ,
1009592878277 bajtówWypróbuj online!
Pobiera dane wejściowe jako ciąg oddzielony znakiem nowej linii
XO_
Wyjścia:
{'XXX'}
dlaX
,{'OOO'}
dlaO
{}
na remisDziała poprzez pocięcie łańcucha na kolumny i przekątne w wierszach:
następnie
'XXX'
i'OOO'
są sprawdzane przed plasterki.Pobiera dane wejściowe jako ciąg oddzielony znakiem nowej linii
XO_
Wyjścia:
{'XXX'}
dlaX
,{'OOO'}
dlaO
{}
na remisDziała poprzez pocięcie łańcucha na kolumny i przekątne w wierszach:
wtedy
'XXX'
i'OOO'
są sprawdzane przed plasterki.źródło
[2::2]
kroi na3579
, a[2:8:2]
daje357
R,
118116115 bajtówPodziękowania dla @ user2390246 za dwa dodatkowe bajty.
Nieznacznie nie golfista:
Zwraca
X
jeśli X wygra,O
jeśli O wygra iT
aw przypadku remisu.Wypróbuj online!
źródło
M[c(3,5,7)]
jest krótszy dla przeciwnej przekątnejPerl 5 , 58 bajtów
56 bajtów kod + 2 fpr
-p0
.Wypróbuj online!
Wyniki
X
iO
wygrane lubT
remis. Zawiera kilka kodów nagłówka / stopki do przetestowania naraz.Alternatywnie, 58 bajtów
Wypróbuj online!
źródło
Python 2 ,
124118117115 bajtów[j*3:j*3+3]
w golfa[j*3:][:3]
.Wypróbuj online!
Wartości wejściowe / wyjściowe
X
jest reprezentowany jako1
O
jest reprezentowany jako2
_
jest reprezentowany jakoNone
źródło
[8,0,3,6,1,4,7,2,5,8,0,4,8,2,4,6]
->map(int,'8036147258048246')
map(ord,"...")
, chociażnul
bajt pośrodku łańcucha nie zadziałał ...[j*3:j*3+3]
jest[j*3:][:3]
. Na marginesie,j*3+3
jest taki sam jak-~j*3
, ale to również 118 bajtów.01234567
...Python 3 , 173 bajtów
Wypróbuj online!
Dane wejściowe jako macierz
1 == X, 0 == O, -1 == _
Dane wyjściowe jako pojedyncza wartość:
2 == X, 1 == O, 0 == TIE
-8 bajtów dzięki Erikowi Outgolfer
źródło
lambda x:h(x,1)*2or+h(x,0)
na -8 bajtów i0 == TIE
(co jest ładniejsze imo).PHP, 70 bajtów
Zakłada
-n
(domyślne ustawienia interpretera). Dodatkowo wymaga-R
(wykonaj<code>
dla każdego wiersza wejścia), liczonego jako jeden.Dane wejściowe są pobierane w jednym wierszu (dokładnie tak, jak w opisie problemu, z wyjątkiem usuniętych wszystkich białych znaków).
Dane wyjściowe są następujące:
1
→ X wygranych,-1
→ O wygranych,0
→ remis.Wypróbuj online!
źródło
'X Wins'
można zmienić na'X'
(lub nawet na liczbę całkowitą - powiedzmy1
). To samo dotyczy'O wins'
iTie
. Biorąc to pod uwagę, 109 bajtów .Siatkówka , 49 bajtów
Wypróbuj online! Pobiera dane wejściowe jako 11-znakowy ciąg 9
X
s,O
s lub-
s w trzech grupach po trzy oddzielone;
s, chociaż łącze zawiera nagłówek, który tłumaczy podane przypadki testowe na ten format. Działa poprzez dopasowanie linii wygrywającej bezpośrednio za pomocą grupy równoważącej, aby zapewnić, że trzy pasujące znaki są w równej odległości. (Odpowiednie odległości to 0 (linia pozioma), 4 (odwrotna przekątna), 5 (linia pionowa) lub 6 (przekątna); inne odległości uderzyłyby;
lub rozciągałyby się poza sznurkiem.)źródło
Java 8,
1121081061049010293 bajtów+12 bajtów (90 → 102) ze względu na naprawę błędu polegającego na sprawdzeniu tylko jednej przekątnej zamiast obu ..
-9 bajtów (102 → 93) przy użyciu
replaceAll
zamiastmatches
.Wejście w formacie
XOX OX_ O_X
, wyjściaX
,O
alboT
.Wyjaśnienie:
Wypróbuj tutaj.
Wyjaśnienie wyrażenia regularnego:
źródło
Siatkówka , 127 bajtów
Wypróbuj online!
... Myślę, że możesz nazwać tę brutalną siłą ... Pomyślałem, że może być w tym jakaś zasługa ...
źródło
Siatkówka , 51 bajtów
Port mojej odpowiedzi Java 8 . Wejście w formacie
XOX OX_ O_X
, wyjściaX
,O
alboT
.Wyjaśnienie:
Wypróbuj tutaj.
źródło
J, 34 bajty
Nie golfowany:
Wyjaśnienie
Kodowanie:
Nasza strategia na wysokim poziomie polega na stworzeniu matrycy, której każdy z rzędów jest możliwą wygraną. Pierwszy rząd to przekątna /, rząd 2 to przekątna \, następne trzy rzędy to rzędy, a ostatnie trzy rzędy to kolumny. Ta część została zrealizowana poprzez wyrażenie (używając Item Amend
}
):Na koniec bierzemy GCD każdego rzędu:
Dzięki naszemu kodowaniu każdy wiersz ze spacją będzie miał GCD równy 1, podobnie jak każdy wiersz zawierający dowolną mieszankę Xs i OS, ponieważ 2 i 3 są pierwszymi kopiami. Więc wszystko, co musimy zrobić, to znaleźć maksymalny element:
>./
Jeśli gra jest remisowa, będzie to 1. Jeśli gracz wygra, będzie to numer tego gracza.
Wypróbuj online!
źródło
JavaScript, 66 bajtów
Prostota.
0
odpowiadające pustej spacji,1
X i2
O.0
remis,1
zwycięstwo X, zwycięstwo2
O.Rozszerzone, lekko komentowane:
źródło