Dice Cricket - игра, в которую я познакомился, будучи ребенком, и с тех пор использовал ее как способ скоротать время. Я не смог найти страницу Википедии, поэтому я объясню правила ниже.
Правила игры в крикет
посылка
Dice Cricket - игра, похожая на выигрыш в игре в крикет, когда вы смотрите ее, но вместо того, чтобы наблюдать и записывать результат, вы бросаете кубик и записываете результат.
Результаты заносятся в таблицу, как показано внизу.
дисплей
Dice Cricket использует специальный дисплей, чтобы показать всю информацию, происходящую.
В таблице 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, текущее тесто становится «выключенным» тестом, а «отключенное» тестом становится текущим
- 3 - «точечный шар», означающий, что ничего не происходит. Он представлен в
Runs
разделе как a.
и имеет значение 0. A0
не может использоваться для его представления. - 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 шаров переключаются две колотушки; текущее тесто становится «выключенным» тестом, а «выключенное» тесто становится текущим тестом
Если Runs
секция заполнена (30 шаров), жидкое тесто отсутствует, и How Out
секция установлена на Retired
. А /
не помещается в конце Runs
коробки.
Actual Challenge (да, все, что было правилами игры)
Ваша задача состоит в том, чтобы вывести заполненную таблицу (как пример в конце), учитывая список имен. Содержимое вывода должно содержать только таблицу и / или начальные или конечные пробелы.
правила
- Стандартные лазейки запрещены
- Все 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 |
+-----------------------------------------------+-----+
Ответы:
Python 3 ,
650621582572588 байтПопробуйте онлайн!
Ну, прошло более 24 часов, и это заняло у меня около часа, чтобы взбодриться, так что я надеюсь, что я никого не FGITW, и я некоторое время не играл в гольф на Python, так что это было весело (хотя это во второй раз я ответил на один из моих собственных вопросов длинным ответом на Python)
Пожалуйста, не стесняйтесь размещать предложения по гольфу, Python не мой лучший язык для игры в гольф.
-68 байт благодаря FlipTack !
-8 байт благодаря мистеру Xcoder
+16 байт из-за ошибки
источник
print
вместоP
. 2)sum
может напрямую взятьmap
объект, не нужно конвертировать его в список. 3) Вместо того , чтобы писать вyield x
два раза, то почему бы неyield x
и затем перерыв в случае необходимости? 4)T=0
можно разместить внутри заголовка функции. 5) В вашей последней функции вы использовали несколько новых строк, где вы можете просто использовать одну строку с точкой с запятой, например, первые три оператора, последние три оператора и операторы в цикле for.s
значительно ...def s(i=30):
а потомwhile i:x=choice('12.4/6');yield x;i=('/'!=x)*~-i
. Кроме того, вы звоните толькоo()
один раз, так что нет необходимости даже объявлять его, просто используйте оператор напрямую.b
^^Древесный уголь ,
277255 байтПопробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Прочитайте 11 имен (входные данные гибкие: JSON, разделенные пробелом или разделенные новой строкой) и создайте массив
q
из 11 битеров, представленных их шарами (в виде массива), состоянием (в виде целого числа) и именем.Создайте перевернутую копию баттеров
h
. Это представляет баттерс, которые не вышли. Последние два элемента - офф и текущие баттеры.Повторите, пока есть по крайней мере два доступных баттеров.
Извлеките текущее тесто в
i
.Создать случайный шар в
z
.Добавьте его в общий список шаров, используя предопределенный пустой список
u
.Добавьте его в шары текущего теста.
Если мяч является «а»
/
, тогда генерируется случайный статус2..4
, в противном случае, если это 30-й мяч бьющего, тогда установите статус в1
противном случае0
.Если тесто отсутствует, сохраните его статус, в противном случае поместите тесто обратно в летучую мышь.
Если осталось как минимум два баттера, а тесто истекло или разыграно 6 шаров, то ...
... возьмите текущие и текущие баттеры и верните их в обратном порядке.
Распечатать заголовок.
Цикл над баттерс.
Напечатайте название теста.
Распечатать шарики теста.
Напечатайте статус жидкого теста, указав в строке
Not OutRetiredBowled Caught LBW
разбитую на подстроки длиной 7.Напечатайте счет теста.
Перейти к началу следующей строки, кроме одной.
Распечатайте итог.
Нарисуйте коробки вокруг всего.
источник