Gioca una partita a Dice Cricket


12

Dice Cricket è un gioco che mi è stato presentato da bambino e da allora ho usato un modo per passare il tempo. Non sono riuscito a trovare una pagina di Wikipedia, quindi spiegherò le regole di seguito.

Dice Cricket Rules

Premessa

Dice Cricket è un gioco simile al punteggio di una partita di cricket mentre lo guardi ma invece di guardare e registrare il risultato, stai tirando un dado e registrando il risultato.

I risultati sono registrati in una tabella come mostrato in fondo.

Schermo

Dice Cricket utilizza un display specifico per mostrare tutte le informazioni che accadono.

La tabella ha 11 righe. Ogni riga rappresenta una pastella. Il layout della riga è spiegato di seguito.

+------+------------------------------+---------+-----+
| Name |    Runs                      | How Out |Score|
+------+------------------------------+---------+-----+
  • Nome: il nome deve essere una stringa composta interamente da lettere, maiuscole o minuscole
  • Esecuzioni: una pastella può affrontare 30 palline. Ogni palla può essere una delle 1 2 4 6 . /. Questo sarà spiegato più dettagliatamente di seguito
  • How Out: il modo in cui la pastella era fuori. Può essere uno qualsiasi diBowled, LBW (Leg Before Wicket), Caught, Retired or Not Out
  • Punteggio: la somma di tutti i numeri in Runs

Come funziona il gioco

In una partita, ci sono sempre 2 battitori in campo. Il primo giocatore è di default il battitore attuale e il secondo nel battitore "off".

Una partita è composta da "palle": ogni palla in una partita di cricket è rappresentata da un tiro di dadi. Ogni lancio esegue un comando diverso:

  • 1,2,4 e 6 rendono il punteggio della pastella così tanto. Se viene lanciato 1, il battitore corrente diventa il battitore "off" e il battitore "off" diventa la corrente
  • 3 è una "pallina a punti", nel senso che non accade nulla. È rappresentato nella Runssezione come a .e segna 0. A 0non può essere usato per rappresentarlo.
  • 5 è un wicket. Se viene lanciato 5, il battitore corrente è "fuori", ciò significa che a /viene aggiunto a i punti e da quel momento in poi il battitore non può più segnare punti. Il battitore viene quindi scambiato con il battitore successivo che non ha battuto. La How Outsezione è una scelta casuale dei possibili modi per uscire:Bowled, LBW, Caught

Esempio per un wicket (questo è solo per chiarezza, non è così che viene prodotto)

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

Ogni 6 palle, i due battitori cambiano; il battitore corrente diventa il battitore "off" e il battitore "off" diventa il battitore corrente

Se la Runssezione è piena (30 palline), la pastella è fuori e la How Outsezione è impostata su Retired. A / non viene posizionato alla fine della Runsscatola.

Sfida attuale (sì, tutto ciò che era regole del gioco)

La tua sfida è quella di produrre una tabella completa (come nell'esempio alla fine), dato un elenco di nomi. Il contenuto dell'output deve contenere solo la tabella e / o gli spazi bianchi iniziali o finali.

Regole

  • Le scappatoie standard non sono ammesse
  • Tutti e 11 i giocatori dovrebbero avere qualcosa nella Runssezione.
  • Può essere solo 1 giocatore Not Out. Ogni altro giocatore non in pensione dovrebbe essere fuori dalla scelta di[Bowled, LBW, Caught]
  • I nomi possono avere una lunghezza compresa tra 1 e 6 corrispondente alla regex A-Za-z
  • L'ultima riga nella tabella dovrebbe essere la riga totale (vedi esempio)
  • Non è necessario allineare il testo nella tabella in alcun modo, ma i separatori di riga e colonna devono essere allineati.

Esempio

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 |
+-----------------------------------------------+-----+


Heh, suonavo una variante simile di questo "Hand cricket".
totalmente umano il

Cosa determina quando finisce il gioco? È quando un battitore è fuori e non c'è più nessuno che lo sostituisca?
KSmarts,

@KSmarts Correct.
caird coinheringaahing

1
@JonathanAllan Sì, non è un buon requisito. Rimosso
caird coinheringaahing il

Risposte:


2

Python 3 , 650 621 582 572 588 byte

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*"-"}+')

