(Я хотел опубликовать это в то время, когда 1542 год: Конфликт планирования все еще был текущим xkcd, но у меня был конфликт планирования.)
вход
На входе будет список 3n
элементов, которые представляют n
события. Первым элементом в каждой группе из 3 будет название события; второе и третье, время начала и окончания соответственно. Например:
foo 12 34 bar 56 78
представляет событие, foo
которое начинается в «время 12» (времена представлены просто целыми числами; вы можете думать о них как минуты после полуночи) и заканчивается в 34, а второе событие bar
начинается в 56 и заканчивается в 78.
Имена событий всегда будут состоять только из буквенно-цифровых символов, а время всегда будет целым числом ≥ 0 и <1440. Время окончания всегда будет как минимум на 1 больше, чем время начала. Они не гарантированы, чтобы быть отсортированными в любом случае.
Если вы хотите, вы можете принять это как одну строку через пробел; в противном случае его следует принимать как массив, список, вектор или эквивалент вашего языка.
Выход
Вывод должен быть разделенным пробелами списком имен событий. Правила, для которых имена событий выводятся, следующие:
Ни одно из событий, которые вы выводите, не может конфликтовать друг с другом. Например, при вводе
a 0 10 b 5 15
вы не можете выводить и то,a
и другое,b
поскольку время конфликтует (то есть частично перекрывается). Если событие заканчивается точно так же, как начинается другое, вы можете включить оба.Вы не можете выводить событие под названием
NSCC
(«Конкурс конфликтов по национальному календарному плану»), в котором всегда будет одно из входных данных. Вы также должны вывести хотя бы одно событие, которое конфликтует (частично перекрывается)NSCC
(и всегда будет хотя бы одно из них).Вы должны вывести как можно больше событий, следуя приведенным выше двум правилам. (Это так, что вы выглядите настолько занятым, насколько это возможно, так что отсутствие NSCC кажется более вероятным.)
Это также может быть выведено либо в виде отдельной строки через пробел, либо в виде массива, списка, вектора и т. Д.
Может быть более одного возможного выхода.
Контрольные примеры
Обратите внимание, что перечисленные результаты являются только примерами. Ваш код может выводить что-то другое, если он все еще следует трем правилам, указанным выше (в частности, это означает, что количество событий должно быть таким же, как в примере).
In: UnderwaterBasketWeavingConvention 50 800 NSCC 500 550
Out:UnderwaterBasketWeavingConvention
In: SconeEating 0 50 RegexSubbing 45 110 CodeGolfing 95 105 NSCC 100 200
Out:SconeEating CodeGolfing
In: VelociraptorHunting 0 300 NerdSniping 200 500 SEChatting 400 700 DoorknobTurning 650 750 NSCC 725 775
Out:NerdSniping DoorknobTurning
In: NSCC 110 115 A 100 120 B 120 140 C 105 135 D 100 105 E 135 500
Out:C D E
In: A 800 900 NSCC 700 1000 B 650 750 C 950 1050 D 655 660 E 660 665 F 1030 1040 G 1040 1060
Out:A D E F G
In: A 10 11 B 11 12 C 12 13 D 13 14 NSCC 15 1090 E 10 16
Out:E
Не стесняйтесь добавлять больше тестовых случаев в редактирование, если есть пропущенные грани.
правила
Ваш код должен завершиться в течение 30 секунд для всех предоставленных тестовых случаев (это скорее проверка работоспособности, поскольку, вероятно, он должен завершиться гораздо быстрее для всех тестовых случаев вместе) на приемлемой персональной машине.
Это код-гольф , поэтому выигрывает самый короткий код в байтах.
underwaterBasketWeavingConvention 50 800 nscc 550
вместо вашего примера?