Крэпс - довольно простая игра в кости, в которую часто играют в казино. Даже если вы не игрок (а я нет), это все равно довольно интересная игра. Вот правила:
В начале игры в Крэпс есть то, что называется раундом выхода . Игрок бросает два d6s (шестигранный кубик), и добавляются два броска кубика. Если результат 7 или 11, человек автоматически выигрывает (это называется естественным ). Если результат равен 2, 3 или 12, человек автоматически проигрывает (это называется выкидышем ). В противном случае, результат устанавливается как точка для раунда.
После этого точка раунд начинается. В течение раунда очков игрок должен непрерывно бросать 2 d6s, пока человек не бросит 7 или его / ее очко из предыдущего раунда. Если человек бросает 7, они проигрывают. Если они бросают свою точку зрения, они выигрывают.
Вызов
Реализуйте простую программу, которая имитирует игру в кости. Если человек выбрасывает натуральный или дурацкий во время раунда выхода, программа должна вывести «Natural:» или «Crapping out:», затем бросить кубик и затем выйти. В противном случае он должен вывести «Point:», а затем точку. Затем, во время раунда, он должен выводить каждый бросок кубика, пока не будет достигнута 7 или точка. Если человек выигрывает, он должен выходить "Pass"
; если они проиграют, это должно вывести "Don't Pass"
.
Реализация эталона
Groovy, 277 байт
def a={return Math.random()*6+1};int b=a()+a();(b<4||b==12)?{println"Crapping out: "+b}():{(b==7||b==11)?{println"Natural: "+b}():{println"Point: "+b;for(;;){int x=a()+a();println x;(x==7)?{println"Don't Pass";System.exit(0)}():{if(x==b){println"Pass";System.exit(0)}}()}}()}()
Пример выходов
Natural: 7
Crapping out: 3
Point: 9
4
8
11
9
Pass
и
Point: 5
3
7
Don't Pass
Это код-гольф , поэтому выигрывает самый короткий код.
(ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Эта задача не предназначена для продвижения азартных игр в любом случае. Помните, дом всегда побеждает.)
You can't make your program shorter by picking a random number between 1 and 12 for the die roll; it must be two numbers picked between 1 and 6.
- Как насчет выбора случайного значения в [1, 12] из распределения, идентичного добавлению двух равномерных случайных значений в [1, 6]?Ответы:
Рубин 164
Довольно просто. Интересные особенности:
Исключающие случаи суммируются как,
r%12<4
а остальные естественные случаи - какr%4==3
.Исходная строка сохраняется в
c
и последующие броски принимаются только в том случае, если это в алфавитном порядке позже, чем одна буква?P
(что происходит только дляPoint
.)источник
Python 3, 190 байт
Это основано на ответе Селео ; Я заменил некоторые длинные условные выражения магическим числом, которое кодирует LUT для каждого числа, повторно использовал переменную и сделал несколько других разных игр в гольф. Еще есть место для гольфа; вероятно, возможно получить под 170.
Я не пытался использовать Python 2, поэтому я не знаю, будет ли он короче.
источник
C99,
366312293277 байтЭто мой первый пост здесь, так что я собираюсь догадаться, что это можно значительно улучшить.
Расширенная версия
Как вы можете видеть, здесь есть много избыточности, с которой, скорее всего, можно покончить.
Кредиты @Mego за помощь, чтобы сделать это меньше.
источник
a
и ,b
а также с использованием метода вычитания наряду с тройными операторами.Python 2,
226224 байтаПервый проход и там много кода:
Спасибо Мего за 2 байта!
источник
PHP
230228218199192188 байт186 байт без
<?
Первая попытка кода гольф! Не уверен, что использование
</br>
будет разрешено, хотя? Как это не будет работать в консоли (как новая строка). Дайте мне знать, если это не разрешено и изменит мой код.РЕДАКТИРОВАТЬ (16-8-16): После улучшения в Codegolf я заметил некоторые возможные улучшения. Это все еще работает с использованием интерфейса командной строки. Заменено
</br>
на жесткий ввод.источник
Javascript 262
источник
Perl 5 , 140 байт
Попробуйте онлайн!
источник
PowerShell ,
181183179178167165 байт-10 байтов благодаря мази
-2 байта благодаря Xcali
Попробуйте онлайн!
Развернутая версия:
Теперь есть несколько менее острых моментов, когда логика построения списка была преобразована в коммутатор. Я думаю, что это все еще довольно хороший подход. +2 байта исправления ошибки.
источник
-notin (7,$z)
не имеет отношения к правилуDuring the point round, the player must continuously roll ... the previous round
. Теперь цикл заканчивается, когда$m
равен7
или первый раунд.Come-out
раунде, и это ваше целевое число на весьPoint
раунд.previous round
Относится кCome-out
тур1?
из вашего ребра регулярное выражение.R 197 байт
Ungolfed
источник
Pyth , 108 байт
Попробуйте онлайн!
Первый проход, возможно, найдет несколько сбережений.
источник
Рунические чары , 151 байт
Попробуйте онлайн!
После исправления ошибки, связанной со случайными числами (каждый раз повторялась
'RA
вызове , а в качестве начального времени использовалось системное время, что приводило к массовым прогонам повторяющихся значений), это работает правильно.объяснение
Вступление находится на второй строке, так как первая строка до
B͍
- это функция для броска двух костей и их суммирования.Выполнение программы с некоторыми перетаскиванием краев и свернутыми перенаправлениями для удобства чтения
Существует только 4 инструкции NOP (
{:}≠...?\.6?
), которые будет очень трудно удалить из-за места, необходимого для других строк (а именно длины"Don't "
строки).источник