Блэкджек , также известный как двадцать один, представляет собой сравнение карточной игры между вами и дилером, где каждый игрок в свою очередь конкурирует с дилером, но игроки не играют друг против друга.
Игра идет следующим образом, дилер сдает вам карту. Затем дилер сдает себе карту лицом вниз. Затем дилер сдает вам другую карту. Затем, наконец, дилер сдает себе карту лицом вверх.
Вызов
Ваша задача состоит в том, чтобы написать программу (или функцию), которая при запуске (или вызове) выдает (или возвращает) вероятность того, что следующая карта, которую вам даст дилер, вызовет у вас банкротство, что означает совокупный счет карт в вашей руке после Дилер дает вам еще одну карту старше 21 года.
вход
Три видимые карты в игре. Это две карты, которые у вас есть в руке, и карта с одним лицом, которую вы можете видеть в руке дилера. Это может быть в любом формате, который вы считаете подходящим для вашего приложения.
В колоде 52 карты (по 4 карты ниже). Ценность карт следующая:
Symbol(Case Insensitive) Name Value
2 Two 2
3 Three 3
4 Four 4
5 Five 5
6 Six 6
7 Seven 7
8 Eight 8
9 Nine 9
T Ten 10
J Jack 10
Q Queen 10
K King 10
A or 1 Ace 1
В Блэкджеке туз может считаться 1 или 11. В нашем вызове только 1
Выход
Вероятность того, что следующая карта, которую мы вытянем, в процентном или процентном формате заставит нас обанкротиться.
Вы можете вывести процент, дробь или просто числитель дроби.
Примеры
В этом примере первые две карты находятся в нашей руке, третья карта является видимой картой дилера.
Input -> Output
A 2 Q -> 0.00% or 0/49 or 0
A 2 3 -> 0.00% or 0/49 or 0
T T T -> 91.84% or 45/49 or 91.84
T J K -> 91.84% or 45/49 or 45
9 7 3 -> 61.22% or 30/49 ...
9 7 Q -> 59.18% or 29/49 ...
правила
Стандартные лазейки не допускаются.
Это код-гольф , поэтому выигрывает самый короткий код в байтах для каждого языка!
источник
Ответы:
Желе ,
2624 байтаМонадическая ссылка принимает список символов ( с использованием либо опции нижнего регистра или варианта верхнего регистра с
1
поA
) , которая возвращает числитель (количество 49 - й ы) в[0,49]
.Попробуйте онлайн! Или посмотрите набор тестов
Как?
Обратите внимание, что при использовании строчных букв минимум 10 и порядковые числа по модулю 48 дают значения карт. То же самое справедливо для верхнего регистра
T
,J
,Q
,K
и1
для асе, как показано справа (но символ верхнего регистраA
не работает):источник
JavaScript (ES6),
7362 байтаПринимает ввод в виде массива из 3 символов с
1
для тузов. Возвращает целое число X, представляющее вероятность того, что X / 49 будет уничтожен.Попробуйте онлайн!
Исчерпывающий тест
Формула гольфа не очень интуитивно понятна. Таким образом, самый простой способ доказать его непротиворечивость, вероятно, состоит в том, чтобы просто сравнить все возможные выходные данные с результатами, предоставляемыми базовой незакрашенной реализацией:
Попробуйте онлайн!
источник
.map(n=>b-=n+b>52,b+=c-32)
делает? Я не слишком знаком с JS.map
и пытаюсь понять, что делает запятая здесь .. Сначала я думаю, что это более короткий вариант.map(n=>{b-=n+b>52;b+=c-32})
или что-то в этом роде. Я знаю, чтоa=>([b,c]=a.map(v=>v*4||40))
преобразуется['1','2','Q']
в[ 4, 8, 40 ]
, а затем он зацикливается на этих трех значениях, гдеb
первое значение иc
второй (если я правильно понимаю). Но я немного озадачен.map(n=>b+=(n+b<53)-1,b+=c-32)
(если первыйb-=
изменится наb+=
) против.map(n=>b+=(n+b<53)-33+c)
..b
= первое значение,c
= второе значение в[4, 8, 40]
, а такжеb-=n+b>52
модифицирует,c
если это вторая итерация? В каком случае объединение обоихb-=
иb+=
в одинb+=
(илиb-=
) не будет работать из-за этого?b+=c-32
является (неиспользованным) параметромmap()
и оценивается только один раз перед первой итерацией.n=>b-=n+b>52
является функцией обратного вызова (1-й параметрmap()
) и вызывается на каждой итерации. Технически,map()
он принимает 2-й параметр (называемый thisArg ), но здесь это не имеет значения: мы просто хотим, чтобы этот фрагмент кода был выполнен до начала цикла.Pyth, 35 байтов
Вводит в виде списка символов (или в виде строки).
Попробуй здесь
объяснение
источник
Perl 5 , 115 байт
Попробуйте онлайн!
источник
Python 2 ,
9796 байтПопробуйте онлайн!
Принимает 3-символьную строку в качестве входных данных, причем «1» используется в качестве туза. Возвращает числитель.
источник
Java 8, 109 байт
Порт ответа @Arnauld 's JavaScript (ES6) .
Ввод как массив символов с тремя значениями, Aces as
'1'
; Выход - это вероятностьp
вp/49
.Попробуйте онлайн.
Объяснение:
источник
05AB1E , 46 байтов
Попробуйте онлайн!
Это можно сделать лучше, работая над этим.
источник
05AB1E ,
232221 байтПопробуйте онлайн!
источник