Ajude o PPCG Claus a entregar seus presentes
Visão geral
PPCG Claus está atrasado na entrega de presentes porque hoje em dia temos tantos pequenos meninos estranhos por aí. Isso torna muito mais difícil para o PPCG Claus levar todos os presentes para o local correto. Seu desafio é ajudá-lo a entregar os presentes corretamente.
A complexidade
Dada uma lista de nomes em maiúscula representando as crianças para as quais ele deveria entregar e uma lista de presentes representados por números, você deve descobrir como distribuir os presentes entre as crianças mencionadas. Claro que há um problema ...
Hoje em dia as crianças estão ficando exigentes, se o garoto é um sujeito estranho (a primeira inicial é estranha com código ASCII), ele quer um presente estranho! Se ele é um companheiro par (a primeira inicial é o código ASCII mesmo), obviamente ele deve receber um par! Qualquer criança divisível por 3, no entanto, é um rapaz travesso, travesso, então o PPCG Claus deve ignorá-los completamente para fazê-los se comportar no próximo ano. Para considerar seu caminho um sucesso, ele deve entregar todos os presentes a todas as crianças que os merecem e não deve dar muitos presentes a nenhuma criança. Se uma criança recebe mais de três presentes do que seus pares, ela corre o risco de se tornar uma criança travessa no próximo ano, e isso não está certo! Além disso, se qualquer criança boa recebesse um presente quando outra criança boa não, isso também tornaria a criança má.
Exemplo
As crianças são as seguintes:
Kids = ["Amy", "Betty", "Clyde", "Dave", "Francine"] = [A,B,C,D,F] = [65,66,67,68,70]
- Betty é a ruína da humanidade, claramente em desacordo com o número 3.
- Amy e Clyde são esquisitos desde o nascimento e odeiam receber até presentes.
- Dave e Francine são normais, até crianças; eles devem receber apenas presentes!
Os presentes são os seguintes:
Presents = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
Uma saída possível seria:
[
['Amy',[1,3,5]],
['Betty',[]],
['Clyde',[7,9,11,13]],
['Dave',[2,4,6,8]],
['Francine',[10,12,14]]
]
Cenários de exceção
No entanto, apenas porque o PPCG Claus está pronto e disposto, não significa que o PPCG Claus possa. Aqui está uma lista de cenários de exceção em que você deve apresentar as más notícias ao PPCG Claus com uma mensagem de:
PPCGmas is cancelled!
Os seguintes cenários resultarão no cancelamento do Natal:
- Não há filhos.
[],[1,2,3]
- Wellp, eles deduziram.
- Não há bons filhos.
["Betty"],[1,2,3]
- Sério, foda-se Betty.
- Não há presentes, ou menos presentes do que bons filhos.
["Amy","Charles"],[]
- Um ou mais não receberiam presentes.["Amy","Charles"],[1]
- Um ou mais não receberiam presentes.
- Não há presentes ímpares / pares para satisfazer todos os bons filhos.
["Amy","Dave"],[2,4,6]
- Amy está ferrada.
Aqui está uma lista de cenários que não devem afetar o PPCGmas:
- Sobras de presentes (todas as crianças devem receber a quantidade máxima de presentes).
["Amy","Dave"],[2,4,6,8,10,12,14,7,9] = [["Amy",[7,9]],["Dave",[2,4,6,8]]]
Regras Principais Reiteradas
- Os bons filhos são pares ou ímpares, com base em sua primeira inicial.
- Filhos maus têm uma primeira inicial totalmente divisível por 3.
- Todas as crianças boas devem receber pelo menos um presente.
- Nenhuma criança boa deve receber mais de 2 presentes a mais do que qualquer outra criança boa.
- Se houver restos de presentes, você deve distribuí-los ao máximo, sem violar 4.
- Filhos maus não devem receber presentes.
- Se ALGUM deles for violado, você deve enviar
PPCGmas is cancelled!
exatamente.
Requisitos de formato de E / S
- A primeira entrada deve ser uma sequência de nomes completos, delimitada por vírgula / matriz / lista, e não apenas a primeira inicial.
- A segunda entrada deve ser uma cadeia de caracteres de lista / lista / delimitada por vírgulas de números inteiros positivos.
- A saída pode ser qualquer indicação de como você distribuiu os presentes que faz sentido; ou
PPCGmas is Cancelled!
.
Critério vencedor: code-golf
TL; DR: Betty é um idiota, não concorra.
fonte
3
? EDIT : Se alguém deveria "estragar a Betty", por que ela está no desafio?Respostas:
APL, 171 bytes
Isso leva os presentes como argumento à esquerda, os filhos como argumento à direita e retorna uma matriz em que a primeira coluna contém os nomes dos filhos e a segunda coluna contém os presentes que recebem.
Casos de teste:
Versão não destruída aqui.
fonte
JavaScript (ES6),
525492454453 bytes-71 bytes graças a @Guedes -1 bit graças a @Jake Cobb
Experimente online!
Versão sem golfe
Pode ser mais jogado, eu acho. Acabei de fazer uma tradução literária da versão não-golfe.
Agora é menor que a soma do CharCode que compõe "santa" (115 + 97 + 110 + 116 + 97 = 535). Sim
fonte
C[0]
em vez deC.charCodeAt(0)
salva 11 bytes. Além disso, quando uma propriedade se repete muitas vezes, você pode armazenar seu nome comoL='length'
e usar emi[L]
vez dei.length
.P(["Amy", "Betty", "Clyde"],[1,2,3,4,5,6,7,8,9,10,11,12,13,14]);
Python 2,
334355354 bytesPerdeu 21 bytes para lidar com casos de filhos únicos ou pares.
Guardou 1 byte graças a @TuukkaX.
fonte
ord('A')%3==0
éFalse
mas1-ord('A')%3
é-1
.%3<1
Deveria trabalhar.Javascript (ES6),
218216 bytesA saída (se não for a string de erro) é um objeto cujas chaves são os nomes das crianças; o valor é a matriz de presentes que o filho recebe.
Salvei dois bytes quando percebi que tinha um par de parênteses redundantes.
Versão não destruída:
fonte