Provalo online!

Beh, sono passate più di 24 ore e mi ci sono voluti circa un'ora per montare, quindi spero di non aver mai visto nessuno, e non gioco a Python da un po ', quindi è stato divertente (anche se questo è la seconda volta che ho risposto a una delle mie domande con una lunga risposta Python)

Sentiti libero di pubblicare suggerimenti per il golf, Python non è la mia lingua migliore per giocare a golf.

-68 byte grazie a FlipTack !

-8 byte grazie a Mr. Xcoder

+16 byte a causa di un bug


A prima vista, riesco a vedere un bel po 'di golf ... 1) In un caso si usa ancora printinvece di P. 2) sumpuò prendere direttamente un mapoggetto, non è necessario convertirlo in un elenco. 3) Invece di scrivere yield xdue volte, perché no yield xe poi rompere se necessario? 4) T=0potrebbe essere inserito nell'intestazione della funzione. 5) Nella tua ultima funzione, hai usato diverse nuove righe in cui puoi usare solo una riga con punti e virgola, ad esempio le prime tre istruzioni, le ultime tre istruzioni e le istruzioni nel ciclo for.
FlipTack il

@FlipTack Nice golfs, e grazie!
caird coinheringaahing

Puoi giocare a golf sconsiderevolmente ... def s(i=30):e poi while i:x=choice('12.4/6');yield x;i=('/'!=x)*~-i. Inoltre, chiami solo o()una volta, quindi non è nemmeno necessario dichiararlo, basta usare l'istruzione direttamente.
FlipTack il

Lo stesso vale per b^^
FlipTack il

@FlipTack Aggiunti i golf. Grazie!
caird coinheringaahing

0

Carbone , 277 255 byte

≔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⁸ι

Provalo online! Il collegamento è alla versione dettagliata del codice. Spiegazione:

≔E¹¹⟦⟦⟧⁰S⟧θ

Leggi gli 11 nomi (l'input è flessibile: JSON, spazio separato o newline separati) e crea un array qdi 11 battitori, rappresentati dalle loro sfere (come un array), dallo stato (come un numero intero) e dal nome.

≔⮌θη

Crea una copia invertita dei battitori h. Questo rappresenta i battitori che non sono fuori. Gli ultimi due elementi sono i battitori off e attuali.

W⊖Lη«

Ripeti finché sono disponibili almeno due pastelle.

≔⊟ηι

Estrarre la pastella corrente su i.

≔‽12.4/6ζ

Genera una palla a caso z.

⊞υζ

Aggiungilo all'elenco generale delle palline usando l'elenco vuoto predefinito u.

⊞§ι⁰ζ

Aggiungilo alle palline della pastella corrente.

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

Se la palla è a /, quindi genera uno stato casuale 2..4, altrimenti se questa è la 30a palla del battitore, imposta lo stato su 1altrimenti 0.

¿ζ§≔ι¹ζ⊞ηι

Se la pastella è fuori, quindi memorizza lo stato della pastella, altrimenti rimetti la pastella a pipistrello.

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

Se sono rimasti almeno due battitori e il battitore era fuori xo 6 palle sono state giocate, quindi ...

F⟦⊟η⊟η⟧⊞ηκ»

... togli le pastelle correnti e quelle correnti e rimettile nell'ordine inverso.

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

Stampa l'intestazione.

Fθ«

Passa sopra i battitori.

◨⊟ι⁷

Stampa il nome della pastella.

◨Σ§ι⁰¦³²

Stampa le palline della pastella.

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

Stampa lo stato del battitore indicizzandolo nella stringa Not OutRetiredBowled Caught LBWdivisa in sottostringhe di lunghezza 7.

◧IΣE⊟ιΣκ⁶

Stampa il punteggio della pastella.

⸿⸿»

Passa all'inizio della riga successiva, tranne una.

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

Stampa il totale.

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

Disegna scatole attorno a tutto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.