Wprowadzenie
Connect Four to gra, w której próbujesz zdobyć cztery z rzędu: poziomo, pionowo lub po przekątnej. W tym golfie próbujemy dowiedzieć się, kto wygrał, biorąc pod uwagę planszę. Zawsze będzie jeden zwycięzca i tylko jeden zwycięzca.
Zadanie
Biorąc pod uwagę tablicę Connect Four, dowiedz się, kto wygrał: X
lub Y
. Zawsze będzie jeden zwycięzca i tylko jeden zwycięzca. Rozmiar planszy będzie zawsze wynosił 6 na 7, podobnie jak plansza na zdjęciu.
Biorąc pod uwagę tablicę, następująca tablica, w tym przypadku, X
jest czerwona i Y
niebieska:
Twój wkład to:
OOOOOOO
OOOOOOO
OOOOOOO
OOOOXOO
OOOXXOO
OOXYYYY
Możesz rozdzielić rzędy gry według znaku nowej linii (jak wyżej), bez dzielenia znaku, podzielić rzędy na tablicę lub listę, lub możesz wprowadzić matrycę znaków.
Prawidłowe dane wyjściowe dla tego przykładu:
Y
Y ma cztery z rzędu; więc Y jest zwycięzcą. Wyprowadzamy więc Y.
Przypadki testowe
Wkład:
OOOOOOO
OOOOOOO
OOOOOOO
OOOOOOO
OOYYOOO
OYXXXXO
Wynik:
X
Wkład:
OOOOOOO
OOOOOOO
OOOOOOO
XXXXOOO
YXYYOOO
YXYYXYX
Wynik:
X
Wkład:
YXYYXOO
XYXXYOO
XXXYYOO
YYYXXOO
XXYYYYO
XXYYXXO
Wynik:
Y
Wkład:
OOOOOOO
OOOOOOO
OYOOOOO
OOYOOOO
OOOYOOO
OOOOYOO
Wynik:
Y
Wkład:
OOOOOOO
OOOOOOO
OYOOOOX
OOYOOOX
OOOXOOX
OXOXYOX
Wynik:
X
Punktacja
Najmniej wygranych bajtów!
Odpowiedzi:
Galaretka , 19 bajtów
Wypróbuj online!
Trzon tej odpowiedzi został skopiowany mojej odpowiedzi na to bardzo podobne pytanie .
Wyjaśnienie
Całkiem proste: bierzemy wszystkie rzędy, kolumny, przekątne i antydiagonale (tak jak w walidatorze n-królowych), następnie bierzemy wszystkie podłańcuchy długości 4, a następnie sortujemy je w taki sposób, aby zwycięska linia 4 sortowała się do koniec. (Potrzebujemy rozstrzygnięcia w przypadku, gdy istnieje
OOOO
dodatek doXXXX
lubYYYY
.) Weź ostatni element ostatniego elementu, i będzie onX
lubY
zgodnie z wymaganiami.źródło
Siatkówka,
5148 bajtówPodziękowania dla Martina Endera za oszczędność 3 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako listę wierszy oddzieloną przecinkami
źródło
(.{7}X){3}|XXX
do(.{7}X|X)\4\4
: tio.run/nexus/retina#fc4xCsMwDAXQPfcI2GC6NDS5QaeipcP/…\4
- chcesz powtórzyć efekt.{7}
nie pasującego łańcucha. (A równoważenie grup prawdopodobnie byłoby zbyt długie).JavaScript (ES6), 54
55Edytuj 1 bajt zapisany dzięki @Arnauld
Sprawdzam tylko, czy X jest zwycięzcą, ponieważ zawsze będzie jeden zwycięzca i tylko jeden zwycięzca
Dane wejściowe to ciąg znaków z dowolnym separatorem, jak w odpowiedzi @ Arnauld
źródło
Galaretka ,
2522 bajtówPobiera listę ciągów (lub listy listy znaków) utworzonych z
X
,Y
iO
(działałby również z zamianami, dzięki czemu spacja ma niższą liczbę porządkową niż oba liczniki).Wypróbuj online! lub uruchom rozszerzoną wersję, która pobiera ciąg wielowierszowy.
W jaki sposób?
źródło
JavaScript (ES6),
777669 bajtówZaoszczędzono 7 bajtów dzięki Neilowi
Pobiera dane wejściowe jako ciąg oddzielony od czegoś , w którym coś jest w zasadzie dowolnym znakiem.
Przypadki testowe
Pokaż fragment kodu
źródło
b.match()
? Powinieneś oszczędzić naRegExp
połączeniu.match()
niejawnej konwersji naRegExp
. Dzięki!Python 2 , 143 bajty
Pobiera listę ciągów znaków lub listę znaków. Na stałe zakodowane dla 6 wierszy po 7 kolumn, jak gwarantuje specyfikacja.
Wypróbuj online!
źródło
PHP, 71 bajtów
Wersja online
źródło
Python 2 ,
201143129128107 bajtówPostanowiłem dodać razem poziome, pionowe i przekątne do jednej listy, a następnie dodać przyrost, a następnie poszukać X na nim razy. A ponieważ zawsze będzie zwycięzca, mogę założyć, że wygrał Y, jeśli X nie. Kody te obejmują macierz wszystkich różnych elementów i pustych miejsc.
Wypróbuj online!
Kredyty
źródło
i:] for
,i, r
,r] for
i1 for
.*(len(m)-1)
może być*~-len(m)
. Jak to działa.] for
I1 for
są nadal.K (ngn / k) ,
5855 bajtówWypróbuj online!
{
}
funkcja z argumentemx
+!6 7
wszystkie możliwe pary 0..5 i 0..6{
}'
dla każdego z nich4#1-+!3 3
to 4 z 8 kierunków prostopadłych:(1 1;1 0;1 -1;0 1)
3+[
]\&4
zacznij od listy czterech zer (&4
) i wykonaj 3 kroki w każdym z kierunkówx+/:/:
zacznij od każdej możliwej pozycji i wykonaj kroki w każdym możliwym kierunku,/
powiązać. w tym momencie mamy macierz 4-list par współrzędnych, niektóre z nich wystają poza planszęx ./:/:
wyszukaj odpowiednie komórki zx
88<
które z nich są"Y"
? (88 to kod ASCII"X"
)&/'
które 4-listy składają się tylko z"Y"
-s? (i-redukuj-każdy)|/
czy jest co najmniej jeden taki? (lub zmniejsz)"XY"@
jeśli fałszywy zwrot"X"
, jeśli prawdziwy zwrot"Y"
źródło
Zsh ,
207 ...159 bajtówHistoria wersji: 4 iteracje dla ~ 25 bajtów w pierwszym tygodniu; następnie 3 kolejne iteracje dla ~ 25 bajtów 6 miesięcy później.
( pierwszy ) ( drugi ) ( trzeci ) ( czwarty ) ( piąty ) ( szósty )Wypróbuj online!W stopce wypisuję zarówno tablicę wejściową, jak i tablicę, którą budujemy z niej do stderr. Przewiń w dół, aby je debugować, aby je zobaczyć. Tablica, którą budujemy, jest teraz znacznie dłuższa, ponieważ
t
robi kartezjański produkt z płytką wejściową przy każdym wywołaniu. (Hej, to skróciło kod o kilka bajtów.)Jest tu wiele do omówienia, więc przeniosłem komentarze (wydanie szóste) na adnotacje .
(tl; dr: konkatenuj transpozycje oryginalnej tablicy, ale pamiętaj o ich oddzieleniu)
źródło