주사위 크리켓 게임


12

Dice Cricket은 제가 어렸을 때 소개 된 게임으로 몇 년 동안 시간을 ​​보내는 방법으로 사용되었습니다. Wikipedia 페이지를 찾을 수 없으므로 아래 규칙을 설명하겠습니다.

주사위 크리켓 규칙

전제

주사위 크리켓의 게임 점수와 유사한 게임이다 크리켓을 당신이 그것을 보면서 오히려 이상 시청 하고 결과를 기록, 당신이 주사위를 압연 하고 결과를 기록.

결과는 하단에 표시된대로 테이블에 기록됩니다.

디스플레이

주사위 크리켓은 특정 디스플레이를 사용하여 발생하는 모든 정보를 보여줍니다.

테이블에는 11 개의 행이 있습니다. 각 행은 타자를 나타냅니다. 행의 레이아웃은 아래에 설명되어 있습니다.

+------+------------------------------+---------+-----+
| Name |    Runs                      | How Out |Score|
+------+------------------------------+---------+-----+
  • 이름 : 이름은 문자, 대문자 또는 소문자로 구성된 문자열이어야합니다.
  • 타자 : 타자는 30 볼을 마주 할 수있다. 각 공은 다음 중 하나 일 수 있습니다 1 2 4 6 . /. 이에 대해서는 아래에서 더 자세히 설명합니다.
  • How Out : 반죽이 나간 방식. 중 하나 일 수 있습니다Bowled, LBW (Leg Before Wicket), Caught, Retired or Not Out
  • 점수 : 모든 숫자의 합 Runs

게임의 작동 방식

경기에서는 항상 2 개의 타자가 있습니다. 첫 번째 플레이어는 기본적으로 현재 타자이고 두 번째 플레이어는 "끄기"타자입니다.

게임은 "공"으로 구성됩니다. 크리켓 경기의 각 공은 주사위 롤로 표시됩니다. 각 롤은 다른 명령을 수행합니다.

  • 1, 2, 4 및 6은 타자 점수를 그 정도로 만듭니다. 1을 굴리면 현재 타자가 "off"타자가되고 "off"타자가 전류가됩니다.
  • 3은 "도트 볼"로 아무 일도 일어나지 않음을 의미합니다. 이 Runs섹션에는 a로 표시 .되고 점수는 0입니다. A 0는이를 나타내는 데 사용될 수 없습니다.
  • 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 개의 타자가 바뀝니다. 현재 타자는 "off"타자가되고 "off"타자는 현재 타자가됩니다.

상기 중간 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 |
+-----------------------------------------------+-----+


Heh, 나는 "Hand cricket"이라는 이와 유사한 변형을 사용했습니다.
완전히 인간적인

게임이 언제 끝나는가? 타자가 나오고 그를 대신 할 사람이 아무도 없을 때입니까?
KSmarts

@KSmarts 수정.
caird coinheringaahing

1
@JonathanAllan 그래, 좋은 요구 사항은 아니다. 제거
caird coinheringaahing

답변:


2

파이썬 3 , 650 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은 골프를위한 최고의 언어가 아닙니다.

FlipTack 덕분에 -68 바이트 !

Mr. Xcoder 덕분에 -8 바이트

버그로 인해 +16 바이트


언뜻보기에, 나는 당신이 여전히 사용하는 하나 개의 인스턴스에서 꽤 많은 골프를 친다 ... 1) 볼 수 있습니다 print대신을 P. 2) sum직접 map객체를 취할 수 있으므로 목록으로 변환 할 필요가 없습니다. 3)보다는 서면 yield x두 번, 왜 안 yield x다음 필요한 경우 휴식? 4) T=0기능 헤더 안에 배치 할 수 있습니다. 5) 마지막 함수에서 세미콜론과 함께 한 줄을 사용할 수있는 몇 가지 줄 바꿈을 사용했습니다 (예 : 처음 세 문, 마지막 세 문 및 for 루프의 문).
FlipTack

@FlipTack 멋진 골프, 그리고 감사합니다!
caird coinheringaahing

당신은 s상당히 골프를 할 수 있습니다 ... def s(i=30):그리고 while i:x=choice('12.4/6');yield x;i=('/'!=x)*~-i. 또한 o()한 번만 호출 하므로 선언 할 필요가 없으며 명령문을 직접 사용하십시오.
FlipTack

b^^
FlipTack

@FlipTack 골프를 추가했습니다. 감사!
caird coinheringaahing

0

, 277255 바이트

≔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. 이것은 타자가 아닌 타자를 나타냅니다. 마지막 두 요소는 꺼짐 및 현재 타자입니다.

W⊖Lη«

사용 가능한 반죽이 두 개 이상있는 동안 반복하십시오.

≔⊟ηι

에 현재 반죽을 추출하십시오 i.

≔‽12.4/6ζ

에서 무작위 공을 생성하십시오 z.

⊞υζ

미리 정의 된 빈 목록을 사용하여 전체 볼 목록에 추가하십시오 u.

⊞§ι⁰ζ

현재 배터의 볼에 추가하십시오.

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

공이 a /이면 무작위 상태를 생성하고 2..4, 그렇지 않으면 타자의 30 번째 공이면 상태를 1else 로 설정하십시오 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⊟ιΣκ⁶

타자의 점수를 인쇄하십시오.

⸿⸿»

다음 줄의 시작 부분으로 이동하십시오.

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

총계를 인쇄하십시오.

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

모든 주위에 상자를 그립니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.