La tarea:
Dado un .txtarchivo 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 \nen 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.innerTextRespuestas:
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
$IFSblanco por defecto? también, use enfor ((;;)){ ... }lugar dewhile :;do ... done''quereadpueda 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.
clsSolo funciona en Windows. Una variante concleares de 57 caracteres.fuente
;y omitiendo los paréntesis al llamarsplit.\ntodos 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.sizeTambién es más corto quea.length. Y dado quesleepdevuelve su argumento después de regresar, puede combinar las dos últimas declaraciones en su cicloi+=sleep 1.imediante 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\nformato 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 divideMen 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⎕SMno comprende los caracteres de control).⎕SM←1 1,⍨: luego se muestra en la esquina superior izquierda de la⎕SMventana.⎕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 comoRSregistros 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 cambiosARGVpara que puedas hacerloBEGIN{RS=z}{system("sleep 1;clear");ARGV[ARGC++]=ARGV[ARGC-1]}1con 63 caracteres.Perl, 40
correr como
(es decir, el archivo de animación se lee a través de STDIN).
p00Se agregaron 3 bytes para contar. Es 2 caracteres más corto, es decir, 38 en Windows debido a enclslugar 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+Cabandonarfuente
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
clses para Windows, creo ... pruebaclearC # 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