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
Antworten:
Perl,
210195194193 Zeichenaktualisieren
Die gleichen Ideen, aber zum größten Teil sehr unterschiedlich angewendet.
Laufen Sie mit
perl -p0
(4 Zeichen für die Schalter gezählt).Dies erfordert auch eine Änderung des Bash-Testskripts, um die folgenden Argumente nicht zu stark zu zitieren:
Übrigens, ich schätze die Testskripte sehr, @Joey.
kommentiert:
Änderungen :
{3,}
" durch 3 wörtliche Leerzeichen und den+
Quantifizierer, um ein anderes Zeichen zu speichern1while(...)
Formular, in dem ich das Semikolon am Ende des Skripts weglassen kannOriginal (siehe Verlauf für kommentierte Version)
Ich habe mich bewusst nicht mit @ Howards Perl-Lösung befasst, bis meine funktionierte, aber ich konnte mein Golfspiel verbessern, indem ich mich danach umsah.
Insbesondere die Regexps für Tunneldecken und Erweiterungspfeiler halfen. Gut gemacht, Howard.
Umgekehrt könnte meine Alternative, die Zeilenlänge zu ermitteln, das implizite $ _ für den Ausdruck zu verwenden, das letzte Semikolon wegzulassen und neue Zeilen zu entfernen, Howard auf 222 Zeichen verkürzen.
quelle
bash
Testskript bedanke ich mich bei Ventero. Ich habe einfach genommen, was er erstellt hat, und habe darauf geschlagen, bis es etwas funktioniert hat ;-)Perl, 234 Zeichen
Dies ist eine reine Perl-Regex-Lösung. Es besteht alle gegebenen Testfälle.
Die identische, aber besser lesbare Version zeigt die Schritte, die ausgeführt wurden, um das Ergebnis zu erhalten:
quelle
C ++,
662622598 Zeichen, 4 ZeilenDas sollte es sein, ich habe es mit dem Powershell-Skript getestet, also sollte es in Ordnung sein ...
Bearbeiten 1
Ersetzte alle Zeichenkonstanten durch Zahlen, entfernte aufeinanderfolgende Aufrufe von std :: cout + ein paar kleinere Änderungen.
Bearbeiten 2
Letzte Änderung, nur um weniger als 600 zu erhalten. Hat g [t] [f] als #define herausgenommen und ein paar Dinge verschoben.
quelle
#define
std::
?Ruby,
382356353 ZeichenIch überlegte, einer Nicht-Regex-Lösung eine Chance zu geben.
Der größte Platzsparer ist hier die Verwendung eines bedingten
||
Operators anstelle vonif - elsif - end
. Also anstatt zu schreiben,if(a) lorem_ipsum end
habe ich geschrieben!a||lopem_ipsum
. Größere Blöcke können in Klammern eingeschlossen werden!a||(block)
. Wenn die Bedingung&&
Operatoren einschließt , müssen diese durch Verwendung von Klammern und a!
oder durch Verwendung der Gesetze von De Morgan negiert werden .Und hier ist das gleiche mit mehr Worten
quelle
Scala, 462 Zeichen
Nicht besonders wettbewerbsfähig, aber ich habe heute viel über reguläre Ausdrücke gelernt. :-)
quelle
Erlang, 1182 Zeichen
Überhaupt nicht wettbewerbsfähig. Um ehrlich zu sein, war ich einfach daran interessiert, ein paar schöne ASCII-Kunstwerke zu produzieren, nicht so sehr am Golfen. Beachten Sie, dass hierbei keine regulären Ausdrücke verwendet werden. Stattdessen habe ich die Zustandsmaschine selbst geschrieben. Hierfür ist auch die in der obigen Perl-Lösung erwähnte Korrektur der Überquotierung im Shell-Skript erforderlich.
quelle
Powershell,
300295 287 Bytes-8 Bytes Fix, der aus der Antwort von DCharness hervorgeht .
Ungolfed-Testskript:
Ausgabe:
Erklärung Comics:
quelle