Вызов
Bar Dice - это простая игра, в которую играют в Bar с Dice (отсюда и название). Вы бросаете 5 шестигранных кубика и пытаетесь собрать лучшую руку.
Подсчет очков основан на накоплении наибольшего количества кубиков с одинаковыми цифрами. Каждая рука должна включать, по крайней мере, один «туз» или одну, чтобы быть действительной рукой; Тузы действуют как «дикие» и могут быть в паре с любой другой цифрой. Сила руки игрока зависит сначала от количества цифр, а затем от значения этих цифр. Например, рука (считая джокеры) с четырьмя 3 лучше чем рука с тремя 5, но не лучше, чем рука с пятью 2.
Взято из статьи в Википедии
Это означает, что рука с самым высоким рейтингом состоит полностью из 6 и 1, а рука с самым низким рейтингом - любая рука без 1.
Ваша задача состоит в том, чтобы взять две руки и вернуть, кто из игроков выиграл, или если они сыграли ничью
вход
Два несортированных списка по 5 номеров, в диапазоне от 1 до 6. Каждый список представляет руку игрока. Формат ввода гибкий.
Выход
Любые три различных, но согласованных, статических значения (диапазоны не допускаются), указывающих, выиграл ли игрок 1 или игрок 2, или это был ничья. Пожалуйста, укажите в своем ответе, какие ценности вы используете для чего. Например, вы можете вернуть, -1
если P1 выиграет, 0
если это ничья, и 1
если P2 выиграет.
правила
- Ввод всегда будет действительным
- Только лучший результат каждой руки используется для определения победителя. Здесь нет тай-брейков. Например,
[1,4,4,3,3]
связать[1,4,4,2,2]
вместо того, чтобы использовать 3 и 2 в качестве тай-брейка. - Выходными данными должно быть одно из 3 выбранных значений каждый раз. Простое сопоставление всех отрицательных чисел
P1 Wins
недопустимо и должно быть нормализовано. - Неправильные руки, то есть те, у которых нет 1, проигрывают всем действительным, но связывают со всеми другими недействительными руками. Например,
[2,2,2,2,2]
связи[3,3,3,3,3]
. - Рука
[1,1,1,1,1]
подсчитывается как действительный набор 6 для ранжирования. - Это код-гольф, поэтому выигрывает самый короткий байт.
Примеры
#You guys are pretty good at finding edge-cases that break things. Good job!
Input: [2,1,5,6,6], [6,2,6,6,6]
Output: P1 Wins
Input: [2,4,5,6,6], [6,2,6,6,6]
Output: Tie
Input: [1,2,3,4,5], [5,4,3,2,1]
Output: Tie
Input: [1,5,5,3,2], [5,4,1,6,6]
Output: P2 Wins
Input: [3,2,2,2,1], [4,1,3,6,6]
Output: P1 Wins
Input: [1,1,1,1,1], [6,1,1,6,6]
Output: Tie
Input: [1,3,3,4,4], [1,2,2,5,5]
Output: P2 Wins
Input: [1,3,3,5,5], [1,3,3,2,2]
Output: P1 Wins
Input: [1,3,3,3,4], [1,1,3,3,3]
Output: P2 Wins
Input: [2,2,2,6,1], [5,3,3,1,2]
Output: P1 Wins
Input: [5,5,5,1,5], [1,1,1,1,1]
Output: P2 Wins
Input: [1,1,1,1,1], [1,1,5,1,1]
Output: P1 Wins
источник
IṠ
сM
и вывод списка победителя (ов).Ḍ
теперь тоже может быть избыточно, поскольку списки сортируются так же, как целые числа.R ,
11596 байт-6 байт благодаря Джузеппе.
-6 байт благодаря Аарону Хейману.
-2 байта благодаря Арно, после формата вывода в его ответе JavaScript .
Попробуйте онлайн!
Возвращает
Inf
для P1,NaN
для связи,-Inf
для P2.Использует вспомогательную функцию,
f
которая вычисляет оценку для каждой руки. Оценка определяется следующим образом: пустьd
будет цифра, которая повторяется больше всего, иn
количество раз, которое она повторяется. Тогда счет будет,6*n+d
если есть хотя бы один туз, и0
если нет тузов. Тогда нам просто нужно найти игрока с наибольшим количеством очков.Ungolfed:
источник
order(l)[5]
вместоmax.col(t(l),"l")
получения 96-байтовое решение: попробуйте онлайн!JavaScript (ES6),
9790 байтПринимает вход как
(a)(b)
. Возвращает+Infinity
для P1,-Infinity
для P2 илиNaN
для ничьей.Попробуйте онлайн!
комментарии
источник
05AB1E ,
1615 байт-1 байт благодаря Джонатану Аллану
Попробуйте онлайн!
Возвращает [1, 0] для побед P1, [1, 1] для ничьих, [0, 1] для побед P2.
Вместо того, чтобы использовать лексикографический порядок для двух кортежей (количество кубиков, значение кубика), это вычисляет счет как 10 ** количество кубиков * значение кости. Руки без 1 балла 5.
источник
ć+
(теперь, когда я вижу это, я не могу поверить, что я не думал об этом ..)! Это намного лучше, чем то, что я пытался .. У меня была похожая идея°
. :) За исключением того, что я был уже на 20 байтах и все еще должен был решить проблему для тестового примера[[1,1,1,1,1],] [6,1,1,6,6]]
.. Так что спасибо, что сэкономили мне время, чтобы я мог положить мою попытку в мусорное ведро ..; pć+
работает. Моя первоначальная идея началась с тогоæʒW}ʒ1KË
, что эта[1,1,1,1,1]
проблема была убита .ε1¢©Āy{γéθ¬sg®+°P}`.S
, но это[1,1,1,1,1]
действительно так. Весь Ваш ответ получил хороший синергизм сWΘ*
,6L¢
,ć+
и°ƶ
. Особенно встроенныеWćƶ
действительно показывают свою силу здесь.W
на самом деле не нужен,6L¢¬Ā*
это тот же счетчик байтов, что иWΘ*6L¢
.W
без хлопка и потом*
показал свою силу, но¬
без хлопка и то*
в принципе то же самое. Тот факт, что он не появляется, - это сила, на которую я намекал, сохраняя байт. Но это действительно в основномćƶ
.Python 2 ,
858180 байтПопробуйте онлайн!
Возвращает
1
для P1,0
для связи и-1
для P2.-1 байт, спасибо squid
источник
1
иin
может идтиPerl 6 ,
6049 байтовПопробуйте онлайн!
Возвращает
More
,Same
,Less
дляP1 Wins
,Tie
,P2 Wins
.объяснение
источник
Запрос T-SQL, 148 байт
Использование табличной переменной в качестве ввода
Попробуйте онлайн
источник
Желе , 21 байт
сокрушенный прежде, чем я даже отправил это Ник Кеннеди :)
Монадическая ссылка, принимающая список игроков, который выводит список (с 1 индексированием) победителей.
Таким образом, P1 есть
[1]
, P2[2]
и галстук есть[1,2]
.Попробуйте онлайн!
источник
PowerShell ,
112126123121 байтПринимает вход как
(a)(b)
. Возвращает-1
за победу P1,1
за P2 или0
за ничью.Попробуйте онлайн!
Прецедент
@( @(1,1,5,1,1), @(1,1,1,1,1), 1)
добавлен.раскатали:
источник
Wolfram Language (Mathematica) ,
787574 байта-1 байт Грег Мартин
Попробуйте онлайн!
Выводит -1, когда игрок 1 выигрывает, 1, когда игрок 2 выигрывает, и 0 для ничьей.
источник
FreeQ[#,1]
на#~FreeQ~1
.Java 8,
244240236215199 байт-4 байта благодаря @someone .
-21 байт благодаря @Neil .
-16 байт благодаря @ceilingcat .
Возвращает,
1
если P1 выигрывает;-1
если P2 выигрывает;0
если это галстукПопробуйте онлайн.
Объяснение:
источник
...*(c[p][1]>0?1:0)
наc[p][1]>0?...:0
. Я не могу опубликовать ссылку TIO, так как она слишком длинная, и я не хочу ее сокращать. У версии без гольфа есть неуравновешенные круглые скобки где-то там.c[p][1]>0?
Позже я добавил проверку как исправление ошибки, но, видимо, не особо задумываясь. Спасибо за -4. :)*(i<2?6:i)
? Вы просто дублируете усилия дляi=6
иi=1
. Это может быть просто*i
(и остановить цикл, когда вы доберетесь до 2).9
может быть любое магическое число между5
и около32
, верно? Если вы используете,8
то вместо(int)Math.pow(8,(...)*i)
вы можете использоватьi<<3*(...)
.a->b->{int c[][]=new int[2][7],m[]=new int[2],s,p,i=5;for(;i-->0;c[1][b[i]]++)c[0][a[i]]++;for(i=7;i-->2;)for(p=2;p-->0;m[p]=s>m[p]?s:m[p])s=c[p][1]>0?i+9*(c[p][i]+(i>1?c[p][1]:0)):0;return Long.compare(m[0],m[1]);}
что, кажется, пройти все ваши контрольные примеры ...Желе , 27 байт
Попробуйте онлайн!
1 для P1, -1 для P2, 0 для связи
объяснение
источник
Кувалда 0,4 , 27 байт
Распаковывает в эту функцию Wolfram Language:
который оказывается точно таким же, как мой ответ Mathematica .
источник
Древесный уголь ,
4845 байтПопробуйте онлайн! Ссылка на подробную версию кода. Принимает входные данные в виде массива массивов и выводит их,
-1
если игрок 1 выигрывает,0
за ничью и1
если игрок 2 выигрывает. Объяснение:Замените каждую руку подсчетом того, сколько раз значения
6..1
появляются в руке. Список перевернут, потому что а) это облегчает поиск наибольшего значения с наибольшим количеством и б) облегчает удаление счетчика1
s. Число1
s удваивается, потому что его нужно удалить дважды, один раз, чтобы проверить, что он ненулевой, и один раз, чтобы добавить его к другим счетам.Добавьте количество
1
s к количеству6..2
, но установите все значения в ноль, если счет1
s был равен нулю.Для каждой руки найдите наибольшее количество и наибольшее значение с этим счетом. (На самом деле мы находим значение минус, так
6
как это гольфист.)Определите, какая рука выиграна, вычитая позиции выигрышных и проигрышных рук. (Если руки связаны, то первая рука выигрывает и проигрывает, поэтому результат
0
желаемым.)источник
C (gcc) / 32 бита, 117 байтов
Попробуйте онлайн!
Принимает два целочисленных массива с нулем в конце. Возвращает
1
,0
,-1
дляP1 Wins
,P2 Wins
,Tie
.источник
J ,
4744 байтаПопробуйте онлайн!
Вдохновленный идеей Ника Кеннеди.
ungolfed
источник
Perl 5
-MList::Util=max -pl
, 80 байтПопробуйте онлайн!
Входные данные:
Каждый игрок на отдельной строке, без пробелов
Выход:
1
Первая линия выигрывает0
Галстук-1
Линия две победыисточник