Zagraj w grę w Dice Cricket

12

Dice Cricket to gra, do której zostałem wprowadzony jako dziecko i od tamtej pory wykorzystałem ją jako sposób na spędzenie czasu. Nie mogłem znaleźć strony w Wikipedii, więc wyjaśnię poniższe zasady.

Zasady gry w krykieta kości

Przesłanka

Dice Cricket to gra podobna do oceniania gry w krykieta podczas oglądania, ale zamiast oglądać i rejestrować wynik, rzucasz kością i rejestrujesz wynik.

Wyniki są zapisywane w tabeli, jak pokazano na dole.

Pokaz

Dice Cricket używa specjalnego wyświetlacza, aby pokazać wszystkie informacje.

Tabela ma 11 rzędów. Każdy rząd przedstawia ciasto. Układ wiersza wyjaśniono poniżej.

+------+------------------------------+---------+-----+
| Name |    Runs                      | How Out |Score|
+------+------------------------------+---------+-----+
  • Nazwa: nazwa musi być ciągiem złożonym w całości z liter, wielkich lub małych liter
  • Uruchamia: Pałkarz może zmierzyć się z 30 piłkami. Każda piłka może być jedną z nich 1 2 4 6 . /. Zostanie to wyjaśnione bardziej szczegółowo poniżej
  • How Out: Sposób, w jaki ciasto się wydostało. Może być dowolnyBowled, LBW (Leg Before Wicket), Caught, Retired or Not Out
  • Wynik: suma wszystkich liczb w Runs

Jak działa gra

W grze na boisku są zawsze 2 pałkarze. Pierwszy gracz jest domyślnie aktualnym pałkarzem, a drugi w cieście „wyłączonym”.

Gra składa się z „piłek”: każda piłka w meczu krykieta jest reprezentowana przez rzut kostką. Każdy rzut wykonuje inne polecenie:

  • 1,2,4 i 6 sprawiają, że pałkarz tyle punktów. Jeśli wyrzuci się 1, obecny pałkarz staje się pałką „wyłączoną”, a pałkarz „wyłączony” staje się prądem
  • 3 to „kropka”, co oznacza, że ​​nic się nie dzieje. Jest reprezentowany w Runssekcji jako a, .a wyniki 0. A 0nie może być użyte do jego przedstawienia.
  • 5 to furtka. Jeśli wyrzuci się 5, bieżący pałkarz zostaje „wyrzucony”, co oznacza, że ​​a /dodaje się do serii i od tego momentu pałkarz nie może już zdobywać punktów. Pałkarz jest następnie zamieniany na następnego pałkarza, który nie uderzył. Ta How Outsekcja to losowy wybór możliwych sposobów na wydostanie się:Bowled, LBW, Caught

Przykład furtki (jest to tylko dla jasności, nie jest to sposób, w jaki jest generowany)

player a is on 4,6,2,6,4
player b is on 6,4,2,6,6
player c hasn't batted
player a is current batter

WICKET!!!

player a is on 4,6,2,6,4,/
player b in on 6,4,2,6,6
player c is on NOTHING
player c is current batter

Co 6 piłek dwa pałki się zmieniają; obecny pałkarz staje się pałką „wyłączoną”, a pałkarz „wyłączony” staje się pałką bieżącą

Jeśli Runssekcja jest wypełniona (30 kulek), ciasto jest wyjęte, a How Outsekcja jest ustawiona na Retired. / Nie jest umieszczony na końcu Runspudełka.

Rzeczywiste wyzwanie (tak, to były zasady gry)

Wyzwanie polega na wygenerowaniu kompletnej tabeli (takiej jak na końcu) z podaniem listy nazwisk. Zawartość danych wyjściowych powinna zawierać tylko tabelę i / lub początkowe lub końcowe białe znaki.

Zasady

  • Standardowe luki są niedozwolone
  • Wszystkich 11 graczy powinno mieć coś w Runssekcji.
  • Może być tylko 1 gracz Not Out. Każdy inny gracz na emeryturze nie powinien mieć wyboru[Bowled, LBW, Caught]
  • Nazwy mogą mieć dowolną długość od 1 do 6, która pasuje do wyrażenia regularnego A-Za-z
  • Ostatnia linia w tabeli powinna być linią całkowitą (patrz przykład)
  • Nie musisz wyrównywać tekstu w tabeli w żaden sposób, ale separatory wierszy i kolumn muszą być wyrównane.

Przykład

