Zar Kriket oyunu oyna


12

Dice Cricket, çocukken tanıtıldığım ve o zamandan beri yıllarca zaman geçirmenin bir yolu olarak kullandığım bir oyundur. Wikipedia sayfası bulamadığım için aşağıdaki kuralları açıklayacağım.

Zar Kriket Kuralları

Öncül

Zar Kriket, kriket oyununu izlediğiniz gibi puanlamaya benzer bir oyundur, ancak sonucu izlemek ve kaydetmek yerine , bir kalıp yuvarlar ve sonucu kaydedersiniz.

Sonuçlar, aşağıda gösterildiği gibi bir tabloya kaydedilir.

Görüntüle

Zar Kriket gerçekleşen tüm bilgileri göstermek için belirli bir ekran kullanır.

Tabloda 11 satır vardır. Her sıra bir hamuru temsil eder. Satırın düzeni aşağıda açıklanmaktadır.

+------+------------------------------+---------+-----+
| Name |    Runs                      | How Out |Score|
+------+------------------------------+---------+-----+
  • Ad: Ad, tamamen harflerden oluşan bir dize olmalıdır, büyük veya küçük harf olmalıdır
  • Koşular: Bir meyilli 30 topla karşılaşabilir. Her top şunlardan biri olabilir 1 2 4 6 . /. Bu aşağıda daha ayrıntılı olarak açıklanacaktır
  • Nasıl Yapılır: Hamurun çıkış şekli. Herhangi biri olabilirBowled, LBW (Leg Before Wicket), Caught, Retired or Not Out
  • Puan: içindeki tüm sayıların toplamı Runs

Oyun Nasıl Çalışır

Bir oyunda her zaman sahada 2 hamle vardır. İlk oyuncu varsayılan olarak geçerli hamur ve ikincisi "kapalı" vuruştadır.

Bir oyun "topları" oluşur: bir kriket maç her top bir zar rulo ile temsil edilir. Her rulo farklı bir komut yapar:

  • 1,2,4 ve 6, meyilli puanı o kadar fazla yapar. 1 yuvarlanırsa, geçerli hamur "kapalı" meyilli olur ve "kapalı" meyilli akım olur
  • 3 "nokta topu" dur, yani hiçbir şey olmuyor. Bu Runsbölümde a ile temsil edilir .ve 0 puanlar. A 0onu temsil etmek için kullanılamaz.
  • 5 bir küçük kapıdır. 5 yuvarlanırsa, geçerli hamur "dışarı" dır, Bu, çalışmalara a /eklendiği ve bundan sonra meyilli artık koşu yapamayacağı anlamına gelir . Ardından hamur hamuru olmayan bir sonraki hamur ile değiştirilir. How OutBölüm çıkmak mümkün yollardan rastgele bir seçimdir:Bowled, LBW, Caught

Bir küçük kapı örneği (bu sadece netlik içindir, çıktısı bu değildir)

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

Her 6 topta iki hamle değişir; geçerli hamur "kapalı" hamur olur ve "kapalı" hamur geçerli hamur olur

Eğer Runsbölüm (30 topları) doldurulur, vurucu dışında ve How Outbölüm ayarlanır Retired. Bir / değildir sonuna yerleştirilir Runskutu.

Gerçek Mücadele (evet, oyunun kuralları buydu)

Zorluğunuz, isimlerin bir listesi verildiğinde, tamamlanmış bir tablo (sondaki örnek gibi) çıkarmaktır. Çıktının içeriği yalnızca tablo ve / veya öndeki veya sondaki boşluk içermelidir.

kurallar

  • Standart boşluklara izin verilmiyor
  • 11 oyuncunun da Runsbölümünde bir şey olmalı .
  • Sadece 1 oyuncu olabilir Not Out. Emekli olmayan diğer tüm oyuncular,[Bowled, LBW, Caught]
  • İsimler normal ifadeyle eşleşen 1 ile 6 arasında herhangi bir uzunlukta olabilir A-Za-z
  • Tablodaki son satır toplam satır olmalıdır (örneğe bakın)
  • Tablodaki metni hiçbir şekilde hizalamanız gerekmez, ancak satır ve sütun ayırıcılar hizalanmalıdır.

Misal

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, buna benzer bir el varyantı oynardım "El kriket".
totallyhuman

Oyun ne zaman biter? Bir meyilli dışarıdaysa ve onun yerini alacak kimse kalmaz mı?
KSmarts

