Sie sind für den Bau einer neuen Autobahn verantwortlich. Es führt jedoch durch bergiges Land und benötigt daher zahlreiche Brücken und Tunnel. Die Autobahn selbst sollte auf einer Ebene bleiben.
Eingang
Sie erhalten eine grobe ASCII-Beschreibung, wie die Berge bei der Standardeingabe aussehen, z.
/\
/ \
/\ / \
/\ / \/ \
/ \ / \ /\
/ \/ \ / \
_ / \ /\ / \
\ / \ / \ / \ /\
\ / \ / \/ \/ \
\ / \ /
\/ \/
Die _
in der ersten Spalte markiert den Beginn und die Höhe der Straße. Das Gebirge ist zusammenhängend und wenn das letzte Segment eine Brücke ist, hat es eine gerade Anzahl von Zeichen.
Sie können davon ausgehen, dass eine Eingabezeile nie länger als 100 Zeichen ist und dass es nicht mehr als 15 Zeilen gibt. Jede Zeile hat die gleiche Länge, die am Ende möglicherweise mit Leerzeichen aufgefüllt ist. Die Straße beginnt nie in einem Berg oder als Brücke. Das erste, was der Straßenkachel in der Eingabe folgt, ist entweder ein Gefälle oder ein Gefälle.
Ausgabe
Ausgang ist derselbe Gebirgszug, außer dass es jetzt eine Straße gibt, wo vorher nur ihr Anfang war. Die Ausgabe erfolgt über die Standardausgabe.
Hierfür gibt es zahlreiche Regeln:
Die Straße muss an der im Eingang angegebenen Stelle beginnen und durchgehend auf gleicher Höhe bleiben. Zur Vereinfachung haben wir eine Reihe vorgefertigter Straßenkacheln vorbereitet, die wie folgt aussehen
_
:_______ \ / \/\/
Die Straße muss sich bis zum äußersten Ende des Gebirges erstrecken (dh die Länge der Eingangslinien bestimmt, wie weit die Straße führt).
Tunnel müssen immer dann gebohrt werden, wenn auf einem Berg die Straße gehen muss. Tunnel verlaufen direkt durch den Berg und hinterlassen am Anfang und am Ende Löcher (dh ein Tunnel ersetzt den Hang des Berges durch eine schließende Klammer am Anfang und eine öffnende Klammer am Ende).
Tunnel verlassen einen Tunnel im Berg, der normalerweise eine Decke hat. Unsere vorgefertigten Straßenkacheln können zum Glück zur Verstärkung der Decke verwendet werden, damit der Tunnel nicht zusammenbricht (die Linie über dem Tunnel muss
_
zur Verstärkung des Tunnels verwendet werden):/\ / \ /____\ ___)______(__ \/ \/
Der Tunnel muss nicht verstärkt werden, wenn der Berg nicht hoch genug ist. Es klingt auch komisch, aber mir wurde gesagt, dass die vorgefertigten Straßenkacheln stark genug sind, um auch in diesem Fall im Abstand zu halten (keine Tunneldecke wird gezogen, wenn sich ein Hang direkt über dem Tunnel befindet):
/\ /\/__\ ___)______(__ \/ \/
Brücken werden immer dann benötigt, wenn die Straße einen Abgrund überqueren muss. Bei kurzen Brücken sind die vorgefertigten Straßenkacheln stark genug, müssen jedoch am Anfang und am Ende der Brücke noch etwas abgestützt werden (der erste Gefälle unter der Brücke und der letzte Gefälle nach oben werden ersetzt,
Y
sodass ein Stützträger für die Brücke vorhanden ist ):_____ Y Y \/
Längere Brücken benötigen zusätzliche Unterstützung. Eine lange Brücke besteht aus mehr als sechs nicht unterstützten Straßenziegeln in einer Reihe. Lange Brücken brauchen eine Säule in der Mitte. Säulen sind leicht mit unseren vorgefertigten Säulenbalken gebaut , die wie folgt aussehen:
|
. Jede Säule benötigt zwei davon und sie erstrecken sich bis zum Grund des Abgrunds:_____________________________ Y || Y \ /\ || /\ /\/ \ /\ / \||/ \ /\/ \/ \/ \/ \/
Da der Eingang nur einen Teil des gesamten Gebirgszugs darstellt, den die Autobahn durchqueren muss, kann er abrupt in der Mitte einer Brücke oder eines Tunnels enden. Die lange Brückenregel gilt weiterhin für das letzte Segment, und Sie können davon ausgehen, dass der erste Teil hinter der angegebenen Eingabe die Brücke wieder unterstützt.
Nach den oben genannten Regeln erhalten wir für unsere Eingabe Folgendes:
/\
/ \
/\ / \
/\ / \/ \
/ \ / \ /\
/____\/______________\ /__\
_________)______________________(________)(____)____(______
Y Y Y Y Y Y Y YY
\ / \ / \/ \/ \
\ / \ /
\/ \/
Der kürzeste Code nach Anzahl der Zeichen gewinnt. Nachgestellte Leerzeichen in den Zeilen werden zur Überprüfung ignoriert.
Probeneingabe 1
_
\ /\
\ / \
\ / \
\ /\ / \ /\ /
\ /\ / \ / \ /\ /\/ \ /
\ / \ / \/ \ / \/ \/\ /
\/ \ / \ / \/
\ / \/
\/
Beispielausgabe 1
____________________________________________________________
Y || YY ||
\ || / \ ||
\ || / \ ||
\ || /\ / \ || /\ /
\ /\ || / \ / \ /\ |/\/ \ /
\ / \ || / \/ \ / \/ \/\ /
\/ \ || / \ / \/
\||/ \/
\/
Probeneingabe 2
/\ /\
/ \/ \ /
/\ / \ /\ /
/\ / \ / \/ \ /
/ \ / \/\ / \ /\ /
/ \/ \ / \ / \ /
_/ \ / \/ \/
\ /
\ /\/
\ /\ /
\/ \ /
\ /
\/
Beispielausgabe 2
/\ /\
/ \/ \ /
/\ / \ /\ /
/\ / \ / \/ \ /
/ \ / \/\ / \ /\ /
/____\/________\ /__________________\ /__\ /____
_)________________(__________________)____________________()____()_____
Y || Y
\ || /\/
\ /\ || /
\/ \|| /
\| /
\/
Hinweis
Nachgestellte Leerzeichen in der Ausgabe werden für den Vergleich mit den Referenzlösungen ignoriert.
Gewinnbedingung
Der kürzeste Code gewinnt, wie es im Golf üblich ist. Bei einem Gleichstand gewinnt die frühere Lösung.
Testfälle
Es gibt zwei Testskripte mit identischen Testfällen:
Der Aufruf erfolgt in beiden Fällen: <test script> <my program> [arguments]
zB ./test ruby bridges.rb
oder ./test.ps1 ./bridges.exe
.
Noch ein Hinweis
Diese Aufgabe war Teil eines Golfwettbewerbs an meiner Universität im Zeitraum 2011-24. Die Partituren und Sprachen unserer Teilnehmer waren wie folgt:
- 304 - Perl
- 343 - C
- 375 - C
- 648 - Python
Unsere eigene Lösung (dank Ventero) war
- 262 - Rubin