El reto
Cree una función que, cuando se le da una entrada de arte ASCII (dirigiendo una ruta que eventualmente puede hacer un bucle), emite la longitud del bucle (si hay uno) y la longitud de la "cola" que conduce al bucle en una de las formularios a continuación.
Entrada
Su entrada debe pasarse a una función. A continuación se muestra un ejemplo de una entrada simple.
# --> # --> #
^ |
| |
| v
# <-- #
Podrías visualizar los bloques anteriores así
La "cola" es un elemento, mientras que el bucle tiene cuatro largos.
Una más difícil:
# --> # --> #
^ |
| |
| v
# --> # <-- # # --> #
^ ^ |
| | |
| | v
# --> # # <-- # <-- #
Salida
Debe enviar a través de STDOUT o la alternativa más cercana a su idioma.
Sus dos enteros de salida deben ser la longitud de la cola y la longitud del bucle. Esta salida puede ser de dos formas.
- una cadena delimitada por espacios:
"2 10"
- una serie de enteros:
[2, 10]
Reglas
Cada bloque, o
#
, solo tendrá un único camino lejos de sí mismo.Cada flecha tiene dos segmentos de línea y una cabeza.
El bloque inicial siempre estará en la columna más a la izquierda.
La entrada nunca será solo un bucle.
Ejemplo
# --> # --> # --> #
^ ^ |
| | |
| | v
# # <-- # <-- #
Éste tiene una longitud de cola de 2 y una longitud de bucle de 6. A continuación, la cola y el bucle están separados.
Cola
# -->
^
|
|
#
Lazo
# --> # --> #
^ |
| |
| v
# <-- # <-- #
Las salidas correctas son [2, 6]
y "2 6"
.
Si la entrada es solo una cola , la longitud del bucle es cero.
# --> # --> # --> #
|
|
v
<-- # <-- #
Las salidas correctas para la entrada anterior son [6, 0]
y"6 0"
fuente
Respuestas:
JavaScript (ES6), 221
229Una función con la entrada como parámetro, salida como una cadena a través de una ventana emergente (alerta).
Escanee repetidamente la entrada:
en cada paso
Cuando no hay más cola para eliminar, el número de pasos hasta ahora es el tamaño de la cola y el número de '# restantes es el tamaño del bucle.
Todas las líneas nuevas dentro de los backticks son importantes y cuentan
Pruebe a ejecutar el fragmento a continuación con Firefox (no Chrome, ya que no es compatible
...
)fuente
Rubí,
287278 bytesProbarlo aquí .
Esto construye un hash (diccionario) de nodos. Para cada nodo, se almacena el número de conexiones entrantes y el siguiente nodo (posiblemente nulo).
Finalmente:
La versión legible del código está disponible aquí .
fuente
Rubí, 276
fuente