Las entradas para este desafío mostrarán una figura animada giratoria de Lissajous . La aparición de la rotación 3D se produce cuando el parámetro x se cambia sucesivamente de fase en cada cuadro.
Entrada:
Los parámetros a
y b
(según el artículo de wikipedia ) se especificarán en la línea de comando o se leerán desde stdin.
Salida:
Esto es ascii-art , por lo que la salida se mostrará en una ventana de emulador de terminal o equivalente. El tamaño de salida puede estar codificado, pero la figura de Lissajous debe ser al menos lo suficientemente grande como para llenar una ventana de 80x24.
La velocidad de fotogramas de la animación será de aproximadamente 50 fps. Dormir durante 20 ms entre cada cuadro está bien, siempre y cuando el tiempo para calcular cada cuadro sea pequeño en comparación con el tiempo de sueño fijo. Si su elección de idioma no puede calcular lo suficientemente rápido en la plataforma elegida, entonces tendrá que calcular el tiempo para dormir dinámicamente.
Cada cuadro no se mostrará hasta que se complete todo el cálculo para ese cuadro. No hay necesidad de borrar la pantalla entre cada cuadro.
La figura hará una 2*Pi
rotación completa aproximadamente cada 4 segundos.
Para cada cuadro, se debe generar una curva cerrada completa. Se deben calcular al menos 1000 puntos a lo largo de la curva. No es necesario dibujar líneas entre puntos.
Los puntos de la curva se trazarán como #
caracteres. El resto del área de visualización estará en blanco / espacio en blanco.
Este es el código de golf , por lo que la respuesta más corta en bytes (considerada aceptable por mí) será el ganador aceptado una semana después de esta publicación.
Respuesta de referencia sin golf .
Respuestas:
Perl - 177
Los coeficientes se pasan a través de argumentos. El gif anterior se produce a partir de
perl % 2 3
fuente
C (respuesta de referencia - sin golf)
Salida con
./lissajous 2 3
:C, 257 bytes
Ok, bueno, no pude resistirme un poco al golf. Sin embargo, creo que hay mucho más golf por hacer en esto:
fuente
usleep
por 20000ms, ¿por qué no solosleep
por 20s?usleep(2e4);
?Python 3 - 280
No tengo uno de esos elegantes gifs animados para ti, lo siento. La consola de Windows es lenta en la impresión: P
No estoy seguro de que esto cumpla con el requisito de 50 fps, aunque no estoy seguro de que sea realmente posible con Python. Puede ajustar el 1000 en la segunda línea para la cantidad de puntos a calcular (la lista es el ancho de salida, la altura de salida, los puntos para encontrar, la progresión por cuadro (pi * 2 / n) y el punto de partida). O puede eliminarlos y especificar también en la entrada.
EDICIÓN MÁS IMPORTANTE: Entrada a través de stdin, separados por espacios, terminados en nueva línea. Esperaré su aporte.
EDITAR: captura de pantalla. Se cambió la altura a 40 para este.
fuente
lissajous.py
, luego ejecutarpython3 lissajous.py 2 3
debería ser suficiente, ¿verdad?stdin
, no de los argumentos (no se pudo especificar que ... oops). Separado por espacios.input()
y adivinado. Ahora funciona bien para mí con 3.2.3. +1C # -
360352 (multiplataforma - 332 solo para Windows)Editado después de micro-golf y corrección de errores de redondeo + sugerencia de Ypnypn
No es exactamente un contendiente con esa longitud, y es casi una copia literal de la referencia, pero bueno. :)
Memory hog, creando una nueva matriz para cada actualización: originalmente (re) usó un StringBuilder, pero lo sacrificó por falta de espacio. Pero al menos la actualización tarda menos de 1 ms en mi antiguo Core2.
Después de eliminar algunos juegos de golf antiguos, que ahora son hirientes, reduciéndolos en 8 caracteres, traté de devolverlos al 360 "poético" volviendo al doble en lugar del análisis interno, y volviendo a 80 * 24 en lugar de 1920. Sin embargo, eso sigue siendo solo 359, y ninguna otra adición de un solo personaje que se me ocurra realmente agrega ningún valor al código. Así que nos quedaremos con 352. :-)
Desenrollado (perdió el código previo al golf):
La consola de Windows en realidad acepta generar una gran cantidad de caracteres nulos que resultan en una salida (gráficamente) idéntica al uso de un carácter de espacio real, lo que permite que unos pocos caracteres menos inicialicen la matriz de caracteres.
fuente
using C = Console
Realmente salva a algún personaje?Python 2.7 - 214
Creo que voy a echar otro vistazo a esto. Tengo la sensación de que esto puede reducirse aún más, pero será difícil alcanzar el recuento de bytes de Perl. Las matemáticas parecen ser mi mayor limitación aquí.
Advertencia: puede bloquearse cualquier terminal que esté utilizando. Probé esto en el símbolo del sistema de Windows con
lissajous.py 2 3
. Debido a la escritura rápida en el símbolo del sistema, espere que los cuadros salten un poco. Esto se puede resolver principalmente (a costa de la velocidad) utilizando un mayors
en elrange(s)
yt=2*pi*i
.No lo uso
\r
o\b
aquí a propósito porque lo estoy ejecutando en Windows y costaría caracteres adicionales.fuente