Na imprezie zapoznałem się z grą LCR. Teraz nie jest to świetna gra, ponieważ nie ma umiejętności, a jedynie losowa szansa. Ale przyszło mi do głowy, że mogę to kodować i stworzyłem szybki program w R do modelowania gry.
Zasady gry zmodyfikowane z Wikipedii, aby pasowały do naszego sposobu gry:
Każdy gracz otrzymuje co najmniej 3 żetony. Gracze po kolei rzucają trzema sześciokątnymi kostkami, z których każda jest oznaczona „L”, „C”, „R” po jednej stronie i pojedynczą kropką po trzech pozostałych stronach. Za każde rzucone „L” lub „R” gracz musi przekazać jeden żeton graczowi odpowiednio po lewej lub prawej stronie. „C” oznacza żeton do środka (puli). Kropka nie ma wpływu.
Jeśli graczowi pozostało mniej niż trzy żetony, nadal jest w grze, ale ich liczba żetonów to liczba kości, które rzucają w swojej turze, zamiast rzucić wszystkimi trzema. Kiedy gracz ma zero żetonów, przekazuje kości w swojej turze, ale może otrzymywać żetony od innych i odpowiednio wykonywać następną turę. Zwycięzca jest ostatnim graczem, który umieścił żetony na środku.
Konkurs: napisz program w wybranym języku, który pobiera dane dotyczące liczby graczy i liczby początkowych żetonów i symuluje grę LCR, pokazując stan gry po wyrzuceniu każdego gracza.
Na przykład gra może być wyświetlana jako:
[[[3,3,3,3],0],[[1,4,3,4],0],[[1,4,3,4],0],[[1,4,1,4],2],[[1,4,1,2],4],
[[0,4,1,3],4],[[0,3,2,3],4],[[0,3,0,3],6],[[0,3,1,1],7],[[0,3,1,1],7],
[[2,0,1,1],8],[[2,0,0,1],9],[[2,0,0,0],10],[[0,1,0,0],11],
[[1,0,0,0],11],[[1,0,0,0],11],[[1,0,0,0],11],[[0,0,0,0],12]]
ht: JonathanAllan
Wynik nie musi wyglądać dokładnie tak, ale powinno być łatwo rozpoznać rzut kości, ile żetonów ma każdy gracz i ile żetonów ma środek na każdą turę.
To kod golfowy, więc wygrywa najkrótszy kod.
[[[3,3,3,3],0],[[1,4,3,4],0],[[1,4,3,4],0],[[1,4,1,4],2],[[1,4,1,2],4],[[0,4,1,3],4],[[0,3,2,3],4],[[0,3,0,3],6],[[0,3,1,1],7],[[0,3,1,1],7],[[2,0,1,1],8],[[2,0,0,1],9],[[2,0,0,0],10],[[0,1,0,0],11],[[1,0,0,0],11],[[1,0,0,0],11],[[1,0,0,0],11],[[0,0,0,0],12]]
- czy tak jest w tym przypadku?Odpowiedzi:
Emacs Lisp , 279 bajtów
Użyj tej funkcji jako
(f 4 3)
.Wersja lepiej czytelna:
Przykład wyjściowy:
źródło
Java 8,
281277275274253 bajtówWersja, która wyświetla ten sam stan, gdy gracz ma 0 żetonów:
Zaczyna się od trzeciego gracza w szeregu.
Wypróbuj online.
Wersja, która pomija graczy, gdy pozostało 0 żetonów (274 bajty):
Zaczyna się od pierwszego gracza w szeregu.
Wypróbuj online.
-7 bajtów dzięki @ OlivierGrégoire .
Objaśnienie (drugiej wersji):
źródło
s=0;for(int C:c)s+=C;
(21 bajtów) można zastąpićs=A.stream(c).sum();
(20 bajtów)c[i%p]-=r<3?1:0
→c[i%p]-=1-r/3
. Pozwoliłoby to zaoszczędzić 2 bajty.A
zjava.util.Arrays
. : D I umieszczając go w pętli, aby zaoszczędzić na średniku, ma on -2 bajty. I1-r/3
rzeczywiście jest poprawny ( patrz tutaj ). Dzięki.s=c[u=(i+r-1+p)%p]+=1-r&1-r/4
(oszczędza 2 bajty, w porównaniu dos=c[u=(i+r%2*2-1+p)%p]+=r<2?1:0
)Python 2 ,
159148 bajtówWypróbuj online!
Drukuje żetony wszystkich graczy po każdym rzucie
źródło
n*c - sum(players)
. Jeśli muszę to wyraźnie napisać, zrobię toGalaretka , 39 bajtów
+2, aby naprawić zachowanie powtarzania (
¡
musi być poprzedzone przez nilad, więc«3Ḣ$
->⁸FḢ«3
)Jeśli możemy zdefiniować listy wyników, które mają zostać obrócone, aby żetony należały do gracza, który działał wcześniej po lewej, możemy wyeliminować skrajnie prawą 6 bajtów na 33 bajty (jednak moim zdaniem przeczytanie tego jest nieco niewygodne).
Dyadyczny link akceptujący żetony na gracza po lewej stronie i liczbę graczy po prawej stronie, który daje listę liczby żetonów graczy na początku gry i po każdej turze (w tym turach, w których 0 żetonów wymusza podanie) .
Wypróbuj online!
W jaki sposób?
Każdy gracz kolejno, do trzech razy, w zależności od liczby żetonów, rzuca monetą. Kiedy gracz odwraca głowy, nie robi nic, ale jeśli odwraca ogony, rzuca trójstronną kostką tracąc żeton do L, C lub R. (Zauważ, że 0 rzutów, gdy gracz ma 0 żetonów, odpowiada przepuszczeniu.)
To się powtarza dopóki suma żetonów graczy nie wyniesie 0.
Implementacja obraca graczy pozostawionych o jedno miejsce w każdej turze, a następnie obraca powstałe stany z powrotem, tak aby wszystkie były wyrównane, jakby nie były.
źródło
Ø.X¤?
, jest zagnieżdżona wewnątrz repeat-up-to-3-krotnie wykładowego⁸«3Ḣ¤¡
.C #, 356? +13? Bajty
Wymaga
using System;
łącznie +13 bajtów do kodu pokazanego poniżej, jeśli muszę to policzyć. W przeciwnym razie po prostu połóż go w dowolnej klasie i zadzwońL(players, starting chips);
.Przykładowe dane wyjściowe dla gry 2,2:
Wersja mniej golfowa:
źródło
C # (interaktywny kompilator Visual C #) ,
201199 bajtówWypróbuj online!
źródło
Węgiel drzewny , 61 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Na przemian wyrzucanie rzutów kostką i pozostałych żetonów (ani wyjściowa liczba żetonów, ani liczba żetonów na środku nie są uwzględniane na wyjściu). Wyjaśnienie:
Zacznij od pierwszego gracza.
Powtarzaj, aż nikt nie pozostanie żetonom.
Rzuć do trzech kości dla bieżącego gracza. Te kości są oznaczone jako 0-5, gdzie 0-2 oznacza kropkę, 3 oznacza przejście w lewo, 4 oznacza środek, 5 oznacza prawo.
Dodaj liczbę żetonów, które gracz po prawej stronie przekazał w lewo i liczbę żetonów, którą gracz po lewej stronie przekazał w prawo, ale odejmij liczbę żetonów, którą sam gracz przekazał.
Przejdź do następnego gracza.
Wyjście nowej liczby żetonów posiadanych przez graczy.
W rzeczywistości wszystkim jest łatwiej rzucić kostką jednocześnie, co można zrobić w 50 bajtach, w tym wydrukować rzuty kostką, a także pozostałe żetony:
Wypróbuj online! Link jest do pełnej wersji kodu.
źródło
05AB1E (starsza wersja) ,
58504952 bajtówWersja, która wyświetla ten sam stan, gdy gracz ma 0 żetonów (
504952 bajtów ):Wypróbuj online.
Wersja, która pomija graczy, gdy pozostało 0 żetonów (
585760 bajtów ):Wypróbuj online.
Oba +3 bajty przy użyciu starszej wersji, ponieważ nowa wersja 05AB1E ma dziwny błąd. Powinien działać z
Ws\
(push minimum bez popping; swap; lista odrzuconych) zastąpionyß
(pop list i push minimum) i0›
(sprawdź, czy jest większy niż 0) zastąpiony przezd
(sprawdź, czy nie jest ujemny / większy niż lub równy 0) w nowa wersja, ale z jakiegoś powodu kolejność listy zmienia się po zakończeniu¼
!! : S (nowa wersja jest również bardzo wolna i kończy się po 60 sekundach przed ukończeniem wyniku ..>.>)Pierwszy wkład to ilość graczy, drugi wkład to ilość żetonów na gracza.
Objaśnienie (drugiej wersji):
źródło
[2, 3, 3, 3]
po którym następuje[2, 2, 2, 6]
...: S Zobaczę, czy uda mi się znaleźć przyczynę i naprawić. Jeśli nie, zawsze mogę go usunąć i użyć tylko starszej wersji, ponieważ i tak generuje o wiele więcej. Nowa wersja jest dość powolna ze złożonymi pętlami z jakiegoś powodu ..>.>counter_variable
. Próbowałem odtworzyć problem w prostszym przykładzie, ale nie jestem w stanie tego zrobić. Ma to coś wspólnego z zagnieżdżonymi instrukcjami if i mapami w nieskończonej pętli, ale jest zdecydowanie dziwne .. W każdym razie usunąłem tę wersję i teraz pozostała tylko starsza (i szybsza) wersja, która działa zgodnie z przeznaczeniem.