Mainkan game Dice Cricket

12

Dice Cricket adalah permainan yang saya perkenalkan sejak kecil dan telah digunakan sebagai cara untuk menghabiskan waktu bertahun-tahun sejak itu. Saya tidak dapat menemukan halaman Wikipedia jadi saya akan menjelaskan aturan di bawah ini.

Aturan Kriket Dadu

Premis

Dice Cricket adalah permainan yang mirip dengan mencetak permainan kriket saat Anda menontonnya, alih-alih menonton dan merekam hasilnya, Anda menggulirkan dadu dan merekam hasilnya.

Hasilnya dicatat dalam tabel seperti yang ditampilkan di bagian bawah.

Tampilan

Dice Cricket menggunakan tampilan khusus untuk menunjukkan semua informasi yang terjadi.

Tabel memiliki 11 baris. Setiap baris mewakili adonan. Tata letak baris dijelaskan di bawah ini.

+------+------------------------------+---------+-----+
| Name |    Runs                      | How Out |Score|
+------+------------------------------+---------+-----+
  • Nama: Nama harus berupa string yang seluruhnya terdiri dari huruf, huruf besar atau kecil
  • Berlari: Sebuah adonan dapat menghadapi 30 bola. Setiap bola bisa menjadi salah satunya 1 2 4 6 . /. Ini akan dijelaskan secara lebih rinci di bawah ini
  • How Out: Cara adonan keluar. Bisa dari siapa sajaBowled, LBW (Leg Before Wicket), Caught, Retired or Not Out
  • Nilai: Jumlah semua angka dalam Runs

Cara Kerja Game

Dalam sebuah permainan, selalu ada 2 batters di atas lapangan. Pemain pertama secara default adonan saat ini dan yang kedua di adonan "off".

Sebuah permainan terdiri dari "bola": setiap bola dalam pertandingan kriket diwakili oleh dadu roll. Setiap gulungan melakukan perintah yang berbeda:

  • 1,2,4 dan 6 membuat skor adonan sebanyak itu. Jika 1 digulung, adonan saat ini menjadi adonan "off" dan adonan "off" menjadi arus
  • 3 adalah "bola dot", artinya tidak ada yang terjadi. Ini diwakili dalam Runsbagian sebagai a .dan skor 0. A 0tidak dapat digunakan untuk mewakilinya.
  • 5 adalah gawang. Jika 5 digulung, adonan saat ini "keluar", ini berarti bahwa a /ditambahkan ke run dan sejak saat itu, adonan tidak dapat mencetak run lagi. Adonan kemudian ditukar dengan adonan berikutnya yang belum bertempur. The How OutBagian adalah pilihan acak dari cara yang mungkin untuk keluar:Bowled, LBW, Caught

Contoh untuk gawang (ini hanya untuk kejelasan, ini bukan bagaimana yang dihasilkan)

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

Setiap 6 bola, dua batter beralih; adonan saat ini menjadi adonan "off" dan adonan "off" menjadi adonan saat ini

Jika Runsbagian diisi (30 bola), adonan keluar dan How Outbagian diatur ke Retired. A / tidak ditempatkan di ujung Runskotak.

Tantangan Aktual (ya semua itu aturan main)

Tantangan Anda adalah menampilkan tabel yang lengkap (seperti contoh di akhir), diberi daftar nama. Isi dari output harus hanya berisi tabel dan / atau spasi putih depan atau belakang.

Aturan

  • Celah standar tidak diijinkan
  • Semua 11 pemain harus memiliki sesuatu di Runsbagian tersebut.
  • Hanya 1 pemain yang bisa Not Out. Setiap pemain yang tidak pensiun harus keluar dari pilihan[Bowled, LBW, Caught]
  • Nama bisa panjang antara 1 dan 6 yang cocok dengan regex A-Za-z
  • Baris terakhir dalam tabel harus menjadi garis total (lihat contoh)
  • Anda tidak perlu menyelaraskan teks dalam tabel dengan cara apa pun, tetapi pemisah baris dan kolom harus disejajarkan.

Contoh

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
sumber
Sandbox
caird coinheringaahing
Heh, saya dulu memainkan varian serupa yang disebut "Hand cricket".
totallyhuman
Apa yang menentukan kapan game berakhir? Apakah ketika adonan keluar dan tidak ada yang tersisa untuk menggantikannya?
KSmarts
@KSmarts Benar.
caird coinheringaahing
1
@ JonathanAllan Ya, itu bukan persyaratan yang baik. Dihapus
caird coinheringaahing

