Estaba caminando por un huerto de calabazas el otro día para una fiesta de cumpleaños, y noté que las enredaderas de calabaza formaban un patrón ingenioso, con remolinos, bucles y retoños. Vamos a simular eso aquí con algo de arte ASCII.
(())
\
p--q p-----q
/ \ / \
(()) b--d (())
Reglas de construcción de vid
- Solo hay una vid principal, compuesta únicamente de
\ / - p q b d
personajes. - La vid solo viaja de izquierda a derecha a través de la pantalla. En otras palabras, supongamos que eres una hormiga que comienza en el personaje de la izquierda. A medida que avanzas al siguiente personaje adyacente en la vid principal, debes mover una columna a la derecha, nunca a la izquierda.
- Cuando la vid cambia de dirección,
p q b d
se requiere uno de los personajes para simular un bucle. Lasp
vides se unen viajando de noreste a este,q
de este a sureste,b
de sureste a este yd
de este a noreste. Tenga en cuenta que el "bucle" de la letra se conecta a la vid horizontal, y el "tallo" de la letra se conecta a la diagonal. - El comienzo de la vid debe ser uno de
p
ob
(su elección, no tiene que ser al azar), y comienza horizontalmente. El final de la vid debe ser uno deq
od
(su elección, no tiene que ser al azar), y debe terminar horizontalmente. - Tenga en cuenta que los bucles se pueden colocar inmediatamente adyacentes a otros bucles (por ejemplo,
pd
es una subcadena válida de la vid), pero eso puede hacer que sea más difícil colocar las calabazas más tarde. Es posible que desee tener uno- / \
inmediatamente después de un ciclo (como lo hice en mis ejemplos), pero no es obligatorio.
Reglas de calabaza
- Las calabazas se componen únicamente de
(())
(esta cadena exacta). - De la vid principal, las calabazas están unidas por ramas. Estas ramas solo se pueden unir a los
p q b d
bucles, son exactamente una\
o/
de longitud y se unen a la calabaza para que el "final" de la rama esté en el medio. - Se pueden conectar por encima o por debajo de la vid principal.
- Las ramas pueden conectarse yendo a la "izquierda".
- Solo se puede unir una calabaza por rama, y solo una por rama.
Aleatoriedad
- Al viajar horizontalmente, la vid tiene una probabilidad del 50% de continuar horizontalmente, una probabilidad del 25% de girar hacia el noreste y una probabilidad del 25% de girar hacia el sureste.
- Al viajar en diagonal, la vid tiene una probabilidad del 90% de girar horizontalmente y una probabilidad del 10% de continuar en diagonal.
- Debe haber suficientes giros para admitir el número de entrada de calabazas, aunque se permiten más giros.
- Una vez que se construye la vid, las calabazas se pueden colocar al azar en cualquier esquina que no esté ocupada por una calabaza.
- Las calabazas no pueden superponerse a la vid u otras calabazas.
El reto
Dado un número de entrada, envíe un parche de calabaza al azar siguiendo las reglas anteriores. Ejecutar el código varias veces con la misma entrada debería producir resultados diferentes. Todos los parches de calabaza posibles para un número de entrada dado deberían tener alguna probabilidad (no necesariamente igual) de que no sea cero.
Entrada
Un entero entero que n
representa el número de calabazas en el parche, en cualquier formato conveniente . Por brevedad del código, puede asumir que la entrada es 0 < n < 256
.
Salida
El parche de calabaza resultante, ya sea impreso / mostrado en la pantalla o devuelto como una cadena / string-array / etc.
Reglas
- Este es el código de golf, por lo que se aplican todas las reglas habituales para jugar al golf, y gana el código más corto (en bytes).
- Use nuestra definición estándar de "Aleatorio".
- Un programa completo o una función son aceptables.
- Las lagunas estándar están prohibidas.
- Los espacios en blanco iniciales y finales / nuevas líneas son completamente opcionales.
Ejemplos
Para entrada n = 3
, aquí hay algunos ejemplos VÁLIDOS de un parche de calabaza siguiendo las reglas anteriores (separadas por líneas nuevas en blanco).
(())
\
p--q p-----q
/ \ / \
(()) b--d (())
(()) (())
\ /
b-q (())
\ /
b-q
p-----------------------q (())
/ \ /
(()) b-q
/
(())
Aquí hay algunos ejemplos inválidos para entrada n = 3
, con explicaciones #
.
(()) (())
/ /
p---q----q
\
(())
# The vine continued horizontally after a loop was placed.
(()(())
\ /
p---q
\
(())
# The pumpkins are both overlapping and sprouting from the same loop.
p----------------q
\ \ \
(()) (()) (())
# The pumpkin is attached to the middle of the vine, not at a loop.