Die Elfen des Weihnachtsmanns brauchen Hilfe, um festzustellen, ob ihre aktuellen Geschenke in den Schlitten des Weihnachtsmanns passen. Schreiben Sie das kürzestmögliche Programm in der Sprache Ihrer Wahl, um ihnen zu helfen.
Einschränkungen
- Der Schlitten des Weihnachtsmanns ist 6 Fuß breit und 12 Fuß lang und 4 Fuß tief.
- Geschenke können zerbrechlich sein, so dass sie möglicherweise nicht übereinander gestapelt werden.
- Sie können die Geschenke drehen und drehen, wie Sie möchten, aber der Weihnachtsmann ist ein ziemlich zwanghafter Kerl, also halten Sie die Drehungen auf ein Vielfaches von 90 Grad.
- Die Gesundheits- und Sicherheitsbestimmungen des Nordpols sehen vor, dass Geschenke nicht mehr als 1 Fuß über der Oberseite eines Schlittens herausragen dürfen (daher dürfen sie nicht höher als 5 Fuß sein).
Eingang
Die Eingabe ist aktiviert STDIN
und besteht aus einer Ganzzahl, die die Anzahl der Geschenke im Stapel darstellt, gefolgt von einer Liste der Dimensionen der Geschenke - 1 Geschenk pro Zeile, 3 Dimensionen (in Fuß), die durch Leerzeichen getrennt sind.
Beispiele:
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
Ausgabe
Die Ausgabe sollte nur das Wort "JA" sein, wenn die Geschenke in den Schlitten gepackt werden können, oder "NEIN", wenn sie nicht können.
Ausgabe für die obigen Beispiele:
YES
YES
NO
NO
Testskripte
Nach wie vor habe ich einige von Joey und Ventero geschriebene Testskripte verwendet , um einige Tests für diese Aufgabe zu erstellen:
Verwendung: ./test [your program and its arguments]
Belohnung
Jeder Eintrag, bei dem ich überprüfen kann, ob er der Spezifikation entspricht, die Tests besteht und offensichtlich versucht hat, Golf zu spielen, wird von mir positiv bewertet (bitte geben Sie Ihre Antwort mit Ihrer Antwort an). Die kürzeste Lösung bis Ende 2011 wird als Gewinner akzeptiert.
Antworten:
Haskell, 312
318ZeichenAus irgendeinem Grund, den ich im Moment nicht vollständig verstehe, werden Ihre Tests Nr. 9 und Nr. 16 nicht in angemessener Zeit abgeschlossen. Aber du hast nichts über Leistung gesagt, oder?
373
383ZeichenDiese Version läuft für die Beispiele viel schneller: Sie prüft zunächst, ob dies nicht unmöglich ist, nur weil der Bereich zu klein ist, und beginnt dann mit den größten Paketen, anstatt sie in der angegebenen Reihenfolge einzufügen. Beachten Sie, dass die Flächenerkennung nicht perfekt ist: Sie berücksichtigt keine Rotationen, sodass bei einigen Eingaben möglicherweise falsche Ergebnisse erzielt werden. Aber es funktioniert mit dem Testskript.
quelle
Python, 461 Zeichen
L
Überprüft rekursiv, ob die Rechtecke inP
den Schlitten gelegt werden können, woz
sich eine Bitmaske von Zellen befindet, die bereits belegt sind. DieS
Zuweisung bestimmt, welcher Weg für jedes der Pakete nach oben geht (die größte Dimension <= 5 verläuft vertikal).Der Code ist möglicherweise exponentiell, aber bei allen Testeingaben ist er schnell.
quelle
GolfScript, 130 Zeichen
Es hat einige Zeit gedauert, bis es in GolfScript zum Laufen kam. Jeder Versuch, Golf zu spielen, brach einige der Testfälle weiter.
Bitte seien Sie gewarnt, dass diese Version unglaublich langsam werden kann, wenn Sie sie mit zu vielen Geschenken ausführen.
quelle
./test ruby golfscript.rb howard.gs
aber es gibt mir Fehler. Wie soll ich es aufrufen?;"1\n6 12 5"
) in das angegebene Skript.