Пограйте в гру Dice Cricket


12

Dice Cricket - це гра, з якою я був знайомий ще в дитинстві і з тих пір використовував її як спосіб провести час. Я не зміг знайти сторінку Вікіпедії, тому поясню правила нижче.

Правила крикетів з кістки

Приміщення

Dice Cricket - це гра, схожа на забивання гри в крикет під час її перегляду, але замість того, щоб спостерігати і записувати результат, ви кочуєте штамп і записуєте результат.

Результати записуються в таблицю, як показано внизу.

Дисплей

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 бляшанки. Перший гравець за замовчуванням поточний кляр, а другий у тісті "вимкнено".

Гра складається з «кульок»: кожна куля в матчі з крикетом представлена ​​рулетом з кістки. Кожен рулон виконує іншу команду:

  • 1,2,4 та 6 роблять так багато бала. Якщо згорнутий 1, поточне тісто стає тістом "вимкнено", а тісто "вимкнено" стає поточним
  • 3 - "кулька з крапками", тобто нічого не відбувається. Він представлений у Runsрозділі як a .і набирає бали 0. A 0його не можна використовувати для його представлення.
  • 5 - хвіртка. Якщо 5 прокатується, поточне тісто "виходить", це означає, що а /додається до прогонів, і з цього моменту тісто більше не може набирати пробіг. Потім тісто поміняють на наступне тісто, яке не збило. 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 кульок перемикаються по два кляри; поточне тісто стає тістом "вимкнено", а тісто "вимкнено" стає поточним

Якщо Runsсекція заповнена (30 куль), тісто вийде і How Outрозділ встановлено на Retired. А / не розміщується в кінці 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 Правильно.
caird coinheringaahing

1
@JonathanAllan Так, це не є гарною вимогою. Видалено
caird coinheringaahing

Відповіді:


2

Python 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 години, і на це мені пішло близько години, тож я сподіваюся, що я не FGITW'ing нікого, і я не займався гольфами в Python, а це було весело (хоча це вдруге я відповів на одне із власних питань довгою відповіді Python)

Будь ласка, не соромтеся публікувати пропозиції щодо гольфу, Python - це не моя найкраща мова для гри в гольф.

-68 байт завдяки FlipTack !

-8 байт завдяки спадару Xcoder

+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

Вугілля деревне , 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. Це являє собою тіста, які не виходять. Останні два елементи - це відключені та поточні кляри.

W⊖Lη«

Повторіть, поки є щонайменше два кляри.

≔⊟ηι

Витягніть поточну тушку до i.

≔‽12.4/6ζ

Утворіть випадкову кулю в z.

⊞υζ

Додайте його до загального списку куль, використовуючи попередньо визначений порожній список u.

⊞§ι⁰ζ

Додайте його до поточних кульок тіста.

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

Якщо куля є a /, тоді генеруйте випадковий статус 2..4, інакше, якщо це 30-а куля тіста, тоді встановіть статус на 1інше 0.

¿ζ§≔ι¹ζ⊞ηι

Якщо тісто відсутнє, тоді зберігайте стан тіста, інакше поверніть тісто назад у вату.

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

Якщо залишилося щонайменше два кляри, а тісто було поза Xor було зіграно 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⁸ι

Намалюйте коробки навколо всього.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.