Эльфы Санты нуждаются в помощи, чтобы определить, поместится ли их текущая партия подарков в сани Санты. Напишите самую короткую программу на выбранном вами языке, чтобы помочь им.
Ограничения
- Санты Санты имеют размеры 6 футов в ширину и 12 футов в длину и 4 фута в глубину.
- Подарки могут быть хрупкими, поэтому их нельзя складывать друг на друга.
- Вы можете вращать и переворачивать подарки по своему желанию, но Санта довольно одержимо-компульсивный парень, поэтому держите повороты до кратных 90 градусов.
- Нормы и правила безопасности на Северном полюсе предусматривают, что подарки не должны выступать более чем на 1 фут выше вершины саней (поэтому они могут быть не более 5 футов в высоту).
вход
Ввод будет включен STDIN
и будет одним целым числом, представляющим количество подарков в пакете, за которым следует список размеров подарков - 1 подарок на строку, 3 измерения (в футах), разделенные пробелами.
Примеры:
1
6 12 5
6
1 12 3
1 12 4
1 12 1
1 12 5
1 12 3
1 12 5
1
4 3 13
1
6 12 6
Выход
На выходе должно быть просто слово «ДА», если подарки можно упаковать в сани, или «НЕТ», если они не могут.
Вывод для приведенных выше примеров:
YES
YES
NO
NO
Тестовые сценарии
Как и прежде, я назначил несколько тестовых сценариев, написанных Джои и Вентеро, чтобы создать несколько тестов для этой задачи: -
Использование: ./test [your program and its arguments]
Награды
Каждая заявка, которую я могу проверить, которая соответствует спецификации, проходит тесты и, очевидно, была попытка сыграть в гольф, получит от меня отклик (поэтому, пожалуйста, предоставьте инструкции по использованию вместе с вашим ответом). Самое короткое решение к концу 2011 года будет принято победителем.
Ответы:
Haskell, 312
318символовПо какой-то причине, которую я до конца не понимаю, он не завершает ваши тесты № 9 и № 16 в разумные сроки. Но ты ничего не сказал о производительности, не так ли?
373
383символаЭта версия работает намного быстрее для примеров: сначала она проверяет, не является ли это невозможным просто потому, что область слишком мала, а затем начинает с самых больших участков, а не вставляет их в указанном порядке. Обратите внимание, что определение области не является идеальным: оно не учитывает повороты, поэтому может на некоторых входах давать неверные результаты. Но это работает с тестовым скриптом.
источник
Python, 461 символ
L
рекурсивно проверяет,P
можно ли поместить прямоугольники в сани, гдеz
находится битовая маска уже занятых ячеек.S
Назначение определяет , какой путь вверх для каждого из пакетов (наибольший размер <= 5 проходит вертикально).Код потенциально экспоненциальный, но он быстрый на всех входах теста.
источник
GolfScript, 130 символов
Потребовалось некоторое время, чтобы запустить его в GolfScript. Любая попытка сыграть в гольф далее сломала некоторые тестовые случаи.
Пожалуйста, имейте в виду, что эта версия может стать невероятно медленной, если вы запустите ее с большим количеством подарков.
источник
./test ruby golfscript.rb howard.gs
но это дает мне ошибки. Как я должен вызывать это?;"1\n6 12 5"
) для данного сценария.