Escriba un programa o función que tome un entero positivo N (a través de stdin / línea de comando / función arg) e imprima o devuelva una representación de cadena de una caminata aleatoria bidimensional que tiene N pasos de largo, extraída de barras: /
\
(más espacios y nuevas líneas para espaciado).
Una caminata aleatoria en 2D comienza en el origen de una red infinita de enteros . Luego, N veces repetidamente, se elige una dirección cardinal (arriba, abajo, izquierda, derecha) de manera uniforme al azar y el caminante mueve una unidad en esa dirección. La ruta resultante tomada es la caminata aleatoria.
Aquí hay una caminata aleatoria para N = 6. Observe que atraviesa sobre sí misma cuando alcanza (-1, 3).
Para dibujar esto con barras, esencialmente necesitamos rotar todo 45 ° en sentido horario. Los ejes y los puntos de inicio y finalización no se dibujan en la versión de barra diagonal.
/
\
\
/\
Una caminata más compleja como esta (N = 20, aunque no hay forma de saberlo):
Se convertiría en esto:
/
/\/ /\
\/\/
/\/
\/
Su programa necesita generar este tipo de versiones de barra de caminatas aleatorias. Usted debe elegir aleatoriamente cada nueva dirección del paseo dura, por lo que cada ejecución del programa durante un cierto N será casi definitivamente producir un paseo diferente. (La pseudoaleatoriedad está bien).
Nunca debe haber líneas vacías encima o debajo de las barras inclinadas más bajas y más altas (excepto una nueva línea final opcional), y nunca debe haber columnas de espacios vacías antes o después de las barras inclinadas más a la izquierda y a la derecha.
Entonces, para N = 1, la salida es siempre /
o \
, pero nunca algo como:
/
Los espacios finales están permitidos siempre que no pasen la columna de la barra diagonal derecha.
El envío con la menor cantidad de bytes gana. Aquí hay un práctico contador de bytes.
Respuestas:
Pyth, 74 bytes
Una traducción aún más optimizada de la respuesta de Uri Zarfaty.
fuente
"\
- por supuesto, no hay aleatoriedad, ¡pero es una caminata válida siempre!Python 2,
300285257246236 bytesAlgo para patear las cosas. Debería ser posible reducir esto aún más. Gracias @Maltysen por afeitar 10 bytes.
Genera la salida de caminata en un diccionario G de tuplas visitadas (x, y), actualizando nuestra ubicación a medida que avanzamos. Cada paso aleatorio n es u / d (u) y l / r (l).
fuente
"".join
en elj in f(1)
bucle e imprimir directamente.PHP 5.5 - 209 bytes
Sin golf:
Comencé a trabajar en una respuesta PHP desde cero, pero el código final se parecía demasiado al trabajo de @Uri Zarfaty, así que realmente no tuve el descaro de publicarlo. Terminé portando dicha respuesta con algunas modificaciones en su lugar. Empuja x / y valores en
$X
y$Y
matrices para determinar min / max en el bucle de salida.Uso:
fuente
Pyth - 89
Esto es básicamente una traducción de la respuesta de Uri Zarfaty, aunque hice algunas optimizaciones.
Explicación próximamente.
Pruébalo aquí .
fuente