Jawaban:

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

Cobalah online!

Yah, sudah lebih dari 24 jam dan ini membuat saya sekitar satu jam untuk menyiapkan, jadi saya harap saya tidak MENYENANGKAN siapa pun, dan saya belum bermain golf dengan Python dalam beberapa saat, jadi ini menyenangkan (walaupun ini menyenangkan kedua kalinya saya telah menjawab salah satu pertanyaan saya sendiri dengan jawaban Python panjang)

Jangan ragu untuk mengirim saran golf, Python bukan bahasa terbaik saya untuk bermain golf.

-68 byte berkat FlipTack !

-8 byte terima kasih kepada Tn. Xcoder

+16 byte karena bug

caird coinheringaahing
sumber
Sekilas, saya bisa melihat beberapa golf ... 1) Dalam satu contoh Anda masih menggunakan printsebagai gantinya P. 2) sumdapat langsung mengambil mapobjek, tidak perlu mengubahnya ke daftar. 3) Daripada menulis yield xdua kali, mengapa tidak yield xdan kemudian istirahat jika perlu? 4) T=0dapat ditempatkan di dalam header fungsi. 5) Dalam fungsi terakhir Anda, Anda telah menggunakan beberapa baris baru di mana Anda bisa menggunakan satu baris dengan titik koma, misalnya tiga pernyataan pertama, tiga pernyataan terakhir, dan pernyataan dalam for loop.
FlipTack
@FlipTack Golf yang bagus, dan terima kasih!
caird coinheringaahing
Anda bisa bermain golf ssangat ... def s(i=30):dan kemudian while i:x=choice('12.4/6');yield x;i=('/'!=x)*~-i. Juga, Anda hanya menelepon o()sekali, jadi tidak perlu menyatakannya, cukup gunakan pernyataan itu secara langsung.
FlipTack
Hal yang sama berlaku untuk b^^
FlipTack
@FlipTack Menambahkan golf. Terima kasih!
caird coinheringaahing
0

Arang , 277.225 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⁸ι

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

≔E¹¹⟦⟦⟧⁰S⟧θ

Baca dalam 11 nama (input fleksibel: JSON, spasi terpisah, atau baris baru dipisahkan) dan buat larik q11 batter, diwakili oleh bola mereka (sebagai larik), status (sebagai bilangan bulat) dan nama.

≔⮌θη

Buat salinan terbalik dari batter h. Ini mewakili batter yang tidak keluar. Dua elemen terakhir adalah batter off dan current.

W⊖Lη«

Ulangi sementara setidaknya ada dua batter tersedia.

≔⊟ηι

Ekstrak adonan saat ini ke i.

≔‽12.4/6ζ

Hasilkan bola acak di z.

⊞υζ

Tambahkan ke daftar keseluruhan bola menggunakan daftar kosong yang telah ditentukan u.

⊞§ι⁰ζ

Tambahkan ke bola adonan saat ini.

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

Jika bola adalah a /, maka hasilkan status acak 2..4, sebaliknya jika ini adalah bola ke-30 adonan maka atur status ke 1sebaliknya 0.

¿ζ§≔ι¹ζ⊞ηι

Jika adonan habis maka simpan status adonan jika tidak, masukkan kembali adonan ke bat.

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

Jika setidaknya ada dua batter yang tersisa, dan adonan habis atau 6 bola telah dimainkan, maka ...

F⟦⊟η⊟η⟧⊞ηκ»

... lepaskan batter off dan saat ini dan kembalikan ke urutan terbalik.

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

Cetak tajuk.

Fθ«

Loop di atas batter.

◨⊟ι⁷

Cetak nama adonan.

◨Σ§ι⁰¦³²

Cetak bola adonan.

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

Cetak status adonan dengan mengindeks ke dalam string yang Not OutRetiredBowled Caught LBWdibagi menjadi substring dengan panjang 7.

◧IΣE⊟ιΣκ⁶

Cetak skor adonan.

⸿⸿»

Pindah ke awal baris berikutnya kecuali satu.

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

Cetak totalnya.

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

Gambar kotak di sekitar semuanya.

Neil
sumber