Помогите PPCG Клаусу доставить его подарки
обзор
PPCG Клаус бежит поздно, доставляя свои подарки, потому что в настоящее время у нас так много странных маленьких детишек. Из-за этого PPCG Клаусу намного сложнее доставить все подарки в нужное место. Ваша задача - помочь ему правильно доставить подарки.
Сложность
Учитывая список заглавных имен, представляющих детей, которых он должен доставить, и список подарков, представленных числами, вы должны выяснить, как распределить подарки среди указанных детей. Конечно, есть загвоздка, хотя ....
В настоящее время дети становятся разборчивыми, если ребенок странный человек (первая буква - нечетный ASCII-код), он хочет получить странный подарок! Если он четный парень (первая буква - даже ASCII-код), ему, очевидно, нужно дать четное число! Однако любой ребенок, делимый на 3, является непослушным, непослушным мальчиком, поэтому PPCG Клаус должен полностью игнорировать их, чтобы заставить их вести себя в следующем году. Чтобы считать свой путь успешным, он должен доставить все подарки всем детям, которые их заслуживают, и не должен давать ни одному ребенку слишком много подарков. Если любой ребенок получит на 3+ больше подарков, чем его сверстники, он рискует стать непослушным ребенком в следующем году, и это просто неправильно! Кроме того , если какой - нибудь хороший ребенок был получить подарок , когда другой хороший ребенок не, что также будет превратить этот ребенок зла.
пример
Дети следующие:
Kids = ["Amy", "Betty", "Clyde", "Dave", "Francine"] = [A,B,C,D,F] = [65,66,67,68,70]
- Бетти - проклятие человечества, явно в сговоре с номером 3.
- Эми и Клайд были чудаковатыми с рождения и не хотели бы получать даже подарки.
- Дейв и Франсин нормальные, даже дети; они должны получать только подарки!
Подарки следующие:
Presents = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
Одним из возможных выходных данных будет:
[
['Amy',[1,3,5]],
['Betty',[]],
['Clyde',[7,9,11,13]],
['Dave',[2,4,6,8]],
['Francine',[10,12,14]]
]
Сценарии исключений
Однако то, что PPCG Клаус готов и желает, не означает, что PPCG Клаус может. Вот список сценариев исключений, в которых вы должны сообщить о плохих новостях PPCG Claus с сообщением:
PPCGmas is cancelled!
Следующие сценарии приведут к отмене Рождества:
- Там нет детей.
[],[1,2,3]
- Wellp, они дед.
- Там нет хороших детей.
["Betty"],[1,2,3]
- Серьезно, винт Бетти.
- Нет подарков или меньше подарков, чем у хороших детей.
["Amy","Charles"],[]
- Один или несколько человек не получат подарков.["Amy","Charles"],[1]
- Один или несколько человек не получат подарков.
- Там нет нечетных / четных подарков, чтобы удовлетворить всех хороших детей.
["Amy","Dave"],[2,4,6]
- Эми облажалась.
Вот список сценариев, которые не должны влиять на PPCGmas:
- Остаток подарков (все дети должны получить максимальное количество подарков).
["Amy","Dave"],[2,4,6,8,10,12,14,7,9] = [["Amy",[7,9]],["Dave",[2,4,6,8]]]
Повторяемые основные правила
- Хорошие дети либо четные, либо нечетные, в зависимости от их первого инициала.
- У плохих детей первое начальное значение делится на 3.
- Все хорошие дети должны получить как минимум один подарок.
- Ни один хороший ребенок не может получить более 2 подарков больше, чем любой другой хороший ребенок.
- Если должны быть оставшиеся подарки, вы должны максимально распространять их, не нарушая 4.
- Плохие дети не должны получать подарки вообще.
- Если ЛЮБОЙ из них нарушен, вы должны вывести
PPCGmas is cancelled!
точно.
Требования к формату ввода / вывода
- Первый вход должен быть строкой с полными именами в виде массива / списка / запятой, а не только первым инициалом.
- 2-й вход должен представлять собой массив положительных целых чисел, разделенных запятыми.
- Результатом может быть любое обозначение того, как вы раздавали подарки, что имеет смысл; или
PPCGmas is Cancelled!
.
Критерий победы: код-гольф
TL; DR: Бетти - придурок, не соревнуйся.
источник
3
? РЕДАКТИРОВАТЬ : Если кто-то должен «ввернуть Бетти», почему она вообще в вызове?Ответы:
APL, 171 байт
Он принимает подарки в качестве левого аргумента, потомки - в качестве правого аргумента и возвращает матрицу, в которой первый столбец содержит имена дочерних элементов, а второй столбец содержит подарки, которые они получают.
Testcases:
Безголовая версия здесь.
источник
JavaScript (ES6),
525492454453 байта-71 байт благодаря @Guedes -1 бит благодаря @Jake Cobb
Попробуйте онлайн!
Версия без гольфа
Я думаю, можно играть в гольф. Я только что сделал буквальный перевод версии без игры в гольф.
Теперь это меньше, чем сумма CharCode, составляющая "santa" (115 + 97 + 110 + 116 + 97 = 535). Йеай
источник
C[0]
вместоC.charCodeAt(0)
сохранения 11 байтов. Кроме того, когда свойство повторяется много раз, вы можете сохранить его имя какL='length'
и использоватьi[L]
вместоi.length
.P(["Amy", "Betty", "Clyde"],[1,2,3,4,5,6,7,8,9,10,11,12,13,14]);
Python 2,
334355354 байтаПотерял 21 байт для обработки только четных или только нечетных детей.
Сохранено 1 байт благодаря @TuukkaX.
источник
ord('A')%3==0
есть,False
но1-ord('A')%3
есть-1
.%3<1
должно сработать.Javascript (ES6),
218216 байтВывод (если это не строка ошибки) - это объект, ключами которого являются имена детей; значение - это массив подарков, которые получает ребенок.
Я сохранил два байта, когда понял, что у меня есть пара избыточных скобок.
Безголовая версия:
источник