Los elfos de Papá Noel necesitan ayuda para determinar si su lote actual de regalos encajará en el trineo de Papá Noel. Escriba el programa más corto posible en el idioma que elija para ayudarlos.
Restricciones
- El trineo de Santa mide 6 pies de ancho por 12 pies de largo y mide 4 pies de profundidad.
- Los regalos pueden ser frágiles, por lo que no pueden apilarse uno encima del otro.
- Puedes rotar y voltear los regalos como quieras, pero Santa es un tipo bastante obsesivo-compulsivo, así que mantén las rotaciones en múltiplos de 90 grados.
- Las regulaciones de salud y seguridad del Polo Norte estipulan que los presentes no pueden sobresalir más de 1 pie por encima de la parte superior de un trineo (por lo tanto, no pueden tener más de 5 pies de altura).
Entrada
La entrada estará activada STDIN
y será un número entero que representa el número de regalos en el lote seguido de una lista de las dimensiones de los regalos: 1 regalo por línea, 3 dimensiones (en pies) separadas por espacios.
Ejemplos:
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
Salida
La salida debería ser la palabra 'SÍ' si los regalos se pueden empacar en el trineo o 'NO' si no se pueden.
Salida para los ejemplos anteriores:
YES
YES
NO
NO
Scripts de prueba
Como antes, me he apropiado de algunos scripts de prueba escritos por Joey y Ventero para crear algunas pruebas para esta tarea:
Uso: ./test [your program and its arguments]
Recompensas
Cada entrada que pueda verificar que cumpla con las especificaciones, pase las pruebas y obviamente haya tenido algún intento de jugar al golf recibirá un voto positivo de mí (así que proporcione instrucciones de uso con su respuesta). La solución más corta para finales de 2011 será aceptada como la ganadora.
Respuestas:
Haskell, 312
318caracteresPor alguna razón que no entiendo completamente en este momento, no termina sus pruebas # 9 y # 16 en un tiempo razonable. Pero no dijiste nada sobre el rendimiento, ¿verdad?
373
383caracteresEsta versión funciona mucho más rápido para los ejemplos: primero comprueba si no es imposible simplemente porque el área es demasiado pequeña, y luego comienza con las parcelas más grandes en lugar de insertarlas en el orden dado. Tenga en cuenta que la detección de área no es perfecta: no considera las rotaciones, por lo que en algunas entradas puede dar resultados incorrectos. Pero funciona con el script de prueba.
fuente
Python, 461 caracteres
L
verifica recursivamente si los rectángulosP
pueden colocarse en el trineo, dondez
hay una máscara de bits de celdas que ya están ocupadas. LaS
asignación determina qué camino está arriba para cada uno de los paquetes (la dimensión más grande <= 5 va verticalmente).El código es potencialmente exponencial, pero es rápido en todas las entradas de prueba.
fuente
GolfScript, 130 caracteres
Me llevó bastante tiempo ejecutarlo en GolfScript. Cualquier intento de jugar golf más rompió algunos de los casos de prueba.
Tenga en cuenta que esta versión puede volverse increíblemente lenta si la ejecuta con demasiados regalos.
fuente
./test ruby golfscript.rb howard.gs
pero me está dando errores. ¿Cómo debería invocarlo?;"1\n6 12 5"
. Ej. ) A la secuencia de comandos dada.