Jetzt Dice Cricket spielen

12

Dice Cricket ist ein Spiel, das ich als Kind kennengelernt habe und seit Jahren als Zeitvertreib verwende. Ich konnte keine Wikipedia-Seite finden, daher erkläre ich die folgenden Regeln.

Würfel-Kricket-Regeln

Prämisse

Dice Cricket ist ein Spiel , ähnlich wie ein Spiel von Scoring Cricket , wie Sie es sehen , aber anstatt zu beobachten und Aufzeichnen des Ergebnisses, Sie rollen einen Würfel und Aufzeichnen des Ergebnisses.

Die Ergebnisse werden in einer Tabelle aufgezeichnet, die unten angezeigt wird.

Anzeige

Dice Cricket verwendet eine bestimmte Anzeige, um alle Informationen anzuzeigen, die gerade geschehen.

Die Tabelle enthält 11 Zeilen. Jede Reihe repräsentiert einen Teig. Das Layout der Zeile wird unten erläutert.

+------+------------------------------+---------+-----+
| Name |    Runs                      | How Out |Score|
+------+------------------------------+---------+-----+
  • Name: Der Name muss eine Zeichenfolge sein, die ausschließlich aus Groß- oder Kleinbuchstaben besteht
  • Runs: Ein Schlagmann kann 30 Bälle treffen. Jeder Ball kann einer sein 1 2 4 6 . /. Dies wird nachfolgend näher erläutert
  • How Out: So wie der Teig raus war. Kann einer sein vonBowled, LBW (Leg Before Wicket), Caught, Retired or Not Out
  • Punktzahl: Die Summe aller Zahlen in Runs

Wie das Spiel funktioniert

In einem Spiel befinden sich immer 2 Kämpfer auf dem Spielfeld. Der erste Spieler ist standardmäßig der aktuelle Schlagmann und der zweite der "aus" Schlagmann.

Ein Spiel besteht aus "Bällen": Jeder Ball in einem Cricketspiel wird durch einen Würfelwurf dargestellt. Jede Rolle führt einen anderen Befehl aus:

  • 1,2,4 und 6 sorgen dafür, dass der Teig so viele Punkte erzielt. Wenn 1 gewürfelt wird, wird der aktuelle Schlag zum "Aus" Schlag und der "Aus" Schlag wird zum aktuellen Schlag
  • 3 ist eine "Punktekugel", was bedeutet, dass nichts passiert. Es wird in der RunsSektion als .und mit 0 dargestellt. Es 0darf nicht mit A dargestellt werden.
  • 5 ist ein Wicket. Wenn 5 gewürfelt wird, ist der aktuelle Schlag "out". Dies bedeutet, dass a /zu den Läufen hinzugefügt wird und der Schlag von da an keine Läufe mehr erzielen kann. Der Schlagmann wird dann gegen den nächsten Schlagmann getauscht, der nicht geschlagen hat. Der How OutAbschnitt ist eine zufällige Auswahl der möglichen Auswege:Bowled, LBW, Caught

Beispiel für ein Wicket (dies dient nur der Übersichtlichkeit, es wird nicht so ausgegeben)

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

Alle 6 Bälle wechseln die beiden Schläger; Der aktuelle Teig wird zum "aus" Teig und der "aus" Teig wird zum aktuellen Teig

Wenn der RunsAbschnitt gefüllt ist (30 Bälle), ist der Teig leer und der How OutAbschnitt ist auf eingestellt Retired. A / steht nicht am Ende der RunsBox.

Tatsächliche Herausforderung (ja, all das waren die Spielregeln)

Ihre Herausforderung besteht darin, eine vollständige Tabelle (wie das Beispiel am Ende) mit einer Liste von Namen auszugeben. Der Inhalt der Ausgabe sollte nur die Tabelle und / oder führende oder nachfolgende Leerzeichen enthalten.

Regeln

  • Standardlücken sind nicht zulässig
  • Alle 11 Spieler sollten etwas in der RunsSektion haben.
  • Es kann nur 1 Spieler sein Not Out. Jeder andere Spieler, der nicht im Ruhestand ist, sollte keine Wahl haben[Bowled, LBW, Caught]
  • Die Namen können eine beliebige Länge zwischen 1 und 6 haben, die dem regulären Ausdruck entspricht A-Za-z
  • Die letzte Zeile in der Tabelle sollte die Gesamtzeile sein (siehe Beispiel)
  • Sie müssen den Text in der Tabelle in keiner Weise ausrichten, aber die Zeilen- und Spaltentrennzeichen müssen ausgerichtet sein.

Beispiel

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 |
+-----------------------------------------------+-----+
Caird Coinheringaahing
quelle
Sandbox
Caird Coinheringaahing
Heh, ich habe früher eine ähnliche Variante gespielt, die "Hand Cricket" genannt wird.
Totalhuman
Was bestimmt wann das Spiel endet? Ist es, wenn ein Schlagmann ausgefallen ist und niemand mehr übrig ist, der ihn ersetzt?
KSmarts
@KSmarts Richtig.
Caird Coinheringaahing
1
@ JonathanAllan Ja, das ist keine gute Voraussetzung. Entfernt
CAIRD coinheringaahing

