サイコロクリケットのゲームをプレイする


12

サイコロクリケットは、私が子供の頃に紹介されたゲームであり、それ以来何年もの間、時間を渡す方法として使用されてきました。ウィキペディアのページが見つからなかったため、以下のルールについて説明します。

サイコロクリケットルール

前提

ダイスクリケットの試合得点に似たゲームでクリケットをあなたがそれを見るようではなく、より見て、その結果を記録し、あなたがしているダイスをロールし、結果を記録します。

結果は、下部に表示される表に記録されます。

表示

Dice Cricketは特定のディスプレイを使用して、発生しているすべての情報を表示します。

テーブルには11行あります。各行はバッターを表します。行のレイアウトを以下に説明します。

+------+------------------------------+---------+-----+
| Name |    Runs                      | How Out |Score|
+------+------------------------------+---------+-----+
  • 名前:名前は、大文字または小文字の文字のみで構成される文字列である必要があります
  • ラン:バッターは30個のボールに直面できます。各ボールはのいずれかです1 2 4 6 . /。これについては、以下で詳しく説明します
  • ハウアウト:バッターが出ていた方法。のいずれかBowled, LBW (Leg Before Wicket), Caught, Retired or Not Out
  • スコア:のすべての数値の合計 Runs

ゲームの仕組み

ゲームでは、ピッチには常に2人の打者がいます。最初のプレーヤーはデフォルトで現在のバッターで、2番目のプレーヤーは「オフ」バッターです。

ゲームは「ボール」で構成されています。クリケットの試合の各ボールはサイコロで表されます。各ロールは異なるコマンドを実行します。

  • 1、2、4、6は打者のスコアを大きくします。1がロールされた場合、現在の打者は「オフ」打者になり、「オフ」打者は現在の打者になります
  • 3は「ドットボール」で、何も起こらないことを意味します。このRunsセクションでは、a .およびスコア0 として表され0ます。Aを使用して表すことはできません。
  • 5は改札です。5が出た場合、現在の打者は「アウト」になります。これは、a /がランに追加され、それ以降は打者がランを記録できなくなることを意味します。その後、打者は打たなかった次の打者と交換されます。How Outセクションは、アウト取得する可能性のある方法のランダムな選択です。Bowled, LBW, Caught

改札の例(これは単に明確にするためであり、出力方法ではありません)

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

6ボールごとに、2人の打者が切り替わります。現在の打者は「オフ」打者になり、「オフ」の打者は現在打者になります

場合Runs部は(30個のボール)充填され、打者が出され、How Outセクションは次のように設定されていますRetired。A / Runsボックスの最後に配置されていません

実際の課題(はい、それがゲームのルールでした)

あなたの課題は、名前のリストを指定して、完成したテーブルを出力することです(最後の例のように)。出力の内容には、テーブルおよび/または先頭または末尾の空白のみを含める必要があります。

ルール

  • 標準の抜け穴は許可されていません
  • 11人のプレーヤー全員がRunsセクションに何かを持っている必要があります。
  • できるのは1人のプレイヤーのみNot Outです。引退していない他のすべてのプレーヤーは、[Bowled, LBW, Caught]
  • 名前は、正規表現に一致する1〜6の任意の長さにすることができます A-Za-z
  • 表の最終行は合計行である必要があります(例を参照)
  • 何らかの方法でテーブル内のテキストを揃える必要はありませんが、行と列の区切りを揃える必要があります。

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


へえ、私はこれと同じような「ハンドクリケット」と呼ばれる変種をプレイしていました。
完全に人間の

ゲームの終了は何によって決まりますか?打者が出て、彼に代わる人が残っていないときですか?
KSmarts

@KSmarts正しい。
コイアリンガーアーイング

1
@JonathanAllanええ、それは良い要件ではありません。削除済み
ケアニアンコイリンガリング

回答:


2

Pythonの3650の 621 582 572 588バイト

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

オンラインでお試しください!

まあ、それは24時間以上であり、これは私が鞭を打つのに約1時間かかりましたので、私は誰もFGITWではないことを願っています、そして私はしばらくPythonでゴルフをしていないので、これは楽しかったです(これは2回目は、Pythonの長い回答で自分の質問の1つに回答しました)

気軽にゴルフの提案を投稿してください。Pythonはゴルフに最適な言語ではありません。

FlipTackのおかげで-68バイト!

Xcoder氏のおかげで-8バイト

バグが原因で+16バイト


一見すると、私はかなりの数のゴルフを見ることができます... 1)ある例では、あなたはまだのprint代わりに使用していますP。2)オブジェクトsumを直接取得できmapます。リストに変換する必要はありません。3)むしろ書くよりもyield x、なぜ、二回yield xその後、必要に応じて壊れますか?4)T=0関数ヘッダー内に配置できます。5)最後の関数では、最初の3つのステートメント、最後の3つのステートメント、forループ内のステートメントなど、セミコロンで1行だけを使用できる複数の改行を使用しました。
FlipTack

@FlipTack素敵なゴルフ、そしてありがとう!
コイナーリンガーをケア

あなたはsかなりゴルフをすることができます... def s(i=30):そして while i:x=choice('12.4/6');yield x;i=('/'!=x)*~-i。また、呼び出すのはo()1回だけなので、宣言する必要もなく、ステートメントを直接使用するだけです。
FlipTack

同じことがb^^にも当てはまります
FlipTack

@FlipTackゴルフを追加しました。ありがとう!
コイナーリンガーをケア

0

277 255バイト

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

オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:

≔E¹¹⟦⟦⟧⁰S⟧θ

11個の名前(入力は柔軟:JSON、スペース区切り、または改行区切り)を読み取り、qボール(配列として)、ステータス(整数)および名前で表される11個のバッターの配列を作成します。

≔⮌θη

打者の逆コピーを作成しますh。これは、出ていない打者を表します。最後の2つの要素は、オフと現在のバッターです。

W⊖Lη«

少なくとも2つのバッターが利用できる間、繰り返します。

≔⊟ηι

現在のバッターをに抽出しiます。

≔‽12.4/6ζ

でランダムなボールを生成しzます。

⊞υζ

定義済みの空のリストを使用して、ボールの全体リストに追加しますu

⊞§ι⁰ζ

現在の打者のボールに追加します。

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

ボールがa /である場合、ランダムなステータスを生成します2..4。そうでない場合、これがバッターの30番目のボールである場合は、ステータスを1otherに設定します0

¿ζ§≔ι¹ζ⊞ηι

打者が出ている場合は、打者の状態を保存し、そうでなければ打者をバットに戻します。

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

少なくとも2人の打者が残っていて、その打者が出ていた場合、または6ボールがプレイされた場合、...

F⟦⊟η⊟η⟧⊞ηκ»

...オフのバッターと現在のバッターを取り出し、逆の順序で戻します。

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

ヘッダーを印刷します。

Fθ«

バッターをループします。

◨⊟ι⁷

バッターの名前を印刷します。

◨Σ§ι⁰¦³²

バッターのボールを印刷します。

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

Not OutRetiredBowled Caught LBW長さ7の部分文字列に分割された文字列にインデックスを付けて、バッターのステータスを出力します。

◧IΣE⊟ιΣκ⁶

打者のスコアを印刷します。

⸿⸿»

次の行の1つ前に移動します。

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

合計を印刷します。

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

すべての周りにボックスを描きます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.