Dada una cadena donde la primera línea contiene espacios y un punto ( .
la "bola"), seguida de líneas que contienen espacios, barras diagonales ( /
) y barras diagonales inversas ( \
), determina en qué columna caerá la bola después de caer desde su posición inicial . Cada uno lo /
mueve a la izquierda en 1 columna y cada uno lo \
mueve a la derecha en 1 columna.
Entrada de muestra
.
/ \ \
/ /
\ \/ \
\ /\
\ /\ \
\ /
Salida de muestra
La pelota comienza en la columna 5, golpea la /
línea 3, luego las tres \
en las líneas 5 a 7 para una posición final de:
7
Tenga en cuenta que las columnas están indexadas en 1, principalmente por coherencia con las convenciones del editor de texto.
Casos de borde
Si la pelota golpea a /
en la primera columna, queda eternamente atascada en la columna inexistente 0. Su programa debe manejar esto correctamente imprimiendo 0
.
Si la pelota golpea a ambos lados de un \/
patrón, el resultado es indefinido. Su programa puede terminar sin salida, hacer un bucle infinito o imprimir un mensaje de error (mi solución se imprime -1
), pero no debe imprimir nada que pueda percibirse como salida válida.
Si la pelota golpea la barra izquierda en un \\
patrón, debe terminar directamente debajo de la barra derecha, no a la derecha de la misma. La solución que imaginé originalmente era propensa a equivocarse, ¡así que no siga ese camino!
Puede haber o no espacios después de la .
o la última /
o \
en cada línea. Su programa no debe confiar en que dicho relleno esté disponible. En una nota similar, puede haber o no líneas que sigan a la primera línea.
Puede suponer que la primera línea tendrá cero o más espacios y exactamente uno .
. Las líneas posteriores, si las hay, tendrán cero o más espacios y cero o más barras.
Detalles de implementacion
Su programa puede leer desde un archivo (especificado como un argumento de línea de comandos) o leer desde una entrada estándar, a su conveniencia.
Su programa debe generar un solo número a la salida estándar. (Sí, una nueva línea final está bien. Sí, el número puede tener más de un dígito).
Casos de prueba
Entrada:
.
Salida:
1
Tenga en cuenta que la entrada aquí es exactamente un byte. Este es el caso más pequeño que deberías poder manejar.
Entrada:
. \ \ \ \
Salida:
6
Tenga en cuenta que no hay espacios después de estas barras.
Entrada:
. / /\\ / \ //\ \/// // \\/ \/\ /\/
Salida:
0
Entrada:
. / / / \\\ /\\ / \
Salida:
1
Entrada:
. \ / / \
Salida:
4
Entrada:
. \ \/\/\/
Salida:
(anything but a nonnegative number)
Palabras de clausura
Esta pregunta es similar a Simular una computadora de tipo bola de billar (basada en la gravedad) , pero significativamente más simple, por lo que con suerte ganará más interés.
Tengo una solución de 169 caracteres en Python. Sin embargo, estoy seguro de que los golfistas talentosos aquí pueden romper ese récord. : ^)
Este es el código de golf , por lo que la respuesta más corta en caracteres será aceptada al final del mes.
fuente
Respuestas:
Python, 143B
Usando el espacio / tabulación truco sangría. No he hecho nada particularmente inteligente aquí.
F
es el índice actual,l
es la línea actual;z
no está definido, por lo que arroja una excepción, que definitivamente no es un número entero positivo, manejando la\/
situación.fuente
05AB1E , 37 bytes
Entrada como una cadena de varias líneas. Salidas
\/
si la pelota está atascada.Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
CJam, 61 bytes
Si
\/
se levanta la regla con respecto (y no estamos obligados a manejarla), esto se puede acortar a 41 bytes:fuente
Java 10,
213208190 bytesLanza una división por cero error cuando estamos atrapados dentro de a
\/
.-5 bytes gracias a @EdgyNerd .
Explicación:
Pruébalo aquí
fuente
Python 3 , 124 bytes
Pruébalo en línea!
También funciona en Python 2.
Explicación
fuente
J , 95 bytes
Pruébalo en línea!
Devuelve el infinito
_
cuando la pelota se atasca. Perdió muchos bytes manejando ese caso especial. De lo contrario, es más o menos una simple reducción de las filas. Seguramente podría jugar más golf.fuente