Input:
['Fred', 'Sonya', 'David', 'Ben', 'Cody', 'Hazel', 'Nina', 'Kim', 'Cath', 'Lena', 'Will']
Output:
+------+------------------------------+---------+-----+
| Name | Runs                         | How Out |Total|
+------+------------------------------+---------+-----+
|Fred  |.662/                         | Caught  | 14  |
+------+------------------------------+---------+-----+
|Sonya |1164/                         | Caught  | 12  |
+------+------------------------------+---------+-----+
|David |/                             |   LBW   |  0  |
+------+------------------------------+---------+-----+
|Ben   |424/                          |   LBW   | 10  |
+------+------------------------------+---------+-----+
|Cody  |62/                           | Bowled  |  8  |
+------+------------------------------+---------+-----+
|Hazel |/                             |   LBW   |  0  |
+------+------------------------------+---------+-----+
|Nina  |161.6226166..44261442/        | Caught  | 64  |
+------+------------------------------+---------+-----+
|Kim   |11/                           | Caught  |  2  |
+------+------------------------------+---------+-----+
|Cath  |6.21/                         |   LBW   |  9  |
+------+------------------------------+---------+-----+
|Lena  |/                             | Bowled  |  0  |
+------+------------------------------+---------+-----+
|Will  |2                             | Not Out |  2  |
+------+------------------------------+---------+-----+
|               Total Runs                      | 121 |
+-----------------------------------------------+-----+
Cairney Coheringaahing
źródło
Piaskownica
caird coinheringaahing
Heh, grałem w podobny wariant tego zwanego „Hand cricket”.
całkowicie ludzki,
Co decyduje o zakończeniu gry? Czy dzieje się tak, gdy ciasto się wyrzuca i nie ma już nikogo, kto mógłby go zastąpić?
KSmarts,
@KSmarts Correct.
caird coinheringaahing
1
@JonathanAllan Tak, to nie jest dobry wymóg. Usunięto
caird coinheringaahing

Odpowiedzi:

2

Python 3 , 650 621 582 572 588 bajtów

from random import*
h=str
c=h.center
a='+'.join(map('-'.__mul__,[0,6,30,9,5,0]))+'\n'
b=lambda x,r=6:x.ljust(r,' ')
j=''.join
t=lambda a:sum(map(int,a[:-1].replace(*'.0')))
P=print
def s(i=30):
 while i:x=choice('12.4/6');yield x;i=('/'!=x)*~-i
def f(n,T=0):
 n=[*map(b,n)]
 P(a+f'| Name | Runs{" "*25}| How Out |Total|')
 for x in n[:-1]:S=j(s());T+=t(S);P(a,x,b(S,30),c(choice(['Bowled','LBW','Caught']),9),c(h(t(S)),5),sep='|',end='|\n')
 S=j(s());P(a,n[-1],b(S,30),' Not Out ',c(h(t(S)),5),sep='|',end='|\n');P(a+f'|{15*" "}Total Runs{15*" "}       |{c(h(T),5)}|\n+{47*"-"}+{5*"-"}+')

Wypróbuj online!

Cóż, minęło ponad 24 godziny i zajęło mi to około godziny, więc mam nadzieję, że nie jestem nikim FGITW i nie grałem w Pythona od dłuższego czasu, więc było fajnie (chociaż to jest za drugim razem odpowiedziałem na jedno z moich pytań długą odpowiedzią w języku Python)

Wyślij sugestie dotyczące golfa, Python nie jest moim najlepszym językiem do gry w golfa.

-68 bajtów dzięki FlipTack !

-8 bajtów dzięki Mr. Xcoder

+16 bajtów z powodu błędu

Cairney Coheringaahing
źródło
Na pierwszy rzut oka, widzę sporo Golfy ... 1) w jednym przypadku nadal używać printzamiast P. 2) summoże bezpośrednio wziąć mapobiekt, bez potrzeby konwertowania go na listę. 3) Zamiast pisać yield xdwa razy, dlaczego nie, yield xa potem przerwać, jeśli to konieczne? 4) T=0może być umieszczony w nagłówku funkcji. 5) W swojej ostatniej funkcji użyłeś kilku nowych linii, w których możesz po prostu użyć jednej linii ze średnikami, na przykład pierwsze trzy instrukcje, ostatnie trzy instrukcje i instrukcje w pętli for.
FlipTack,
@FlipTack Miłe golfa i dzięki!
caird coinheringaahing
Możesz sznacznie golfa ... def s(i=30):a potem while i:x=choice('12.4/6');yield x;i=('/'!=x)*~-i. Dzwonisz tylko o()raz, więc nie musisz nawet go deklarować, wystarczy użyć instrukcji bezpośrednio.
FlipTack,
To samo dotyczy b^^
FlipTack
@FlipTack Dodano golfa. Dzięki!
caird coinheringaahing
0

