La tarea:
Dado un .txt
archivo con cuadros de arte ASCII, cada uno separado por un \n
(vea este ejemplo si no está claro), genera una imagen en movimiento con cuadro con 1 cuadro por segundo.
Tenga en cuenta que hay un final \n
en el cuadro final.
Las dimensiones de cada cuadro serán:
- X <80
- Y <20
Las normas
- El fotograma anterior debe borrarse antes de que se muestre el siguiente, por lo que imprimir cada fotograma en el terminal no es una respuesta válida.
- Nuevo Puede tomar el nombre del archivo como lo desee, ya sea almacenado en una variable o de sys args.
- Nuevo Las imágenes deben tener un bucle indefinido
- Este es el código de golf: el programa más pequeño gana.
Ejemplo
Entrada
0 0
0 0
00000
0 0
0 0
00000
0
00000
0
00000
0 0
0 0
0
0
0
Salida
Sin golf
import curses, time
stdscr = curses.initscr()
Frames = file.read(file('Frames.txt')).split('\n')
while True:
y = 0
for i in range(len(Frames)):
stdscr.addstr(y,0,Frames[i])
stdscr.refresh()
y += 1
if Frames[i] == '':
y = 0
stdscr.clear()
time.sleep(1)
document.body.innerText
Respuestas:
Mathematica, 41 bytes
Espera que el nombre del archivo se almacene en variable
f
.Esta es la primera vez que las reglas de precedencia de Mathematica
@
y.~.~.
son exactamente como las necesito.Por cierto, este fragmento podría salir terriblemente mal si la extensión del archivo es otra cosa que
.txt
(porque Mathematica intentará adivinar cómo hacer la importación en función de eso), pero afortunadamente el final del archivo es parte de la especificación del desafío.fuente
Bash, 82
Asume que el nombre del archivo .txt se proporciona como primer argumento del script.
Tenga en cuenta que una línea vacía final debe estar presente al final del archivo .txt para que esto funcione.
Un agradecimiento especial a @professorfish y @DigitalTrauma.
fuente
$IFS
blanco por defecto? también, use enfor ((;;)){ ... }
lugar dewhile :;do ... done
''
queread
pueda leer múltiples espacios consecutivos, como en la última línea de YIFS=
y en[ "$a" ]
lugar de[ -n "$a" ]
Ruby,
88865655 caracteresEste programa asume que el nombre del archivo se da como primer argumento.
¡Muchas gracias a Ventero por compartir grandes mejoras!
Sin golf:
Este programa lee el archivo, lo divide en fragmentos e imprime cada fragmento por separado después de borrar la pantalla.
cls
Solo funciona en Windows. Una variante conclear
es de 57 caracteres.fuente
;
y omitiendo los paréntesis al llamarsplit
.\n
todos modos. También aquí, en el código de golf, nadie le hará agregar otro punto a su puntaje por cada salto de línea solo porque está utilizando Windows. ;)$*
es la abreviatura deARGV
, que salvaría dos caracteres. En este caso, se puede ahorrar aún más mediante el usoARGF
(o$<
) sin embargo:a=$<.read.split"\n\n"
.a.size
También es más corto quea.length
. Y dado quesleep
devuelve su argumento después de regresar, puede combinar las dos últimas declaraciones en su cicloi+=sleep 1
.i
mediante el usoArray#cycle
, que los bucles para siempre si no se da ningún argumento:a.cycle{|i|system"cls";$><<i;sleep 1}
. Y dividirse en$/+$/
es otro personaje más corto que"\n\n"
.a
:$<.read.split($/+$/).cycle{...}
(Perdón por el triple comentario, siempre pienso en nuevas mejoras justo después de que termine el período de edición de comentarios :))Dyalog APL (64)
(No se puede vencer a Mathematica esta vez. Parece tener una función incorporada para todo).
Esta es una función que toma el nombre de archivo como argumento. Se supone que el archivo está en
\r\n
formato Windows ( ).Explicación:
⎕ML←3
: establece el nivel de migración en 3 (lo⊂
que permite ser utilizado como función dividida de APL2)M←80 ¯1⎕MAP⍵
: lea el archivo proporcionado por el argumento correcto como un archivo ASCII y almacene el contenido enM
.M⊂⍨~(4/1)⍷⎕TC∊⍨M
: encuentra todas las apariciones de cuatro caracteres de control de terminal consecutivos y se divideM
en ellos. Esto le da a cada cuadro.{
...}¨
: para cada uno de estos ...⊂⊃⍵⊂⍨~⍵∊⎕TC
: divide el argumento (= un cuadro) en los caracteres de control del terminal y luego convierte el vector de vectores en una matriz (para que muestre cada línea en una línea separada, esto es necesario porque⎕SM
no comprende los caracteres de control).⎕SM←1 1,⍨
: luego se muestra en la esquina superior izquierda de la⎕SM
ventana.⎕DL 1
: y luego espera un segundo.fuente
Awk, 53Nuevas reglas:
Awk, 74
fuente
BEGIN{RS=z}{system("sleep 1;clear")}1
... En awk,""
es especial comoRS
registros multilínea. Para apoyar la nueva regla de bucle indefinido, tengo esto hasta ahora:BEGIN{RS=z}END{for(;!system("sleep 1;clear");)print a[i++%NR+1]}{a[NR]=$0}
con 74 caracteres. gawk admite cambiosARGV
para que puedas hacerloBEGIN{RS=z}{system("sleep 1;clear");ARGV[ARGC++]=ARGV[ARGC-1]}1
con 63 caracteres.Perl, 40
correr como
(es decir, el archivo de animación se lee a través de STDIN).
p00
Se agregaron 3 bytes para contar. Es 2 caracteres más corto, es decir, 38 en Windows debido a encls
lugar declear
. O, para ser portátil:O bien, las reglas de estiramiento un poco (y luego 31 + 3 = 34 ):
fuente
Rebol, 74
Espera que el nombre del archivo se almacene en variable
f
. A continuación se muestra un ejemplo sin golf:fuente
Java, 678 caracteres (cuando se juega golf)
Por supuesto con GUI, ya que hacer cosas en la consola apesta con Java, especialmente si quieres borrar la pantalla ...
fuente
Cobra - 163
fuente
Python 117
Asume que el nombre del archivo está almacenado en variable
f
.Nota: reemplazar
'cls'
con'clear'
if en un sistema basado en Unix, agregando 2 canales.ctl+C
abandonarfuente
for i in F: s.addstr(y,0,i); ... if i=='': ...
open(f).read()
lugar defile.read(file(f))
, más corto por 4 bytes.Groovy -
121119 caracteresRespuesta portada de ProgramFOX a Groovy 2.2.1. La "consola clara" es débil.
editar : se reemplazó el cierre recursivo con un ciclo while simple, que es más corto y no se desborda la pila
Sin golf:
fuente
GNU sed, 32
fuente
Groovy, 81
Esta es una forma más maravillosa:
sin golf
fuente
cls
es para Windows, creo ... pruebaclear
C # 226
¿Por qué molestarse eh?
Sin golf :
O en LINQPAD (para que C # pueda mantenerse semi-competitivo con súper abreviaturas: D)
C # LINQPAD - 134
Me siento un poco sucio, pero bueno, esto es código golf.
fuente
SmileBASIC, 74 bytes
F debe ser el nombre del archivo
fuente