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 \
yThere 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 '\'.0xAF
encuentra el punto de código»
.Respuestas:
Python 2 ,
287271270276275 bytesPruébalo en línea!
No borra la pantalla en tio, pero funciona en una consola.
Gif de él corriendo:
fuente
print'\n'*99
lugar deos.system('cls')
perder laos
importación. Todavía no funciona en TIO pero funciona en consolas Windows y Linux.JavaScript (ES6), 245 bytes
El recuento de bytes asume la codificación ISO-8859-1.
fuente
A=x=>[...Array(x)].map;
al principio y reemplazando ambos usos.map
, eso es solo una propiedadArray.prototype
y no tiene uso por sí solo. Intenté versiones de trabajo pero todas salieron más allá de 245 bytes.C (gcc) , 406 bytes
Pruébalo en línea!
Descripción:
fuente
\--/
. Esa es probablemente una solución fácil. ¿Eres capaz de capturar y publicar un GIF trabajando en Xterm?PowerShell ,
347319 bytesPruébalo en línea! No se pudo
$args
pudo jugar bien, por lo que el enlace llama a la función sin borrar la consola.Sin golf
fuente
$l=(($h..1)|%{"$(" "*($h-$_))\$(" "*$_*2)/"})+"$(" "*$h)¯¯"
for($x=0;$x-ne$n;$x++)
puede serfor($x=0;$x++-ne$n;)
. Lo reduje a 324 bytes (321 caracteres) al hacerlo. Los consejos para jugar golf en <todos los idiomas> y los consejos para jugar golf en PowerShell también pueden ser interesantes de leer.sleep 1
ahorra un poco (el valor predeterminado es -segundos) pero es bastante lento pero aún así razonable,sleep -m 99
es bastante rápido pero también razonable. Ahorra 5/1 bytes dependiendo de lo que quiera. No la salida intento de Kevin, perofunction
afilter
es un byte libre también.Rubí , 293 bytes
Pruébalo en línea!
Estoy en Windows, así que solo imprime muchos "\ n" para borrar la consola. Toma 2 argumentos
n
yh
como dos líneas en stdin.fuente