Usted es responsable de construir una nueva autopista. Sin embargo, conduce a través de tierras montañosas y, por lo tanto, necesita numerosos puentes y túneles. La autopista en sí misma debe permanecer en un solo nivel.
Entrada
Se le proporciona una descripción ASCII aproximada de cómo se ven las montañas en la entrada estándar, como las siguientes:
/\
/ \
/\ / \
/\ / \/ \
/ \ / \ /\
/ \/ \ / \
_ / \ /\ / \
\ / \ / \ / \ /\
\ / \ / \/ \/ \
\ / \ /
\/ \/
El _
en la primera columna marca el comienzo y el nivel de la carretera. La cadena montañosa es contigua y si el último segmento será un puente, tiene un número par de caracteres.
Puede suponer que una línea de entrada nunca tiene más de 100 caracteres y que no hay más de 15 líneas. Cada línea tiene la misma longitud que posiblemente esté rellenada con espacio al final. El camino nunca comienza dentro de una montaña o como un puente. Lo primero que sigue al mosaico de carreteras en la entrada es una pendiente hacia abajo o hacia arriba.
Salida
La salida es la misma cadena montañosa, excepto que ahora hay un camino donde antes solo era su comienzo. La salida se da en la salida estándar.
Para esto hay numerosas reglas:
El camino debe comenzar en el lugar indicado en la entrada y permanecer en el mismo nivel en todo momento. Para hacerlo más fácil, hemos preparado una serie de mosaicos de carreteras prefabricados que se ven así
_
:_______ \ / \/\/
El camino debe extenderse hasta el extremo más alejado de la cordillera (es decir, la longitud de las líneas de entrada determina qué tan lejos va el camino).
Los túneles se deben perforar siempre que una montaña es donde el camino debe ir. Los túneles van directamente a través de la montaña y dejan agujeros al principio y al final (es decir, un túnel reemplaza la pendiente de la montaña con un paréntesis de cierre al comienzo y un paréntesis de apertura al final).
Los túneles dejan, bueno, un túnel en la montaña que generalmente tiene un techo. Afortunadamente, nuestras losetas de carretera prefabricadas se pueden usar para reforzar el techo de modo que el túnel no se colapse (la línea sobre el túnel tiene que usarse
_
para reforzar el túnel):/\ / \ /____\ ___)______(__ \/ \/
No es necesario reforzar el túnel cuando la montaña no está lo suficientemente alta por encima. A mí también me suena raro, pero me han dicho que las baldosas prefabricadas son lo suficientemente fuertes como para resistir incluso cuando están espaciadas en ese caso (no se dibuja el techo del túnel cuando hay una pendiente directamente sobre el túnel):
/\ /\/__\ ___)______(__ \/ \/
Se necesitan puentes cada vez que el camino necesita cruzar un abismo. Para puentes cortos, las baldosas prefabricadas son lo suficientemente fuertes, pero aún necesitan un poco de apoyo al principio y al final del puente (la primera pendiente descendente debajo del puente y la última pendiente ascendente se reemplazan por
Y
una viga de soporte para el puente ):_____ Y Y \/
Los puentes más largos necesitan soporte adicional. Un puente largo es aquel que tiene más de seis mosaicos de carreteras sin soporte seguidos. Los puentes largos necesitan un pilar en su centro. Pilares son fácilmente construidos con vigas de nuestros pilares prediseñados que se parecen a esto:
|
. Cada pilar necesita dos de ellos y se extienden hasta el fondo del abismo:_____________________________ Y || Y \ /\ || /\ /\/ \ /\ / \||/ \ /\/ \/ \/ \/ \/
Dado que la entrada solo representa una parte de toda la cadena montañosa por la que se debe construir la autopista, puede terminar abruptamente en medio de un puente o túnel. La regla del puente largo todavía se aplica al segmento final y puede suponer que la primera parte más allá de la entrada dada admite nuevamente el puente.
Siguiendo las reglas anteriores obtenemos lo siguiente para nuestra entrada:
/\
/ \
/\ / \
/\ / \/ \
/ \ / \ /\
/____\/______________\ /__\
_________)______________________(________)(____)____(______
Y Y Y Y Y Y Y YY
\ / \ / \/ \/ \
\ / \ /
\/ \/
El código más corto por conteo de personajes gana. El espacio en blanco al final de las líneas se ignora para la validación.
Entrada de muestra 1
_
\ /\
\ / \
\ / \
\ /\ / \ /\ /
\ /\ / \ / \ /\ /\/ \ /
\ / \ / \/ \ / \/ \/\ /
\/ \ / \ / \/
\ / \/
\/
Salida de muestra 1
____________________________________________________________
Y || YY ||
\ || / \ ||
\ || / \ ||
\ || /\ / \ || /\ /
\ /\ || / \ / \ /\ |/\/ \ /
\ / \ || / \/ \ / \/ \/\ /
\/ \ || / \ / \/
\||/ \/
\/
Entrada de muestra 2
/\ /\
/ \/ \ /
/\ / \ /\ /
/\ / \ / \/ \ /
/ \ / \/\ / \ /\ /
/ \/ \ / \ / \ /
_/ \ / \/ \/
\ /
\ /\/
\ /\ /
\/ \ /
\ /
\/
Salida de muestra 2
/\ /\
/ \/ \ /
/\ / \ /\ /
/\ / \ / \/ \ /
/ \ / \/\ / \ /\ /
/____\/________\ /__________________\ /__\ /____
_)________________(__________________)____________________()____()_____
Y || Y
\ || /\/
\ /\ || /
\/ \|| /
\| /
\/
Nota
Los espacios finales en la salida se ignoran para compararlos con las soluciones de referencia.
Condición ganadora
El código más corto gana, como es habitual en el golf. En caso de empate, la solución anterior gana.
Casos de prueba
Hay dos scripts de prueba que contienen casos de prueba idénticos:
La invocación es en ambos casos: <test script> <my program> [arguments]
por ejemplo, ./test ruby bridges.rb
o ./test.ps1 ./bridges.exe
.
Otra nota
Esta tarea fue parte de un concurso de golf celebrado en mi universidad durante 2011-W24. Los puntajes e idiomas de nuestros concursantes fueron los siguientes:
- 304 - Perl
- 343 - C
- 375 - C
- 648 - Python
Nuestra propia solución (gracias a Ventero) fue
- 262 - Ruby