В одной из головоломок в моей старой книге определена игра, в которой два игрока выбирают последовательности бросков монет, которые, по их мнению, появятся первыми, когда монета неоднократно подбрасывается. (Это были странные и четные броски кубиков, но эта маленькая деталь не имеет значения с точки зрения эквивалентности задач.)
Следует отметить, что если игрок 1 выбирает, TTT
а игрок 2 выбирает HTT
, то у игрока 2 есть шанс выиграть игру 7/8, поскольку единственный путь TTT
может быть достигнут раньше HTT
, если все первые три броска - это хвосты.
Ваша задача - создать программу или функцию, которая будет определять вероятность того, что одна из двух выбранных последовательностей будет первой. Ваша программа будет принимать две строки ввода (или две строки в качестве аргументов), каждая из которых представляет последовательность длиной 10 или менее:
HTT
TTT
И выведите вероятность того, что первый игрок выиграет, в дробной или десятичной форме:
7/8
0.875
Самый короткий код для этого на любом языке выигрывает.
источник
Ответы:
Python 3 (
139136134132126115143)Использует алгоритм Конвея, как описано здесь . Обрабатывает все пары последовательностей, пока первая не является завершающей подпоследовательностью второй (согласно инструкциям).
Спасибо xnor за то, что сбрил 6 байтов. Спасибо Згарбу за обнаружение ошибки с подпоследовательностями.
источник
"HTT"
и"TTT"
,o
имеет значение-1
и делит его на0
.2**i
с<<i
, а вероятность вывода можно записать как1/(1/o + 1)
, в которую вы можете поместить обратную величинуo
непосредственно.HTH
иT
, даже если первый игрок не может выиграть. Другой ответ имеет ту же проблему.CJam,
44 3836 байтИспользуя тот же алгоритм Конвея, что и здесь .
Ввод - это две отдельные последовательности в две строки. Выход - это вероятность первого выигрыша за секунду. Входы не должны быть одинаковой длины
Я использую формулу для выигрыша шансов (
p
) для первого игрока A какТогда вероятность определяется как
который после упрощения становится
и после некоторого упрощения становится
Пример ввода:
Выход:
Попробуйте онлайн здесь
источник
HTH
иT
, даже если первый игрок не может выиграть. Другой ответ имеет ту же проблему.Луа
211 190184Также используя алгоритм Конвея. Все еще новичок в Lua, так что это может быть в гольф больше наверняка.
Ungolfed
Первая версия
источник