Węgiel drzewny , 277 255 bajtów

≔E¹¹⟦⟦⟧⁰S⟧θ≔⮌θηW⊖Lη«≔⊟ηι≔‽12.4/6ζ⊞υζ⊞§ι⁰ζ≔⎇⁼ζ/⁺²‽³⁼³⁰L§ι⁰ζ¿ζ§≔ι¹ζ⊞ηι¿⊖Lη¿⁼¬﹪Lυ⁶¬εF⟦⊟η⊟η⟧⊞ηκ»”|⁴B\[⎇⁻℅↧T`⁵·5KMK⟲M≦»→´⁶_⭆∨R▷↥l⁹KG…≦”Fθ«◨⊟ι⁷◨Σ§ι⁰¦³²§⪪”(3⪪⪫⧴πZJL:∨XI±URD↗Σ9⟦FZ∕↖l⪪”⁷⊟ι◧IΣE⊟ιΣκ⁶⸿⸿»”|QºWPD⟧zNφ[v?Π'vG”◧IΣEυΣι²⁸J±¹±¹FE¹³⁻²⁷⊗ι«B⁵⁵ιB⁴⁹ι¿‹ι²⁷«B³⁹ιB⁸ι

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

≔E¹¹⟦⟦⟧⁰S⟧θ

Wczytaj 11 nazw (dane wejściowe są elastyczne: JSON, spacja lub separacja nowego wiersza) i utwórz tablicę q11 bitew reprezentowanych przez ich kule (jako tablicę), status (jako liczbę całkowitą) i nazwę.

≔⮌θη

Utwórz odwróconą kopię bitew h. To reprezentuje pałkarzy, którzy nie zostali wyeliminowani. Ostatnie dwa elementy to wyłączeni i obecni pałkarze.

W⊖Lη«

Powtarzaj, dopóki dostępne są co najmniej dwa pałki.

≔⊟ηι

Wyodrębnij bieżące ciasto do i.

≔‽12.4/6ζ

Wygeneruj losową piłkę z.

⊞υζ

Dodaj go do ogólnej listy piłek, używając wstępnie zdefiniowanej pustej listy u.

⊞§ι⁰ζ

Dodaj go do kulek aktualnego pałkarza.

≔⎇⁼ζ/⁺²‽³⁼³⁰L§ι⁰ζ

Jeśli piłka jest a /, wygeneruj losowy status 2..4, w przeciwnym razie, jeśli jest to 30 piłka pałkarza, ustaw status na 1inny 0.

¿ζ§≔ι¹ζ⊞ηι

Jeśli pałkarz jest na zewnątrz, zapisz status pałkarza, w przeciwnym razie ponownie włóż pałkarz do pałki.

¿⊖Lθ¿⁼¬﹪ΣEηLκ⁶¬ζ

Jeśli pozostały co najmniej dwa pałkarze, a ciasto zostało wyrzucone, lub zagrano 6 piłek, wtedy ...

F⟦⊟η⊟η⟧⊞ηκ»

... zdejmij aktualnych pałkarzy i ułóż je w odwrotnej kolejności.

”|⁴B\[⎇⁻℅↧T`⁵·5KMK⟲M≦»→´⁶_⭆∨R▷↥l⁹KG…≦”

Wydrukuj nagłówek.

Fθ«

Pętla nad pałkarzami.

◨⊟ι⁷

Wydrukuj nazwę pałkarza.

◨Σ§ι⁰¦³²

Wydrukuj kule ciasta.

§⪪”(3⪪⪫⧴πZJL:∨XI±URD↗Σ9⟦FZ∕↖l⪪”⁷⊟ι

Wydrukuj status pałkarza, indeksując w łańcuch Not OutRetiredBowled Caught LBWpodzielony na podciągi o długości 7.

◧IΣE⊟ιΣκ⁶

Wydrukuj wynik pałkarza.

⸿⸿»

Przejdź na początek następnego wiersza, ale jeden.

”|QºWPD⟧zNφ[v?Π'vG”◧IΣEυΣι²⁸

Wydrukuj sumę.

J±¹±¹FE¹³⁻²⁷⊗ι«B⁵⁵ιB⁴⁹ι¿‹ι²⁷«B³⁹ιB⁸ι

Narysuj pola wokół wszystkiego.

Neil
źródło