(Eu pretendia postar isso em 1542: o conflito de agendamento ainda era o xkcd atual, mas eu tinha um conflito de agendamento.)
Entrada
A entrada será uma lista de 3n
elementos, que representam n
eventos. O primeiro elemento em cada grupo de 3 será o nome de um evento; o segundo e o terceiro, o horário inicial e final, respectivamente. Por exemplo:
foo 12 34 bar 56 78
representa um evento foo
que começa no "horário 12" (os horários são representados simplesmente por números inteiros; você pode pensar neles como minutos depois da meia-noite) e termina às 34, e um segundo evento bar
que começa às 56 e termina às 78.
Os nomes dos eventos sempre serão compostos apenas por caracteres alfanuméricos e os horários serão sempre números inteiros ≥ 0 e <1440. O horário de término será sempre pelo menos 1 maior que o horário de início. Não é garantido que eles sejam classificados de forma alguma.
Se você preferir, considere isso como uma única string separada por espaço; caso contrário, deve ser tomado como uma matriz, lista, vetor ou equivalente do seu idioma.
Saída
A saída deve ser uma lista separada por espaços de nomes de eventos. As regras para as quais os nomes de eventos serão exibidos:
Nenhum dos eventos que você produz pode entrar em conflito entre si. Por exemplo, com a entrada
a 0 10 b 5 15
, você não pode produzir os doisa
eb
porque os horários estão em conflito (ou seja, se sobrepõem parcialmente). Se um evento terminar exatamente quando outro iniciar, você poderá incluir os dois.Você não pode exibir o evento chamado
NSCC
("Competição Nacional de Conflitos de Agendamento"), do qual sempre haverá exatamente um deles na entrada. Você também deve gerar pelo menos um evento em conflito (parcialmente sobreposto) comNSCC
(e sempre haverá pelo menos um deles).Você deve gerar o maior número possível de eventos enquanto segue as duas regras acima. (Isso é para que você pareça o mais ocupado possível, para que a falta do NSCC pareça mais credível.)
Isso também pode ser produzido como uma única sequência separada por espaço ou uma matriz, lista, vetor etc.
Pode haver mais de uma saída possível.
Casos de teste
Observe que as saídas listadas são apenas exemplos. Seu código pode gerar algo diferente, desde que siga as três regras acima (principalmente, isso significa que deve haver a mesma quantidade de eventos que o exemplo).
Em: UnderwaterBasketWeavingConvention 50 800 NSCC 500 550
Fora:UnderwaterBasketWeavingConvention
Em: SconeEating 0 50 RegexSubbing 45 110 CodeGolfing 95 105 NSCC 100 200
Fora:SconeEating CodeGolfing
Em: VelociraptorHunting 0 300 NerdSniping 200 500 SEChatting 400 700 DoorknobTurning 650 750 NSCC 725 775
Fora:NerdSniping DoorknobTurning
Em: NSCC 110 115 A 100 120 B 120 140 C 105 135 D 100 105 E 135 500
Fora:C D E
Em: A 800 900 NSCC 700 1000 B 650 750 C 950 1050 D 655 660 E 660 665 F 1030 1040 G 1040 1060
Fora:A D E F G
Em: A 10 11 B 11 12 C 12 13 D 13 14 NSCC 15 1090 E 10 16
Fora:E
Sinta-se à vontade para adicionar mais casos de teste em uma edição se houver casos extremos que eu perdi.
Regras
Seu código deve ser concluído dentro de 30 segundos para todos os casos de teste fornecidos (isso é mais uma verificação de integridade, pois provavelmente deve ser concluído muito mais rapidamente em todos os casos de teste combinados) em uma máquina pessoal razoável.
Isso é código-golfe , então o código mais curto em bytes vence.
underwaterBasketWeavingConvention 50 800 nscc 550
vez do seu exemplo?