La tâche:
Étant donné un .txt
fichier avec des images d'art ASCII séparées chacune par une \n
sortie (voir cet exemple si vous n'êtes pas clair) une image animée avec une image à 1 image par seconde.
Notez qu'il y a une fin \n
sur l'image finale.
Les dimensions de chaque cadre seront:
- X <80
- Y <20
Les règles
- Le cadre précédent doit être effacé avant que le suivant ne s'affiche, donc l'impression de chaque cadre sur le terminal n'est pas une réponse valide.
- Nouveau Vous pouvez récupérer le nom du fichier comme vous le souhaitez, soit à partir de son stockage dans une variable, soit à partir d'arguments sys.
- Nouveau Les images doivent boucler indéfiniment
- C'est le golf de code: le plus petit programme gagne.
Exemple
Contribution
0 0
0 0
00000
0 0
0 0
00000
0
00000
0
00000
0 0
0 0
0
0
0
Production
Non 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
Réponses:
Mathematica, 41 octets
Attend que le nom de fichier soit stocké dans une variable
f
.C'est la première fois que Mathematica règle les priorités
@
et.~.~.
est exactement la façon dont j'en ai besoin.Btw, cet extrait pourrait mal tourner si l'extension du fichier est autre chose que
.txt
(car Mathematica essaiera de deviner comment effectuer l'importation en fonction de cela), mais heureusement, la fin de ce fichier fait partie de la spécification du défi.la source
Bash, 82
Suppose que le nom de fichier du fichier .txt est fourni comme premier argument du script.
Notez qu'une ligne vide de fin doit être présente à la fin du fichier .txt pour que cela fonctionne.
Un merci spécial à @professorfish et @DigitalTrauma.
la source
$IFS
vide par défaut? aussi, utilisezfor ((;;)){ ... }
au lieu dewhile :;do ... done
''
pour qu'ilread
puisse lire plusieurs espaces consécutifs, comme dans la dernière ligne de YIFS=
et[ "$a" ]
au lieu de[ -n "$a" ]
Rubis,
88865655 caractèresCe programme suppose que le nom de fichier est donné comme premier argument.
Merci beaucoup à Ventero d'avoir partagé de grandes améliorations!
Non golfé:
Ce programme lit le fichier, le divise en morceaux et imprime chaque morceau séparément après avoir effacé l'écran.
cls
ne fonctionne que sous Windows. Une variante declear
57 caractères.la source
;
et en omettant les parenthèses lors de l'appelsplit
.\n
quand même. Ici aussi, sur le golf de code, personne ne vous fera ajouter un autre point à votre score pour chaque saut de ligne simplement parce que vous utilisez Windows. ;)$*
est un raccourci pourARGV
, ce qui sauverait deux caractères. Dans ce cas, vous pouvez économiser encore plus en utilisantARGF
(ou$<
) si:a=$<.read.split"\n\n"
.a.size
est également plus court quea.length
. Et puisquesleep
renvoie son argument après son retour, vous pouvez combiner les deux dernières instructions de votre boucle dansi+=sleep 1
.i
l'aideArray#cycle
, qui fait une boucle pour toujours si aucun argument est donné:a.cycle{|i|system"cls";$><<i;sleep 1}
. Et fractionner à$/+$/
est un autre caractère plus court que"\n\n"
.a
:$<.read.split($/+$/).cycle{...}
(Désolé pour le triple commentaire, je pense toujours à de nouvelles améliorations juste après la fin de la période d'édition des commentaires :))Dyalog APL (64)
(Ne peut pas battre Mathematica cette fois. Il semble avoir une fonction intégrée pour tout.)
Il s'agit d'une fonction qui prend le nom de fichier comme argument. Il suppose que le fichier est au
\r\n
format Windows ( ).Explication:
⎕ML←3
: définir le niveau de migration sur 3 (permettant⊂
d'être utilisé comme fonctionnalité de partage d'APL2)M←80 ¯1⎕MAP⍵
: lire le fichier donné par l'argument de droite en tant que fichier ASCII et stocker le contenu dansM
.M⊂⍨~(4/1)⍷⎕TC∊⍨M
: recherchez toutes les occurrences de quatre caractères de contrôle de terminal consécutifs et divisez-M
les. Cela donne à chaque image.{
...}¨
: pour chacun d'eux ...⊂⊃⍵⊂⍨~⍵∊⎕TC
: divisez l'argument (= une trame) sur les caractères de contrôle du terminal, puis transformez le vecteur de vecteurs en matrice (afin qu'il affiche chaque ligne sur une ligne distincte, cela est nécessaire car⎕SM
ne comprend pas les caractères de contrôle.)⎕SM←1 1,⍨
: affichez-le ensuite dans le coin supérieur gauche de la⎕SM
fenêtre.⎕DL 1
: puis attendez une seconde.la source
Awk, 53Nouvelles règles:
Awk, 74
la source
BEGIN{RS=z}{system("sleep 1;clear")}1
... Dans awk,""
est spécial car ilRS
signifie des enregistrements multilignes. Pour prendre en charge la nouvelle règle de bouclage indéfiniment, je l'ai jusqu'à présent:BEGIN{RS=z}END{for(;!system("sleep 1;clear");)print a[i++%NR+1]}{a[NR]=$0}
à 74 caractères. gawk prend en charge la modificationARGV
afin que vous puissiez faireBEGIN{RS=z}{system("sleep 1;clear");ARGV[ARGC++]=ARGV[ARGC-1]}1
à 63 caractères.Perl, 40
courir comme
(c'est-à-dire que le fichier d'animation est lu via STDIN). 3 octets
p00
ont été ajoutés pour compter. C'est 2 caractères plus court soit 38 sur Windows à cause decls
au lieu declear
. Ou, pour être portable:Ou, étirer un peu les règles (puis 31 + 3 = 34 ):
la source
Rebol, 74
Attend que le nom de fichier soit stocké dans une variable
f
. Voici un exemple non golfé:la source
Java, 678 caractères (au golf)
Bien sûr avec l'interface graphique, car faire des trucs dans la console est nul avec Java, surtout si vous voulez effacer l'écran ...
la source
Cobra - 163
la source
Python 117
Suppose que le nom de fichier est stocké dans une variable
f
.Remarque: remplacer
'cls'
par'clear'
if sur un système basé sur unix, en ajoutant 2 heures.ctl+C
quitterla source
for i in F: s.addstr(y,0,i); ... if i=='': ...
open(f).read()
au lieu defile.read(file(f))
, plus court de 4 octets.Sensationnel -
121119 caractèresPorté Réponse de ProgramFOX à Groovy 2.2.1. La "console claire" est faible.
Éditer : remplacement de la fermeture récursive par une simple boucle while, qui est plus courte et sans débordement de pile
Non golfé:
la source
GNU sed, 32
la source
Groovy, 81
C'est une façon plus groovy:
non golfé
la source
cls
est pour Windows, je pense ... essayezclear
C # 226
Pourquoi déranger hein?
Non golfé :
Ou dans LINQPAD (pour que C # puisse rester semi-compétitif avec les langages sténographiques uber: D)
C # LINQPAD - 134
Je me sens un peu sale, mais bon, c'est du code-golf.
la source
SmileBASIC, 74 octets
F doit être le nom du fichier
la source