Я столкнулся с этой проблемой, работая над другой задачей, которую я создаю для этого сайта. В этом соревновании я использую « Mario Kart 8 Scoring ». Количество очков, которое игрок получает за k- е место, представлено этим 1-индексированным массивом: [15,12,10,9,8,7,6,5,4,3,2,1]. Таким образом, 1-е место получает 15 баллов, 2-е место - 12 баллов и т. Д.
Достаточно просто назначить такие точки, однако сложная часть связана с тем, как я справляюсь со связями. Что я делаю, так это даю каждому игроку за связывание среднее количество баллов за каждое место за связывание. Например, если только 1 и 2 связаны, то оба игрока получают (15 + 12) / 2 = 13,5 очков. (Примечание: вам разрешено округлять до ближайшего целого, поэтому 13 или 14 также приемлемы.) Затем 3–12-е место получают нормальное количество очков за их позицию.
Вызов
Учитывая 12 неотрицательных целочисленных баллов, которые сортируются по убыванию, выведите количество очков, которое получает каждый игрок. Вы также можете взять список точек [15,12,10,9, ...] в качестве входных данных. Обратите внимание, что количество очков, которое получает каждый игрок, зависит не от фактических значений баллов, а от того, как они сравниваются с другими баллами.
Тестовые случаи
- [21,21,15,14,12,9,6,5,4,3,2,1] => [ 14,14 , 10,9,8,7,6,5,4,3,2, 1]
- [20,15,15,15,10,9,8,7,6,5,4,3] => [15, 10,10,10 , 8,7,6,5,4,3,2, 1]
- объяснение: (12 + 10 + 9) / 3 = 10,3333
- [1,1,1,1,1,1,1,1,1,1,1,1] => [ 7,7,7,7,7,7,7,7,7,7,7, 7 ]
- объяснение: (15 + 12 + 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1) / 12 = 6,8333
- [20,20,20,20,10,10,10,9,8,7,6,5] => [ 12,12,12,12 , 7,7,7 , 5,4,3,2, 1]
- объяснение: (15 + 12 + 10 + 9) / 4 = 11,5, (8 + 7 + 6) / 3 = 7
- [100,99,98,95,95,95,94,93,93,92,91,91] => [15,12,10, 8,8,8 , 6, 5,5 , 3, 2, 2 ]
- объяснение: (9 + 8 + 7) / 3 = 8, (5 + 4) / 2 = 4,5, (2 + 1) / 2 = 1,5
Связанный: Оцените список оценок с "пропусками"
источник
ave
), иначе это просто фрагмент (который не разрешен). К счастью, это экономит 5 байтов.Perl 5 , 109 +1 (-a) = 110 байт
Попробуйте онлайн!
Включает 17 байтов для жесткого кодирования значений точек.
источник
MATL ,
1210 байт2 байта, благодаря @geokavel !
Входными данными являются вектор столбца (в
;
качестве разделителя) целых чисел и вектор столбца с точками. Вывод содержит результаты, разделенные символами новой строки.Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
источник
05AB1E , 12 байтов
Попробуйте онлайн!
объяснение
источник
C # (.NET Core) , 154 байта
Попробуйте онлайн!
C # (.NET Core) + с использованием Linq, 170 + 23 байта
Попробуйте онлайн!
источник
J 15 байт
Попробуйте онлайн!
Принимает список показателей (
1 2 ... 12 15
) в качестве правого аргумента и значения для оценки в качестве левого аргумента. Если это не логический ввод, добавьте 1 байт для~
-passive, чтобы инвертировать порядок, в котором вводятся входные данные.Там может быть несколько вещей в гольф, которые включают в себя
объяснение
Я разделю это на пару функций.
avg_and_dupe
берет среднее значение списка и дублирует его столько раз, сколько длина спискаscore
оценивает вход (левый аргумент), заданный список оценок (правый аргумент).avg_and_dupe
Это работает так хорошо, потому что это рассматривается как две вилки . Если вы все еще царапаете голову (я знаю, что я поначалу), спросите, и я могу дать более подробное объяснение, почему это работает так, как работает.
Гол
Если это все еще сбивает с толку, я также могу добавить объяснение
/.
-key, но я думаю, что страница вики объясняет это довольно хорошо.источник
You can also take the points list [15,12,10,9,...] as input.
если это спасет вас от байтовPython 2 , 66 байт
-8 байт благодаря Лики Нун.
Попробуйте онлайн!
источник
Желе , 11 байт
Попробуйте онлайн!
-3 байта благодаря fireflame за то, что он заметил новые возможности Jelly: D
источник
S÷L
и вместо формыxL
, что позволяет$
вместо двухµ
.Python 3 , 67 байт
Попробуйте онлайн!
Python 2 ,
10870 байтПопробуйте онлайн!
источник
Python 3 , 72 байта
Попробуйте онлайн!
источник
Протон , 62 байта
Попробуйте онлайн!
Протон , 63 байта
Попробуйте онлайн!
источник
Dyalog APL, 14 байтов
Принимает список баллов в качестве левого аргумента и список баллов в качестве правого аргумента. Добавьте 2 байта для упаковки
()
если вызывается напрямую, а не как именованная функция.{
...}⌸
группировать правый аргумент по ключу в левом аргументе и применять функцию в фигурных скобках к каждой группе (ключевой оператор).⊂≢⍴+/÷≢
это вилка, где:+/÷≢
среднее количество баллов за группу (сумма, поделенная на подсчет)≢⍴
изменить форму (повторить среднее, чтобы соответствовать количеству элементов в группе)⊂
блокирует результат (это должно противодействовать смешиванию результата, к которому применяется ключевой оператор)∊
is enlist и сводит результат ключевого оператора (который является вложенным вектором векторов) в простой список.Попробуй APL онлайн
источник
Haskell, 152 байта
Это боль для импорта
groupBy
иon
поэтому я должен был сделать свой собственный.Функция усреднения будет сокращена в ближайшее время.
Необходимости подписи, вероятно, можно избежать с помощью флагов компилятора.
источник