Alak został wynaleziony przez matematyka AK Dewdneya i opisany w jego książce Planiverse z 1984 roku. Zasady Alaka są proste:
Alak to gra dla dwóch graczy, rozgrywana na jednowymiarowej planszy z jedenastoma slotami. Każde miejsce może pomieścić najwyżej jeden element na raz. Istnieją dwa rodzaje elementów: „x” i „o”. x należy do jednego gracza, o do drugiego. Początkowa konfiguracja płyty to:
xxxx___oooo
Gracze na zmianę się poruszają. W każdej turze każdy gracz może przesunąć tylko jeden element, raz. Gracz nie może spasować w swojej turze. Gracz może przenieść dowolny ze swoich pionków do następnego niezajętego miejsca na prawo lub lewo, co może obejmować przeskakiwanie zajętych miejsc. Gracz nie może przesunąć pionka z boku planszy.
Jeśli ruch tworzy wzór, w którym pionki przeciwnika są otoczone po obu stronach dwoma kawałkami koloru poruszającego się (bez żadnych pustych pustych miejsc), wówczas te otoczone fragmenty są usuwane z planszy.
Celem gry jest usunięcie wszystkich elementów przeciwnika, w którym to momencie gra się kończy. Usunięcie „wszystko oprócz jednego” również kończy grę, ponieważ przeciwnik nie może cię otoczyć jednym kawałkiem, dlatego i tak zawsze przegra w ciągu kilku ruchów.
Znalazłem tę grę online i zastanawiałem się: czy można w nią grać w golfa?
Zasady gry w golfa
- Twój kod musi przestrzegać wszystkich zasad gry, obsługi przechwytywania, właściwego poruszania się itp. (Jedynym wyjątkiem jest to, że nie musisz dodawać bota, ale musisz jakoś kontrolować obu graczy, a jeden gracz musi być człowiekiem).
- Wejście musi być przeniesione na kafelku X do kafelka Y lub wyjść. Na przykład możesz użyć
1 4
słowa „przenieś ten kawałek z pola 1 na pole 4”.quit
zakończy program, chociaż użycie Control- Cbyłoby dopuszczalne. Musisz także sprawdzić, czy ruch jest nieważny (wychodząc poza planszę lub poruszając się w miejscu, w którym musisz przejść przez niezajęte miejsca, aby dostać się do lub wysłać wiadomość, która nie jest parą płytek lubquit
). - Wyjścia dla graczy wygrywających i nieważne musi być
P1 WINS
,P2 WINS
iINVALID
, odpowiednio. (Wszystkie mają 7 znaków). - Wyjście musi pokazywać tablicę. To wszystko, co jest wymagane.
- Nie ma znaczenia, czy użyjesz pomocy, takiej jak ponumerowane kafelki lub inne elementy.
Wyzwanie kończy się, jeśli:
- Jedna odpowiedź dostaje 50 głosów
- Jedna odpowiedź pozostaje najwyżej głosowana przez 3 tygodnie, a w tym czasie nie opublikowano żadnych innych odpowiedzi
a wyzwanie ma co najmniej 3 odpowiedzi (więc istnieje prawdziwa konkurencja).
Zasady gry
- Gracz po lewej musi zacząć pierwszy.
- Tylko jeden element zajmuje kwadrat na raz. Poruszasz pionkiem w lewo lub w prawo, aż trafi on na niezajęte miejsce. Plansza się nie zawija i nie można poruszać się przez niezajęte obszary. Na przykład:
xoo__o
. W tym przypadkux
ruch w prawo zmieni tablicę na_oox_o
.xxooo_
. Tutaj najdalej-lewa stronax
mogła się przesunąć, by ustąpić_xooox
, który przechwytujeo
s, pozostawiając_x___x
.x__oox
. Tutajo
s nie są rejestrowane (nadal istnieje luka). Przechwytywanie nie jest możliwe, ponieważ nie można poruszać się przez niezajęte miejsca. Pox
lewej stronie można przesunąć tylko jedno pole, ponieważ pomiędzy nimi nie ma innych elementów (pozostawiając_x_oox
).
- Wiele sąsiadujących elementów może zostać schwytanych na raz, jeśli grupa jest otoczona kawałkami przeciwnika. Np. Od
x_oox
do_xoox
przechwyci zarównoo
s, jak i spowoduje_x__x
. - Jeśli po ruchu najpierw złapiesz pionki przeciwnika , zanim sprawdzisz, czy należy usunąć własny kawałek. Weź dwa przykłady:
o_oxx
dooxox_
. Po pierwsze, drugio
zostaje schwytanyox_x_
, więc pierwszyx
pozostaje na planszy.o_oox
dooxoo_
. Tym razem żaden z nich nieo
jest przechwytywany, więcx
zamiast tego jest przechwytywany.- Jeśli masz tylko jeden element, gra się kończy, ponieważ nie możesz przechwycić za pomocą tylko jednego elementu.
Niech rozpocznie się gra! Nie mogę się doczekać, aby zobaczyć, co wymyślisz.
źródło
Odpowiedzi:
C,
617592 bajtówRozpruty:
Naprawdę chciałem uzyskać ten w ~ 400 bajtach, ale jest tu wiele małych reguł, a przetwarzanie danych wejściowych zakończyło się dość nieznośnie. Zdecydowanie się z tym nie skończyłem. Oto zestaw przykładowych przebiegów obejmujący prawie wszystko:
Jeśli coś źle zinterpretowałem, daj mi znać!
źródło
printf("INVALID");
jeputs("INVALID");
,o<2||x<2
zo<2|x<2
iprintf(b);while(!q){
zfor(printf(b);!q;){
PHP - 505
Powiadomienia należy ukryć, przekierowując
STDERR
na adres/dev/null
.Z rozsądnym białym znakiem:
W przypadkach testowych BrainSteel:
źródło
/dev/null
./dev/null
.Python 2,
536509448441 bajtówZadzwoń przez
a()
; ruchy należy wprowadzić w formularzupiece,destination
(tj.1,4
); wyjdź z Ctrl-C. Jeśli ktoś widzi więcej możliwości gry w golfa, jestem cały w uszach.źródło
SpecBAS - 718 bajtów
SpecBAS to zaktualizowana wersja Sinclair / ZX BASIC, która może działać poza emulatorem. (Wciąż interpretowane).
Użyłem niektórych nowych funkcji, aby zmniejszyć rozmiar tak bardzo, jak tylko mogłem.
Wiersz 12 ustawia wyrażenie regularne, aby wyszukiwać fragmenty „wciśnięte” za pomocą wbudowanego IF, a wiersz 18 używa charakteru INC (zamiast mówić
INC p: IF p=3 THEN LET p=1
)Wyjście (nie można skopiować z wdowy po wyjściu, więc zrzut ekranu)
źródło
C #, 730 bajtów
Wyobrażam sobie, że możliwe są dalsze ulepszenia. Z drugiej strony zinterpretowałem dane
INVALID
wyjściowe jako zakończenie wykonania, więc może być konieczne naprawienie tego problemu, aby zachować zgodność z innymi odpowiedziami.źródło