проблема
Начиная с игры в n=2
кости:
- Бросайте
n
кости, с каждым числом от 1 до 6 одинаково вероятно на каждом кубике. - Проверьте, равна ли их сумма наиболее вероятной сумме для игры в
n
кости, то есть3.5*n
.- Если они равны, прекратить.
- В противном случае распечатайте
n
и повторите с самого начала сn+2
кубиками
Ваш код не должен выполнять эту процедуру точно, но должен давать случайный вывод, вероятностно эквивалентный ему, основываясь на нашем определении случайности .
Ваша программа должна выводить все числа в отдельной строке; например, если программа получила до 8 кубиков и бросила наиболее вероятное число с 8 кубиками, результат будет:
2
4
6
Пример выполнения
На 2 кубика, 7
это наиболее вероятная сумма. Допустим, свернутые числа были 2
и 3
. Затем вы напечатаете 2
.
На 4 кубика, 14
это наиболее вероятная сумма. Скажем , число свернутое было 3
, 4
, 2
, и 5
. Тогда сумма равна 14
, так что программа будет завершена здесь.
Окончательный результат в этом случае "2"
.
правила
- Code-Golf, поэтому выигрывает самое короткое решение в байтах
- Стандартные лазейки применяются
- Определение мета хаотичности применяется
- Вы можете использовать функции, а также программы
2, 4, 6, 8, ...
бросок с таким количеством кубиков каждый раз, пока не достигну наиболее вероятного числа для этой итерации?Ответы:
Python 2 , 70 байт
Попробуйте онлайн!
Хитрость заключается в том, чтобы вычислить сумму с
eval
помощью строки, которая выглядит какс
n
копиями выражения сцеплены. Вrandrange(6)
выдает случайное число из[0,1,2,3,4,5]
, который сдвигается вниз ,2.5
чтобы иметь среднее значение0
. Когда сумма if0
,while
условие не выполняется и цикл завершается.Альтернативное использование
map
было на 4 байта длиннее:Я нашел кучу выражений одинаковой длины для матрицы, сдвинутой на ноль, но не короче
источник
MATL , 13 байт
Попробуйте онлайн!
объяснение
источник
Желе ,
1914 байт-5 байт с помощью Leaky Nun (от пересчета до рекурсии)
Полная программа, печатающая результаты, разделенные символами новой строки (также выводятся лишний пробел и символ новой строки, а также ошибки программы в конце).
Попробуйте онлайн! - всякий раз, когда 6 кубиков превышены, TIO убивает это из-за использования памяти, но это работает в принципе - для этого также требуется ~ 40 с.
Более удобная 15-байтовая версия, которая не занимает много времени или требует много памяти, доступна здесь .
Как?
Рекурсивно бросает еще 2 кубика, пока сумма граней, каждая из которых уменьшена на 3,5, не станет равной нулю, печатая количество кубиков по мере того, как оно идет, когда достигается ноль, он пытается использовать пробел, вызывающий ошибку типа.
источник
n
с, хорошо, может быть, это спасение. Я думал, что вы имели в виду суммы :)TI-BASIC, 28 байтов
объяснение
randInt(1,6,N)
генерирует список из N случайных чисел от 1 до 6mean(randInt(1,6,N)-3.5
получает среднее значение бросков на 3,5While
продолжается до тех пор, пока среднее выражение не станет равным нулю (наиболее вероятная сумма)источник
R , 49 байт
sample(6,n,T)
генерируетn
(псевдо) случайные выборки из диапазона1:6
с заменой. Вычитание 3.5 из каждого элемента дает результат, которыйsum
равен 0 (Falsey) тогда и только тогда, когда это наиболее распространенное значение.Попробуйте онлайн!
Пропускает нечетные броски костей.
источник
Java 8,
123149113108 байтИли 107 байт , если использовать в качестве неиспользованного параметра вместо этого.
Object null
+26 байт для исправления ошибки, правильно отмеченной @Jules в комментариях.
-41 байт благодаря великому мышлению @ OliverGrégoire !
Объяснение:
Попробуй это здесь.
источник
r
равно,3.5*n
программа должна завершиться напрямую. Но, если я правильно понимаю функцию, она будет напечатана вn
последний раз перед завершением.n
на 2. Таким образом, в нем содержались две ошибки (1-12 вместо 2-12; и игральные кости, такие как 2 -> 2 -> 4 -> 6 -> ... вместо 2 -> 4 -> 6 -> ...). Однако он печатал правильно, потому что не пошелSystem.out.println(n),n+=2
бы на него, если быr
действительно был равен3.5*n
.()->{for(int n=2,s=0,e=7,i;s!=e;n+=2,e+=7){for(i=n,s=n;i-->0;)s+=Math.random()*6;if(s!=e)System.out.println(n);}}
. Кроме того, поправьте в отношении комментария Жюля и моего объяснения.n
это кубики,s
это сумма,e
как ожидается,i
это индекс. Наконец, сумма начинается с того,n
чтобы избежать+1
,n
раз иs!=e
повторяется, потому что я просто не знаю, как избежать этого случая.()->{for(int i=0,s=1,j;s!=i*7;){for(j=s=++i*2;j-->0;)s+=Math.random()*6;if(s!=i*7)System.out.println(i*2);}}
05AB1E ,
2220 байт-2 байта благодаря Emigna
Попробуйте онлайн!
объяснение
источник
O
после.R
того, как вы можете удалить)
иs
.R,
484442 байта5-байтовое улучшение ответа Джузеппе .
Это (ab) использует тот факт, что
F
переменная по умолчанию присваивается, кFALSE
которой приводит,0
а затем может быть увеличена, что избавляет нас от необходимости инициализировать переменную счетчика.источник
sample(6)
вместо,sample(1:6)
но вычеркнутое число 44 равно 44. codegolf.stackexchange.com/a/82343/67312PHP , 75 байт
Попробуйте онлайн!
источник
5^2/++$i*$d+=rand()%6
это немного более короткое условие для цикла. Также я думаю, что текущий цикл некорректно завершается, если самая первая брошенная игральная кость - «1» (она генерирует 0 для начального$d
).GolfScript , 41 байт
Попробуйте онлайн!
источник
Mathematica, 47 байт
-5 байт от LLlAMnYP
источник
05AB1E , 17 байт
Попробуйте онлайн!
объяснение
источник
Пакетный, 109 байтов
Скорее досадно,
random
это волшебная переменная среды, поэтому она заменяется случайным значением только при расширении среды, что обычно происходит до запуска цикла for.call
Это происходит каждый раз в цикле, но затем вам нужно удвоить%
знаки, чтобы предотвратить расширение до цикла. Веселье начинается, потому что мы хотим модулировать результат на 6, что требует реального%
знака, который теперь должен быть удвоен. Результат - шесть последовательных%
секунд.источник
JavaScript (ES2015),
7578 байтВыводит строку результатов, разделенных символами новой строки
Редактировать: сохранил байт благодаря Shaggy, добавил 4 байта, чтобы запустить функцию на 2
объяснение
источник
'\n'
.n=2
, вместо этого вы должны указать начальный номер кости при вызове функции.php - 89 символов
источник
$r=0;
использование,echo
вместо которогоprint
$n."
можно записывать"$n
циклы as и for, а не while позволяет делать что-то в цикле after или before для сохранения некоторых байтовC (gcc) ,
8480797775807876 байтовПопробуйте онлайн!
источник
Haskell
133132 байтаБлагодарим @Laikoni за предложения в комментариях ниже.
источник
return()
может быть сокращено доpure()
иputStrLn$show
может быть сокращено доprint
.div k 2 then
могут бытьdiv k 2then
иdo print k;s(k+2)
естьprint k>>s(k+2)
.Октава 55 байт
Вдохновленный ответом Андреарки. Если у кого-то есть какие-либо указатели, чтобы даже сократить его, они приветствуются.
источник
Pyth , 20 байтов
Попробуйте онлайн!
источник
QBIC , 40 байт
Это очень много буквально делает то, что просит вызов; кажется самый короткий способ получить правильное распределение.
объяснение
источник
Rexx (Regina) , 78 байт
Попробуйте онлайн!
источник
JavaScript (ES6) - 69 символов
Пояснение :
а также:
источник
Calc2 0,7,
119118111 байтовungolfed:
Я мог бы обойтись без Math.Int (), но, к сожалению, в 0.7 в функциях Random (). Next () есть ошибка, при которой все они возвращают двойные числа вместо целых. Это было исправлено, но только после того, как этот вопрос был опубликован. Я ничего не выиграю, но эй, хорошее доказательство концепции.
Редактировать:
Edit2:
удалил var r и создаю новый Random, где это необходимо (-4 байта)
изменено i = 0, d = 0 на i = d = 0 (-2 байта)
увеличивается после проверки (-1 байт)
источник
Рубин , 52 байта
объяснение
Попробуйте онлайн!
источник
s=0
на переднюю часть цикла и использованиеx.times
. Это означает, что сумма сбрасывается каждый раз, а затемx
бросаются кости, что должно быть правильным распределением. Я напишу объяснение моего кода.Javascript, 87 символов
Тест с
console.log
вместоalert
:источник
Луа, 102 байта
Или более читаемая версия
Более читерская версия на 96 байт
Это в значительной степени работает так же, как первый, но повторно использует броски от более ранних вызовов. Из-за этого я могу удалить цикл for. Оба протестированы в Lua 5.2
источник
Perl 6 , 48 байт
источник
PHP, 51 байт
источник