Einführung
Meine Nichte will eine Rennstrecke bauen. Sie hat Holzteile, die zusammenpassen, um die Spur zu bilden. Jedes Teil ist quadratisch und enthält eine andere Form. Ich werde die Rohrzeichen verwenden, um Folgendes zu veranschaulichen:
│
: die Straße, die vertikal verläuft─
: die Straße, die horizontal verläuft┌
┐
└
┘
: die Straßen, die sich in eine Richtung drehen┼
: Eine Brücke mit einer Unterführung
Seltsamerweise gibt es keine T-Stücke.
Hier ist ein Beispiel für eine mögliche Rennstrecke:
┌─┐
│ │┌─┐
│ └┼─┘
└──┘
Die Regeln für eine gültige Rennstrecke lauten wie folgt:
- Es kann keine Straßen geben, die ins Nirgendwo führen.
- Es muss eine Schleife bilden (und alle Teile müssen Teil derselben Schleife sein).
- An den Brücken / Unterführungen kann man nicht abbiegen (also muss man sie gerade durchfahren).
Leider sind die Rennstreckenstücke, die meine Nichte und ich haben, begrenzt. Aber wir wollen auf jeden Fall alle in der Strecke verwenden. Schreiben Sie ein Programm , das anhand einer Liste der Teile in unserem Inventar eine Rennbahn ausgibt, auf der alle Teile verwendet werden.
Eingabebeschreibung
Wir möchten, dass die Eingabe über STDIN, Befehlszeilenargumente, das Lesen von Dateien oder eine Benutzereingabefunktion (wie z. B. raw_input
oder prompt
) erfolgt. Die Eingabe erfolgt durch Kommas getrennte positive Ganzzahlen in der Form
│,─,┌,┐,└,┘,┼
wo jedes von denen die Menge dieses bestimmten Stückes darstellt, das wir haben. So zum Beispiel die Eingabe:
1,1,1,1,1,1,1
würde bedeuten, dass wir eines von jedem Stück hatten.
Ausgabebeschreibung
Geben Sie eine Rennstrecke mit den oben aufgeführten Rohrzeichen aus. Die Rennstrecke sollte genau die Nummer jedes in der Eingabe angegebenen Stücks verwenden - nicht mehr und nicht weniger. Für jede Eingabe gibt es mindestens eine gültige Rennstrecke.
Beispiel Ein- und Ausgänge
Eingang: 3,5,2,2,2,2,1
Eine mögliche Ausgabe:
┌─┐
│ │┌─┐
│ └┼─┘
└──┘
Eingang: 0,0,1,4,4,1,3
Eine mögliche Ausgabe:
┌┐
└┼┐
└┼┐
└┼┐
└┘
Antworten:
Ruby 664
671 677 687 701(678 Byte)Dies ist nicht das kürzeste Programm, das ich mir vorstellen konnte, aber ich habe etwas Kürze für die Ausführungsgeschwindigkeit geopfert.
Sie können mit dem Programm experimentieren hier . Beachten Sie, dass ideone ein Ausführungszeitlimit hat. Bei Eingaben, die aus mehr als 12 Teilen bestehen, wird das Programm wahrscheinlich eine Zeitüberschreitung aufweisen.
Es gibt auch eine Testsuite für das Programm. Beachten Sie, dass die letzten beiden Tests auf ideone aufgrund des oben genannten Zeitlimits deaktiviert sind. Um diese Tests zu aktivieren, löschen Sie das
x_
Präfix aus ihren Namen.Das Programm findet eine Lösung mit der Tiefensuche. Es platziert die Teile einzeln und verfolgt die losen Enden. Die Suche wird abgebrochen, wenn keine losen (nicht verbundenen) Enden mehr vorhanden sind und alle Teile platziert wurden.
Dies ist das ungolfed Programm:
quelle