Les elfes du père Noël ont besoin d'aide pour déterminer si leur lot actuel de cadeaux rentrera dans le traîneau du père Noël. Écrivez le programme le plus court possible dans la langue de votre choix pour les aider.
Contraintes
- Le traîneau du Père Noël mesure 6 pieds de large par 12 pieds de long et est de 4 pieds de profondeur.
- Les cadeaux peuvent être fragiles, donc ils ne peuvent pas être empilés les uns sur les autres.
- Vous pouvez faire pivoter et retourner les cadeaux comme vous le souhaitez, mais le Père Noël est un gars plutôt obsessionnel-compulsif, alors gardez les rotations à des multiples de 90 degrés.
- Les règles de santé et de sécurité du pôle Nord stipulent que les cadeaux ne doivent pas dépasser de plus de 1 pied au-dessus du haut d'un traîneau (ils ne doivent donc pas dépasser 5 pieds de haut).
Contribution
L'entrée sera activée STDIN
et sera un entier représentant le nombre de cadeaux dans le lot suivi d'une liste des dimensions des cadeaux - 1 présent par ligne, 3 dimensions (en pieds) séparées par des espaces.
Exemples:
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
Production
La sortie devrait simplement être le mot «OUI» si les cadeaux peuvent être emballés dans le traîneau ou «NON» s'ils ne le peuvent pas.
Sortie pour les exemples ci-dessus:
YES
YES
NO
NO
Scripts de test
Comme précédemment, je me suis approprié des scripts de test écrits par Joey et Ventero pour créer des tests pour cette tâche: -
Usage: ./test [your program and its arguments]
Récompenses
Chaque entrée dont je peux vérifier qu'elle répond aux spécifications, réussit les tests et a évidemment eu une tentative de golf recevra un vote positif de ma part (veuillez donc fournir des instructions d'utilisation avec votre réponse). La solution la plus courte d'ici la fin de 2011 sera acceptée comme gagnante.
Réponses:
Haskell, 312
318caractèresPour une raison que je ne comprends pas complètement pour le moment, cela ne termine pas vos tests # 9 et # 16 dans un délai raisonnable. Mais vous n'avez rien dit sur la performance, n'est-ce pas?
373
383caractèresCette version fonctionne beaucoup plus rapidement pour les exemples: elle vérifie d'abord si ce n'est pas impossible simplement parce que la zone est trop petite, puis elle commence par les plus grandes parcelles plutôt que de les insérer dans l'ordre donné. Notez que la détection de zone n'est pas parfaite: elle ne prend pas en compte les rotations, elle peut donc sur certaines entrées donner de mauvais résultats. Mais cela fonctionne avec le script de test.
la source
Python, 461 caractères
L
vérifie récursivement si les rectanglesP
peuvent être placés dans le traîneau, où sez
trouve un masque de cellules déjà occupé. L'S
affectation détermine le sens de montée pour chacun des packages (la plus grande dimension <= 5 va verticalement).Le code est potentiellement exponentiel, mais il est rapide sur toutes les entrées de test.
la source
GolfScript, 130 caractères
Il a fallu un certain temps pour le faire fonctionner dans GolfScript. Toute tentative de jouer au golf a encore brisé certains des cas de test.
Soyez averti que cette version peut devenir incroyablement lente si vous l'exécutez avec trop de cadeaux.
la source
./test ruby golfscript.rb howard.gs
mais ça me donne des erreurs. Comment dois-je l'invoquer?;"1\n6 12 5"
) du script donné.