Aidez PPCG Claus à livrer ses cadeaux
Aperçu
PPCG Claus est en retard pour livrer ses cadeaux parce que de nos jours, nous avons tellement de petits gamins bizarres. Cela rend beaucoup plus difficile pour PPCG Claus d'obtenir tous les cadeaux au bon endroit. Votre défi est de l'aider à délier correctement ses cadeaux.
La complexité
Étant donné une liste de prénoms en majuscule représentant les enfants auxquels il est censé livrer et une liste de cadeaux représentés par des nombres, vous devez trouver un moyen de répartir les cadeaux entre les enfants. Bien sûr, il y a un hic ...
De nos jours, les enfants deviennent pointilleux, si le gamin est un gars étrange (la première initiale est un code ASCII impair), il veut un cadeau étrange! S'il est pair (même la première initiale est en code ASCII), il doit évidemment lui être donné un pair! Tout enfant divisible par 3, cependant, est un vilain, un vilain, donc PPCG Claus doit les ignorer complètement pour les faire se comporter l'année prochaine. Pour considérer son parcours comme un succès, il doit livrer tous les cadeaux à tous les enfants qui les méritent et ne doit pas donner à un enfant trop de cadeaux. Si un enfant reçoit 3+ cadeaux de plus que ses pairs, il risque de devenir un enfant méchant l'année prochaine, et ce n'est tout simplement pas bien! De plus, si un bon enfant devait recevoir un cadeau alors qu'un autre bon enfant ne le recevait pas, cela rendrait cet enfant mauvais.
Exemple
Les enfants sont les suivants:
Kids = ["Amy", "Betty", "Clyde", "Dave", "Francine"] = [A,B,C,D,F] = [65,66,67,68,70]
- Betty est le fléau de l'humanité, clairement en pointe avec le chiffre 3.
- Amy et Clyde sont bizarres depuis leur naissance et détesteraient même recevoir des cadeaux.
- Dave et Francine sont des enfants normaux, même; ils ne devraient recevoir que des cadeaux!
Les cadeaux sont les suivants:
Presents = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
Une sortie possible serait:
[
['Amy',[1,3,5]],
['Betty',[]],
['Clyde',[7,9,11,13]],
['Dave',[2,4,6,8]],
['Francine',[10,12,14]]
]
Scénarios d'exception
Cependant, ce n'est pas parce que PPCG Claus est prêt et disposé à le faire. Voici une liste de scénarios d'exception où vous devez annoncer la mauvaise nouvelle à PPCG Claus avec un message de:
PPCGmas is cancelled!
Les scénarios suivants entraîneront l'annulation de Noël:
- Il n'y a pas d'enfants.
[],[1,2,3]
- Wellp, ont-ils déduit.
- Il n'y a pas de bons enfants.
["Betty"],[1,2,3]
- Sérieusement, vis Betty.
- Il n'y a pas de cadeaux, ou moins de cadeaux que de bons enfants.
["Amy","Charles"],[]
- Un ou plusieurs ne recevraient aucun cadeau.["Amy","Charles"],[1]
- Un ou plusieurs ne recevraient aucun cadeau.
- Il n'y a pas de cadeaux impairs / pairs pour satisfaire tous les bons enfants.
["Amy","Dave"],[2,4,6]
- Amy est foutue.
Voici une liste de scénarios qui ne devraient pas affecter PPCGmas:
- Cadeaux restants (Tous les enfants devraient recevoir le maximum de cadeaux).
["Amy","Dave"],[2,4,6,8,10,12,14,7,9] = [["Amy",[7,9]],["Dave",[2,4,6,8]]]
Règles principales réitérées
- Les bons enfants sont pairs ou impairs, selon leur première initiale.
- Les mauvais enfants ont une première initiale entièrement divisible par 3.
- Tous les bons enfants doivent recevoir au moins un cadeau.
- Aucun bon enfant ne doit recevoir plus de 2 cadeaux de plus que tout autre bon enfant.
- S'il reste des cadeaux, vous devez les distribuer au maximum, sans violer 4.
- Les mauvais enfants ne doivent recevoir aucun cadeau.
- Si l'un de ces éléments est violé, vous devez produire
PPCGmas is cancelled!
exactement.
Exigences de format d'E / S
- La 1ère entrée doit être une chaîne de noms complets de tableau / liste / délimitée par des virgules, pas seulement la première initiale.
- La deuxième entrée doit être une chaîne / liste / chaîne séparée par des virgules d'entiers positifs.
- Le résultat peut être n'importe quelle dénotation de la façon dont vous avez distribué les cadeaux qui a du sens; ou
PPCGmas is Cancelled!
.
Critère gagnant: code-golf
TL; DR: Betty est un imbécile, ne rivalisez pas.
la source
3
? EDIT : Si l'on doit "baiser Betty", pourquoi est-elle dans le défi?Réponses:
APL, 171 octets
Cela prend les cadeaux comme argument de gauche, les enfants comme argument de droite et retourne une matrice où la première colonne contient les noms des enfants et la deuxième colonne contient les cadeaux qu'ils reçoivent.
Testcases:
Version non golfée ici.
la source
JavaScript (ES6),
525492454453 octets-71 octets grâce à @Guedes -1 bit grâce à @Jake Cobb
Essayez-le en ligne!
Version non golfée
Peut être plus golfé je pense. Je viens de faire une traduction littérale de la version non-golfée.
C'est maintenant plus court que la somme du CharCode composant "santa" (115 + 97 + 110 + 116 + 97 = 535). Ouais
la source
C[0]
au lieu d'C.charCodeAt(0)
enregistrer 11 octets. De plus, lorsqu'une propriété se répète plusieurs fois, vous pouvez stocker son nom commeL='length'
et l'utiliser à lai[L]
place dei.length
.P(["Amy", "Betty", "Clyde"],[1,2,3,4,5,6,7,8,9,10,11,12,13,14]);
Python 2,
334355354 octetsPerte de 21 octets pour gérer le cas des enfants uniquement pairs ou impairs.
1 octet enregistré grâce à @TuukkaX.
la source
ord('A')%3==0
estFalse
mais l'1-ord('A')%3
est-1
.%3<1
devrait marcher.Javascript (ES6),
218216 octetsLa sortie (si ce n'est pas la chaîne d'erreur) est un objet dont les clés sont les noms des enfants; la valeur est le tableau de cadeaux que l'enfant reçoit.
J'ai enregistré deux octets lorsque j'ai réalisé que j'avais une paire de parenthèses redondantes.
Version non golfée:
la source