Wprowadzenie
Gry planszowe to klasyczna gra między dziećmi, ale niektóre dzieci nudzą się grając w grę planszową krok po kroku. Teraz chcą, aby wynik został pokazany, zanim położy ręce na planszy.
Wyzwanie
Załóżmy, że ta gra planszowa: >---#<---X---<X<--#-$
> means the start of the game
- means a position without danger
< means the player should return one step back
X means the player won't move next round
# means a portal where the player returns to the start position
$ the first player to get there or after there wins the game
Dane wejściowe składają się z ciągu z opisanymi powyżej aspektami gry planszowej i dwóch tablic z pewnymi wartościami (od 1
do 6
), aby obaj gracze (dziecko A
i dziecko B
) mieli je podczas gry jedną kostką.
Obie tablice będą zawsze miały tę samą długość> = 1.
Dzieciak A
zawsze zaczyna grę.
Musisz wydać dziecko, które dotarło do końca lub było bliżej końca jako pierwsze.
Jeśli żadne z nich nie dostanie końca, a oboje dzieci pozostaną w tej samej pozycji, drukuj 0
lub jakąkolwiek inną wartość fałszowania.
Jeśli jedna tablica się skończy, podczas gdy druga ma pozostałe rzuty kostkami (z powodu braku jednego gracza przez kilka tur na X), pozostałe rzuty kostne należy zużyć.
W tym zadaniu możesz utworzyć program / funkcję, która odczytuje dane wejściowe ze standardowego wejścia lub pobiera parametry / argumenty i wyświetla / zwraca / drukuje zwycięzcę.
Ponieważ jest to golfowy kod , wygrywa najkrótsza odpowiedź w bajtach!
Przykład wejścia i wyjścia
Możesz także używać różnych formatów danych wejściowych, ale powinieneś brać tylko wartości z gry planszowej, kid-A i kid-B.
Przykład 1:
board: >---#<---X---<X<--#-$
kid-A: [3,6,6,5,2,1]
kid-B: [4,5,3,5,5,5]
output: A
Wyjaśnienie:
>---#<---X---<X<--#-$ # both kids in position
B--A#<---X---<X<--#-$ # kid-A moved 3 to -
B--A#<---X---<X<--#-$ # kid-B moved 4 to # and returned home
B---#<---A---<X<--#-$ # kid-A moved 6 to X and will wait one round
B---#<---A---<X<--#-$ # kid-B moved 5 to < returned one to # and returned home
>--B#<---A---<X<--#-$ # kid-B moved 3 to -
>--B#<---X---<A<--#-$ # kid-A moved 6 to < returned one to X and will wait again
>---#<--BX---<A<--#-$ # kid-B moved 5 to -
>---#<---X--B<A<--#-$ # kid-B moved 5 to < returned one to -
>---#<---X--B<X<--#A$ # kid-A moved 5 to -
>---#<---X---<X<-B#A$ # kid-B moved 5 to -
>---#<---X---<X<-B#-$A # kid-A moved 2 and won the game!
Przykład 2:
board: >-<<<<<$
kid-A: [1,2,3]
kid-B: [5,5,4]
output: 0
Przykład 3:
board: >-<-<#<-<-<-$
kid-A: [5,4,2]
kid-B: [1,1,1]
output: B
Wyjaśnienie:
>-<-<#<-<-<-$ # both kids in position
>-<-<#<-<-<-$ # kid-A moved 5 to # returned home
AB<-<#<-<-<-$ # kid-B moved 1 to -
>B<A<#<-<-<-$ # kid-A moved 4 to < returned one to -
>B<A<#<-<-<-$ # kid-B moved 1 to < returned one to -
AB<-<#<-<-<-$ # kid-A moved 2 to # returned home
AB<-<#<-<-<-$ # kid-B moved 1 to < returned one to -
Current position: (A:0, B:1) output: B
źródło
Odpowiedzi:
Perl,
188180+ 2 = 182 bajtówWuhuu, muszę użyć
goto
.Wymaga
-a
a-E
|-M5.010
:Nieco golfowa wersja:
źródło
Haskell, 142Stosowanie:
Wynik:
Edycja:
Jikes, grałem w golfa na śmierć; zawodzi w ostatnim przykładzie. Niedługo ożyję.
źródło
import
s i myślę, że będziesz potrzebować trochę dlafix
i<|>
, ponieważ nie są one w Preludium (czy jest wersja, która je zawiera?).lambdabot-Haskell
lub podobny język i wykluczyć liczbę bajtów dla importów.