Antworten:

2

Python 3 , 650 621 582 572 588 Bytes

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

Probieren Sie es online!

Nun, es ist schon über 24 Stunden her und ich habe ungefähr eine Stunde gebraucht, um hochzukommen, also hoffe ich, dass ich niemanden mehr verpasse und seit einiger Zeit nicht mehr in Python Golf gespielt habe das zweite Mal habe ich eine meiner eigenen Fragen mit einer langen Python-Antwort beantwortet)

Bitte zögern Sie nicht, Golf-Vorschläge zu posten, Python ist nicht meine beste Sprache zum Golfen.

-68 Bytes dank FlipTack !

-8 Bytes dank Mr. Xcoder

+16 Bytes aufgrund eines Fehlers

Caird Coinheringaahing
quelle
Auf den ersten Blick sehe ich einige Golfplätze ... 1) In einem Fall verwenden Sie immer noch printanstelle von P. 2) sumkann ein mapObjekt direkt aufnehmen , ohne es in eine Liste umwandeln zu müssen. 3) Anstatt yield xzweimal zu schreiben , warum nicht yield xund dann bei Bedarf pausieren? 4) T=0könnte in den Funktionsheader eingefügt werden. 5) In Ihrer letzten Funktion haben Sie mehrere Zeilenumbrüche verwendet, in denen Sie nur eine Zeile mit Semikolons verwenden konnten, z. B. die ersten drei Anweisungen, die letzten drei Anweisungen und die Anweisungen in der for-Schleife.
FlipTack
@FlipTack Schöne Golfplätze und vielen Dank!
Caird Coinheringaahing
Sie können serheblich Golf spielen ... def s(i=30):und dann while i:x=choice('12.4/6');yield x;i=('/'!=x)*~-i. Außerdem rufen Sie nur o()einmal auf, sodass Sie es nicht einmal deklarieren müssen. Verwenden Sie einfach die Anweisung direkt.
FlipTack
Gleiches gilt für b^^
FlipTack
@FlipTack Die Golfplätze wurden hinzugefügt. Vielen Dank!
Caird Coinheringaahing
0

Kohle , 277 255 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:

≔E¹¹⟦⟦⟧⁰S⟧θ

Lesen Sie die 11 Namen ein (Eingabe ist flexibel: JSON, durch Leerzeichen oder Zeilenvorschub getrennt) und erstellen Sie ein Array qvon 11 Battern, die durch ihre Bälle (als Array), Status (als Ganzzahl) und Namen dargestellt werden.

≔⮌θη

Erstellen Sie eine umgekehrte Kopie der Batters h. Dies ist die Darstellung der nicht ausgefallenen Batters. Die letzten beiden Elemente sind die Off- und Current-Batters.

W⊖Lη«

Wiederholen, solange mindestens zwei Batters verfügbar sind.

≔⊟ηι

Extrahieren Sie den aktuellen Teig zu i.

≔‽12.4/6ζ

Erzeugen Sie einen zufälligen Ball in z.

⊞υζ

Fügen Sie es mithilfe der vordefinierten leeren Liste zur Gesamtliste der Bälle hinzu u.

⊞§ι⁰ζ

Fügen Sie es zu den Bällen des aktuellen Teigs hinzu.

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

Wenn der Ball ein ist /, wird ein zufälliger Status generiert. 2..4Wenn dies der 30. Ball des Schlägers ist, wird der Status auf " 1Sonst" gesetzt 0.

¿ζ§≔ι¹ζ⊞ηι

Wenn der Teig leer ist, speichern Sie den Status des Teigs, andernfalls setzen Sie den Teig wieder ein.

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

Wenn noch mindestens zwei Batters übrig sind und der Teig ausgefallen ist oder 6 Bälle gespielt wurden, dann ...

F⟦⊟η⊟η⟧⊞ηκ»

... nehmen Sie die aus und aktuellen Batters und legen Sie sie in umgekehrter Reihenfolge zurück.

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

Drucken Sie die Kopfzeile.

Fθ«

Schlinge dich über die Zweige.

◨⊟ι⁷

Drucken Sie den Namen des Teigs.

◨Σ§ι⁰¦³²

Drucken Sie die Kugeln des Teigs.

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

Drucken Sie den Batteriestatus aus, indem Sie die Zeichenfolge indizieren, die Not OutRetiredBowled Caught LBWin Teilzeichenfolgen der Länge 7 unterteilt ist.

◧IΣE⊟ιΣκ⁶

Drucken Sie die Punktzahl des Teigs aus.

⸿⸿»

Gehen Sie zum Anfang der übernächsten Zeile.

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

Gesamtsumme drucken.

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

Zeichne Kästchen um alles.

Neil
quelle