@KSmarts Doğru.
coinheringaahing Caird

1
@JonathanAllan Evet, bu iyi bir gereklilik değil. Kaldırıldı
caird coinheringaahing

Yanıtlar:


2

Python 3 , 650 621 582 572 588 bayt

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

Çevrimiçi deneyin!

Peki, 24 saatten fazla sürdü ve bu beni kırmak için bir saat sürdü, bu yüzden umarım kimse FGITW'ing değilim ve bir süredir Python'da golf oynamadım, bu yüzden eğlenceliydi ( ikinci kez kendi sorularımdan birini uzun bir Python cevabı ile cevapladım)

Lütfen golf önerileri göndermek için çekinmeyin, Python golf için en iyi dilim değil.

FlipTack sayesinde -68 bayt !

Bay Xcoder sayesinde -8 bayt

Bir hata nedeniyle +16 bayt


İlk bakışta, birkaç golf görebiliyorum ... 1) Bir örnek printyerine hala kullanıyorsunuz P. 2) sumbir mapnesneyi doğrudan alabilir , bir listeye dönüştürmeye gerek yoktur. 3) yerine yazılı yield xiki kez, neden olmasın yield xve ardından gerekirse kırmak? 4) T=0fonksiyon başlığının içine yerleştirilebilir. 5) Son işlevinizde, noktalı virgülle yalnızca bir satır kullanabileceğiniz birkaç yeni satır kullandınız, örneğin ilk üç ifade, son üç ifade ve for döngüsündeki ifadeler.
FlipTack

@FlipTack Güzel golfler ve teşekkürler!
coinheringaahing Caird

Önemli sölçüde golf oynayabilirsiniz ... def s(i=30):ve sonra while i:x=choice('12.4/6');yield x;i=('/'!=x)*~-i. Ayrıca, sadece bir o()kez ararsınız, bu yüzden beyan etmeye bile gerek yoktur, sadece ifadeyi doğrudan kullanın.
FlipTack

Aynı şey b^^
FlipTack

@FlipTack Golfleri ekledi. Teşekkürler!
coinheringaahing Caird

0

Kömür , 277255 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Açıklama:

≔E¹¹⟦⟦⟧⁰S⟧θ

11 ismi okuyun (girdi esnektir: JSON, boşlukla ayrılmış veya satırsonu ayrılmış) ve qtoplarıyla (dizi olarak), durumuyla (tamsayı olarak) ve adıyla temsil edilen 11 meyilli bir dizi oluşturun .

≔⮌θη

Hamurların ters kopyasını oluşturun h. Bu, dışarıda olmayan hamurları temsil eder. Son iki öğe, kapalı ve mevcut pillerdir.

W⊖Lη«

En az iki hamur varken tekrarlayın.

≔⊟ηι

Geçerli hamuru konumuna ayıklayın i.

≔‽12.4/6ζ

Rastgele bir top üret z.

⊞υζ

Önceden tanımlanmış boş listeyi kullanarak topların genel listesine ekleyin u.

⊞§ι⁰ζ

Mevcut meyvenin toplarına ekleyin.

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

Top bir ise /, o zaman rastgele bir durum oluşturun 2..4, aksi takdirde bu, oyuncunun 30. topuysa, durumu 1başka bir şekilde ayarlayın 0.

¿ζ§≔ι¹ζ⊞ηι

Hamur kapalıysa, hamuru durumunu saklayın, aksi takdirde hamuru tekrar batıra koyun.

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

En az iki hamur kaldıysa ve meyilli dışarıdaysa veya 6 top oynandı, o zaman ...

F⟦⊟η⊟η⟧⊞ηκ»

... kapalı ve mevcut hamurları alıp ters sırayla geri koyun.

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

Başlığı yazdırın.

Fθ«

Meyvelerin üzerinden geçin.

◨⊟ι⁷

Hamurun adını yazdırın.

◨Σ§ι⁰¦³²

Meyilli topları yazdırın.

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

Not OutRetiredBowled Caught LBWUzunluğun alt dizelerine bölünmüş dizeye dizine ekleyerek meyilli durumunu yazdırın .

◧IΣE⊟ιΣκ⁶

Meyilli puanı yazdırın.

⸿⸿»

Bir sonraki satırın başına gider.

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

Toplamı yazdırın.

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

Her şeyin etrafına kutular çizin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.