Es posible que haya visto la escalera de Jacob en los museos de ciencias para niños. Si no está familiarizado con su aspecto, hay varias imágenes y ejemplos de video en Wikimedia Commons . El desafío hoy es crear una versión animada ASCII del dispositivo eléctrico. Al final, debería verse así:
Construcción de escalera
Aquí está la forma básica de una escalera con una altura ( H ) de 6:
6 \ /
5 \ /
4 \ /
3 \ /
2 \ /
1 \ /
0 ¯¯
Los números a la izquierda simplemente indican el número de fila para este ejemplo y no deben incluirse en la salida. Nos referiremos a una fila dada por su número ( R ). La fila 0 es la parte inferior ¯¯
. Cada fila 1 a H se compone de cuatro partes:
- Un espacio
(U + 0020) repetido ( H - R ) veces
- Una barra diagonal
\
inversa (U + 005C) - Un espacio
(U + 0020) repetido (2 * R ) veces
- Una barra diagonal
/
(U + 002F)
La fila 0 es idéntica, excepto que ambas barras son reemplazadas por un macron ¯
(U + 00AF) El espacio en blanco al final de cada línea o debajo de la escalera está bien. El espacio en blanco principal no lo es.
Construcción de arco
Una vez que se construye la escalera, puede crear arcos entre el lado izquierdo y el derecho. Un arco está completamente dentro de una fila y reemplaza los espacios entre el inicio \
y el final /
. Por lo tanto, la fila 2 tendrá 4 caracteres en su arco, la fila 3 tendrá 6, y así sucesivamente. Cada arco se compone usando las siguientes reglas:
- Los únicos caracteres permitidos son
_/¯\
(U + 005F, U + 002F, U + 00AF, U + 005C) - Para garantizar una apariencia suave, a cualquiera
¯
o/
debe seguirle un¯
o\
- Para garantizar una apariencia suave, a cualquiera
_
o\
debe seguirle un_
o/
- Las dos reglas anteriores se aplican también a los bordes de la escalera.
- Las tres reglas anteriores significan efectivamente que el primer carácter del arco debe ser
_
o/
y el último carácter debe ser_
o\
(\¯\_//
no es válido en ambos extremos pero\_/¯\/
está bien) - Debe haber una probabilidad distinta de cero para que cada personaje permitido ocurra en un punto dado
- Cada arco es independiente de cualquier otro arco
Animación
La vida de un solo arco se crea al comenzarlo en la fila 1 y "moverlo" una fila a la vez hasta que llegue a la parte superior. IE, primero genere un arco en la fila 1, luego vuelva a configurarlo en espacios y genere un arco en la fila 2, y así sucesivamente. Dado un número de arcos para mostrar ( N ), muestre la vida completa de tantos arcos de uno en uno utilizando las siguientes pautas:
- Solo un arco debe estar "vivo" a la vez. El siguiente arco no puede comenzar hasta que el actual llegue a la cima y luego se extinga.
- Cada fila de la vida del arco debe mostrarse exactamente para un cuadro
- Debe haber un marco de la escalera básica (sin arcos) antes de que comience un nuevo arco (opcional antes del primer arco)
- La animación debe mostrar la vida completa de N arcos. Si N = 0, debería animar arcos aleatorios para siempre hasta que se detenga.
- Si N > 0, aún puede repetir la animación para siempre, pero debe ser un ciclo de los mismos arcos una y otra vez. (El ejemplo de GIF en la parte superior de esta publicación tiene H = 6 y N = 3 pero se repite para siempre).
- La animación debe ocurrir en el lugar. Es decir, cada fotograma debería sobrescribir completamente el siguiente fotograma y estar en la misma ubicación.
- La longitud de cada cuadro puede ser lo que quieras, pero haz que un humano la pueda ver (es decir, usa tu sentido común: 0.01s / frame y 30s / frame son inaceptables).
De entrada y salida
- La entrada y la salida pueden estar en cualquier formato estándar
- Puede exportar un GIF, escribir texto en la pantalla, generar un solo archivo para cada fotograma o cualquier otro medio razonable
- Las lagunas estándar están prohibidas
- La altura de la escalera H será un número entero positivo.
- El número de arcos para mostrar N será un número entero no negativo
- Tanto H como N se toman como entradas en el orden que elija (incluya el orden en su respuesta)
Condición ganadora
Este es el código de golf, por lo que gana el código más corto.
the first character in the arc must be _ or / and the last character must be _ or \
y There must be a non-zero chance for each allowable character to occur at a given point
. Para ser simétrico, tanto el primer como el último carácter deberían ser _
cada vez, lo que significa que hay cero posibilidades de que /
ocurra uno u otro '\'.