Ayuda a PPCG Claus a entregar sus regalos
Visión general
PPCG Claus está llegando tarde a entregar sus regalos porque hoy en día tenemos muchos niños pequeños extraños por ahí. Esto hace que sea mucho más difícil para PPCG Claus llevar todos los regalos al lugar correcto. Su desafío es ayudarlo a deleitar sus regalos correctamente.
La complejidad
Dada una lista de nombres en mayúscula que representan a los niños a los que se supone que debe entregar y una lista de regalos representados por números, debe descubrir cómo distribuir los regalos entre dichos niños. Por supuesto que hay una trampa ...
Hoy en día los niños se vuelven exigentes, si el niño es un tipo extraño (la primera inicial es un código ASCII extraño) ¡quiere un regalo extraño! Si es un compañero par (la primera inicial es un código ASCII par), ¡obviamente debe recibir uno par! Sin embargo, cualquier niño divisible por 3 es un chico travieso, travieso, por lo que PPCG Claus debe ignorarlos por completo para que se comporten el próximo año. Para considerar su ruta como un éxito, debe entregar todos los regalos a todos los niños que los merecen y no debe dar a ningún niño demasiados regalos. Si algún niño recibe más de 3 regalos más que sus compañeros, corre el riesgo de convertirse en un niño travieso el próximo año, ¡y eso no está bien! Además, si cualquier niño bueno recibiera un regalo cuando otro niño bueno no lo hizo, eso también convertiría a ese niño en malvado.
Ejemplo
Los niños son los siguientes:
Kids = ["Amy", "Betty", "Clyde", "Dave", "Francine"] = [A,B,C,D,F] = [65,66,67,68,70]
- Betty es la ruina de la humanidad, claramente confabulada con el número 3.
- Amy y Clyde han sido raros desde su nacimiento y odiarían recibir incluso regalos.
- Dave y Francine son normales, incluso, niños; ¡solo deberían recibir regalos!
Los regalos son los siguientes:
Presents = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
Una salida posible sería:
[
['Amy',[1,3,5]],
['Betty',[]],
['Clyde',[7,9,11,13]],
['Dave',[2,4,6,8]],
['Francine',[10,12,14]]
]
Escenarios de excepción
Sin embargo, solo porque PPCG Claus esté listo y dispuesto, no significa que PPCG Claus pueda. Aquí hay una lista de escenarios de excepción donde debe comunicar las malas noticias a PPCG Claus con un mensaje de:
PPCGmas is cancelled!
Los siguientes escenarios resultarán en la cancelación de la Navidad:
- No hay niños
[],[1,2,3]
- Wellp, ellos ded.
- No hay buenos niños.
["Betty"],[1,2,3]
- En serio, joder Betty.
- No hay regalos, o menos regalos que buenos niños.
["Amy","Charles"],[]
- Uno o más no recibirían regalos.["Amy","Charles"],[1]
- Uno o más no recibirían regalos.
- No hay regalos pares / impares para satisfacer a todos los niños buenos.
["Amy","Dave"],[2,4,6]
- Amy está jodida.
Aquí hay una lista de escenarios que no deberían afectar a PPCGmas:
- Regalos sobrantes (Todos los niños deben recibir la cantidad máxima de regalos).
["Amy","Dave"],[2,4,6,8,10,12,14,7,9] = [["Amy",[7,9]],["Dave",[2,4,6,8]]]
Reglas principales reiteradas
- Los niños buenos son pares o impares, según su primera inicial.
- Los niños malos tienen una primera inicial totalmente divisible por 3.
- Todos los niños buenos deben recibir al menos un regalo.
- Ningún niño bueno debe recibir más de 2 regalos más que cualquier otro niño bueno.
- Si va a haber sobras de regalos, debe distribuirlos al máximo, sin violar 4.
- Los niños malos no deben recibir regalos.
- Si se infringe CUALQUIERA de estos, debe generar resultados
PPCGmas is cancelled!
exactamente.
Requisitos de formato de E / S
- La primera entrada debe ser una cadena delimitada por matriz / lista / delimitada por comas de nombres completos, no solo la primera inicial.
- La segunda entrada debe ser una serie de enteros positivos delimitados por comas / listas / comas.
- El resultado puede ser cualquier denotación de cómo distribuyó los regalos que tiene sentido; o
PPCGmas is Cancelled!
.
Criterio ganador: code-golf
TL; DR: Betty es una idiota, no compitas.
fuente
3
? EDITAR : Si uno debe "joder a Betty", ¿por qué está ella en el desafío?Respuestas:
APL, 171 bytes
Esto toma los regalos como argumento izquierdo, los hijos como argumento derecho, y devuelve una matriz donde la primera columna contiene los nombres de los hijos y la segunda columna contiene los regalos que reciben.
Casos de prueba:
Versión sin golf aquí.
fuente
JavaScript (ES6),
525492454453 bytes-71 bytes gracias a @Guedes -1 bit gracias a @Jake Cobb
Pruébalo en línea!
Versión sin golf
Puede ser más golf, creo. Acabo de hacer una traducción literal de la versión sin golf.
Esto ahora es más corto que la suma del CharCode que compone "santa" (115 + 97 + 110 + 116 + 97 = 535). Yeay
fuente
C[0]
en lugar deC.charCodeAt(0)
guardar 11 bytes. Además, cuando una propiedad se repite muchas veces, puede almacenar su nombre comoL='length'
y usar eni[L]
lugar dei.length
.P(["Amy", "Betty", "Clyde"],[1,2,3,4,5,6,7,8,9,10,11,12,13,14]);
Python 2,
334355354 bytesPerdió 21 bytes para manejar el caso de hijos únicos o pares.
Guardado 1 byte gracias a @TuukkaX.
fuente
ord('A')%3==0
esFalse
pero1-ord('A')%3
es-1
.%3<1
Deberia trabajar.Javascript (ES6),
218216 bytesLa salida (si no es la cadena de error) es un objeto cuyas claves son los nombres de los niños; el valor es la matriz de regalos que recibe el niño.
Ahorré dos bytes cuando me di cuenta de que tenía un par de paréntesis redundantes.
Versión sin golf:
fuente