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
Respuestas:
Perl,
210195194193 caracteresactualizar
Las mismas ideas, pero aplicadas de manera muy diferente, en su mayor parte.
Ejecutar con
perl -p0
(4 caracteres contados para los interruptores).Esto también requiere un cambio en el script de prueba de bash, para no citar en exceso los argumentos:
Por cierto, realmente aprecio los guiones de prueba, @Joey.
comentó:
ediciones :
{3,}
" con 3 espacios literales y el+
cuantificador, para guardar otro carácter1while(...)
formulario, donde puedo omitir el punto y coma al final del guiónoriginal (ver historial para versión comentada)
Deliberadamente, no miré la solución Perl de @ Howard hasta que la mía funcionó, pero pude mejorar mi juego de golf mirando más tarde.
En particular, ayudaron las expresiones regulares para techos de túneles y pilares extensibles. Bien hecho, Howard.
Por el contrario, mi alternativa para obtener la longitud de la línea, usar el $ _ implícito para la impresión, dejar el punto y coma final y eliminar las nuevas líneas podría acortar el de Howard a 222 caracteres.
fuente
bash
guión de prueba, gracias a Ventero. Acabo de tomar lo que él creó y lo golpeé hasta que funcionó un poco ;-)Perl, 234 caracteres
Esta es una solución Perl Regex-only. Pasa todos los casos de prueba dados.
La versión idéntica pero más legible muestra los pasos tomados para obtener el resultado:
fuente
C ++,
662622598 caracteres, 4 líneasEsto debería ser, lo he probado con el script de PowerShell, así que debería estar bien ...
Editar 1
Se reemplazaron todas las constantes de caracteres con números, se eliminaron las llamadas sucesivas a std :: cout + algunos otros cambios menores.
Editar 2
última edición, solo para obtener menos de 600. Tomó g [t] [f] como #definir y movió algunas cosas.
fuente
#define
std::
?Ruby,
382356353 caracteresPensé darle una oportunidad a una solución no regex.
El mayor ahorro de espacio aquí es usar un
||
operador condicional en lugar deif - elsif - end
. Entonces, en lugar de escribirif(a) lorem_ipsum end
, he escrito!a||lopem_ipsum
. Se pueden incluir bloques más grandes usando paréntesis!a||(block)
. Si la condición incluye&&
operadores, entonces deben negarse usando paréntesis y ao!
usando las leyes de De Morgan.Y esto es lo mismo con más palabras.
fuente
Scala, 462 caracteres
No es particularmente competitivo, pero hoy he aprendido mucho sobre las expresiones regulares. :-)
fuente
Erlang, 1182 caracteres
No es competitivo en absoluto. Para ser honesto, simplemente estaba interesado en producir un buen arte ascii, no tanto en el golf. Tenga en cuenta que esto no usa expresiones regulares, en cambio, yo mismo escribí la máquina de estados. Esto también necesitará la solución de sobrecomillas en el script de shell, mencionado en la solución perl anterior.
fuente
PowerShell,
300295 287 bytesLa corrección de 8 bytes se asomó desde la respuesta de DCharness .
Script de prueba sin golf:
Salida:
Explicación comics:
fuente