Animer le texte dans votre terminal
Le but
Le but est d '"animer" la chaîne "Hello world" dans votre sortie afin que chaque caractère soit capitalisé l'un après l'autre.
Votre programme peut sortir après que chaque lettre ait été mise en majuscule.
Par exemple;
# Iteration 1
Hello world
# Iteration 2
hEllo world
# Iteration 3
heLlo world
# Iteration 4
helLo world
# Iteration 5
hellO world
# Iteration 6 (note: it should capitilize the space char (ie: a break between iteration 5 and iteration 7)
hello world
# Iteration 7
hello World
# Iteration 8
hello wOrld
# Iteration 9
hello woRld
# Iteration 10
hello worLd
# Iteration 11
hello worlD
Il ne devrait animer la chaîne qu'une seule fois et entre chaque état, il devrait s'écouler un délai d'une seconde.
Contribution
Aucune entrée n'est requise, mais "Hello world" doit être la chaîne "animée".
Sortie
La chaîne "Hello world" doit être animée. La sortie doit avoir la forme d'une ligne pour créer une sorte d'animation d'onde. Une nouvelle ligne vide est autorisée. Exemple gif;
Je l'ai vu sur une vidéo youtube metasploit et j'ai trouvé l'effet super cool. C'est là que j'ai enregistré le gif, donc c'est un peu lent, mais j'espère que cela illustre bien la sortie.
C'est le code-golf , le plus petit nombre d'octets sera considéré comme le gagnant.
Réponses:
Vim 26 octets
Explication (pas encore .gif):
Premièrement, nous devons entrer le texte "hello world". C'est assez simple. C'est juste:
À ce stade, le curseur se trouve sur le «d» dans le «monde». Prochain:
J'ai également trouvé deux autres versions à 26 octets:
la source
~
briser la boucle . Je crois que c'est le travaill
qui fait le travail difficilePython 2,
989490 octets-9-4 octets grâce à @ElPedro -4 octets grâce à @JonathanAllan et @Rodla source
-u
argument et utiliserprint"\t"+s[:x]+s[x:].title(),;
(notez la virgule de fin) . Et cela ne changera pas votre nombre d'octets (car l'argument ajouterait +2 octets)python -c 'code here'
. Avec le drapeau, l'invocation seraitpython -uc 'code here'
un octet différent.Commodore 64,
168162137133 octets BASIC (et symbolisés) utilisésVous devrez utiliser les abréviations du mot-clé BASIC pour entrer cela dans un véritable émulateur C64 ou (ou entrer le programme dans un Commodore 128 et le recharger en mode C64, bien que cela devrait également fonctionner avec le 128). Le
{control+n}
ne fonctionnera / affichera qu'après le devis d'ouverture. En abrégéchr$(14)
, il enregistre certains octets et fait passer le jeu de caractères en mode Business ou en majuscules / minuscules.J'ai ajouté quelques abréviations pour vous, donc vous. Le
{clear home}
caractère est créé en appuyant surShift
et laCLR/HOME
touche après le guillemet ouvrant.À des fins d'illustration, la liste non annulée peut être saisie comme suit:
Cela fonctionne en commutant le jeu de caractères PETSCII en mode Business (majuscules / minuscules), et en écrivant la chaîne hello world sur la ligne supérieure de l’écran situé à l’emplacement de mémoire $ 0400. 11 octets à partir de là et augmenter chaque valeur de 64 (l'équivalent en majuscule). Si le compteur j est> 0, il appelle une routine sur la ligne 2 pour réduire à nouveau l'emplacement mémoire précédent de 64.
La ligne 3 est une pause, elle écrit également un espace dans les emplacements 0405 $ et 040b $, ce qui est une correction de bogue (qui pourrait probablement être supprimée pour économiser quelques octets).
la source
fori=0to1step0
...nexti
crée essentiellement une boucle infinie (un peu moins), un peu commewhile(true){...}
dans les langages plus modernes.GO TO
c'est interdit, c'est vrai ;-) On peut facilementCLR
FRE(0)
C #,
230215193161135134130 octetsC'est C # alors c'est long à droite! :-( Mais après un peu d'aide et de recherche, j'ai (et d'autres, vraiment) réussi à supprimer exactement 100 octets déjà.
Golfé
Ungolfed
Capture d'écran
Bien qu'il semble beaucoup mieux en boucle et plus rapide ..
Mises à jour
Perdu 15 octets en utilisant un retour chariot au lieu de
Clear()
cela m'a également permis de remplacer un en utilisantSystem.Console
quelque part en ligne.Programme remplacé par lambda économisant 23 octets grâce à @devRicher
new string(b)
avecb
etb[i]=char.ToUpper(b[i])
avecb[i]-=' '
, me sauver 26 autres octets!i++
grâce à @Snowfirei<11
de mafor
bouclela source
class P{static void Main(){ ... }}
pour()=>{ ... }
couper quelques octets. PPCG accepte les fonctions en tant que réponses, donc un lambda fonctionne bien.void g(){ ... }
.char g = string j[x]
), pour économiser environ 50 octets:()=>{var s="Hello world";for(int i=1;i<11;i++){string h = s;h[i]=char.ToUpper(s[i]);System.Console.Write(h+"\r");System.Threading.Thread.Sleep(1000);}}
b[i++]-=' '
. Cela serait très utile, car vous pourriez également supprimer la condition dans la boucle for et écrirefor(int i=0;;)
. OP a souligné dans les commentaires, que le programme peut se terminer avec une erreur, vous pouvez donc autoriser une exception IndexOutOfRangeExceptionPowershell,
126119107104 octetsRévisions (il y en aura probablement beaucoup):
Changer
$s.Length
en const1110
Un constructeur de chaînes restructuré, une instruction de jointure supprimée et utilisée à la
++$s
place de($s+1)
, pour enregistrer des octets grâce à @AdmBorkBorkAdmBorkBork souligne que l'utilisation de la chaîne deux fois est en réalité plus courte que l'encapsulation puis
.ToLower()
l'ajout - ce qui en dit long sur la puissance verbeuse de -3!fondamentalement, parcourez la longueur de la chaîne, formez un ensemble de trois parties, le pré-capital, le capital et le post-capital, éloignez 32 de la lettre du milieu, puis reconvertissez-les en caractères avec majuscules, heureusement, cela ne transformez pas l’espace en personnage visible non plus, j’espère que cela est acceptable?
la source
$s
et.ToLower()
ing il. -'Hello world';$s='hello world';
Assemblage CP-1610 , 50 DECLEs = 63 octets
Ce code est destiné à être exécuté sur une Intellivision .
Un opcode CP-1610 est codé avec une valeur de 10 bits, appelée "DECLE". Ce programme a une durée de 50 décles et commence à 4800 $ et se termine à 4831 $.
Sortie
la source
MATL , 30 octets
Essayez-le sur MATL Online!
la source
PHP,
767471 octetsMerci @hd pour le retard étant une seconde complète et aucune fraction de celle-ci!
Merci @ user63956 pour 2 octets et @aross pour 3 octets.
Courez avec
-nr
.la source
sleep(print"$s\r")
.C,
97retiré106 octetsavec des caractères échappés comptés comme 1 octet
Remarque: j'ai
commenté le délai sur uneTIO non liée, car elle attend la fin avant d'afficher la sortie. Elle ne semble pas non plus reconnaître les retours à la ligne et met de nouvelles lignes. De plus, si vous êtes sous Windows, le sommeil est en millisecondes au lieu de secondes, ilsleep(1)
devrait en être de mêmesleep(1000)
.Note 2: J'ai retiré cette entrée pour le moment jusqu'à ce que les bugs de sortie aient été résolus.la source
^C
pour l'arrêter. (aussi je suis sur mac)JavaScript (ES6),
141 139131 octets8B sauvé grâce à Apsillers
Explication
Cela crée une fonction sans argument, qui divise la chaîne
hello world
en un tableau de caractères et met en majuscule le caractèred+1
th .d
est un compteur qui commence comme0
et augmente à chaque fois.Usage
la source
_=>
vous faire un programme complet (par exemple, si vous il coincé dans un fichier, Node.js courraient avec succès à la fin). Ma compréhension de l'interdiction des "extraits de code" s'oppose à l'écriture de code qui accepte implicitement certaines entrées en tant que variable, comme "si nous supposonsi
déjà avoir l'entrée, nous pouvons le faire ...", ce qui n'est pas le cas ici, car explicitement pas d'entrée.Noodel , 22 octets
Essayez-le :)
Comment ça fonctionne
L'extrait de code utilise une version de 25 octets qui effectue une boucle continue.
la source
Bash + coreutils,
9998 octetsla source
Perl 6 ,
6561 octetsGIF:
Comment ça fonctionne
La séquence d'échappement ANSI
\ec
efface l'écran.A chaque itération, le
i
ième caractère de la chaîne codée en dur est remplacé par sa version majuscule.La
say
fonction retourne toujoursTrue
, qui est transmise à la fonction de sommeil qui l'interprète comme1
seconde.la source
Ruby,
8281 octets^ H est ascii 8 (retour arrière) et n’est que de 1 octet.
la source
C, 87 octets
Compile et fonctionne sous Linux.
la source
Mathematica,
130128123110108 octetsExplication: De
i=1
11 à 11, insérez du 1 er au (i-1) ème caractère de "hello world", mettez"hello world"[i]
-les en majuscule , puis imprimez le reste de la chaîne en incrémentanti
en même temps.la source
Java
215212204203 octetsUngolfed:
la source
interface A
(avec un espace)? De plus, vous pouvez supprimer l'espace entre,
etCharacter.toUpperCase
.R ,
106103 octetsJuste une simple boucle, effacer la console avec
cat('\f')
semble quelque peu dépendant du système mais je ne suis pas au courant d'une meilleure façon.la source
utf8ToInt
. Cela n'a pas fonctionné, l'espace doit être traité comme un cas spécial. Au cours du processus, j’ai découvert que celacat("\014")
semblait mieux fonctionnercat("\f")
que de fonctionner ailleurs. mais pas sur TIOC, 122 octets
Plus court que C #: D
la source
i<11
au lieu dei<10
dans votre bouclePerl, 75 octets
Utilise le code ANSI ESCcpour effacer la console et déplacer le curseur en haut à gauche à chaque itération, mais doit toujours être placé
\n
à la fin de la chaîne de remplacement pour éviter de perdre toute l'animation dans le tampon de ligne.Un appel réussi à
print
renvoie une valeur de 1, à laquelle vous pouvez passer directementsleep
.la source
$`
et$'
économiser quelques octets dessus(.{$_})(.)(.*)
(cela ne fonctionnera pas dans un terminal, mais ce n'est pas un problème). Il faut modifier un peu le reste de votre code si:"hello world"=~s/./sleep print"\33c$`\U$&\E$'\n"/ger
. (J'ai écrit à peu près ce code exact, alors quand j'ai cherché si quelqu'un avait déjà posté une réponse perl, j'ai trouvé la vôtre). Et un petit détail sur le décompte intermédiaire: vous pouvez utiliser une nouvelle ligne littérale pour sauvegarder un octet, et peut-être une sorte de littéral\33c
(pas vraiment sûr de ce dernier).SmileBASIC,
9071 octetsla source
Gelée ,
2421 octetsCeci est un lien / une fonction niladique qui imprime vers STDOUT. Cela ne fonctionne pas comme un programme complet.
Le code ne peut pas être testé sur TIO; il utilise des caractères de contrôle et TIO n'a pas (encore) d'émulateur de terminal.
Comment ça fonctionne
la source
(Strings are cast to Boolean.)
C'est sournois!C, 122 octets
En tant qu'exercice, j'ai écrit ceci pour fournir un format de sortie plus optimal que certaines des autres réponses. Cela signifie également que le curseur est placé après la dernière lettre majuscule pendant les pauses.
(Newlines et indentations cosmétiques et ne faisant pas partie du nombre d'octets)
Certains lecteurs remarqueront peut-être que cela nécessite un peu de massage pour pouvoir fonctionner sur des machines modernes (l’incantation magique
-static -Wl,-N
), mais c’est la façon dont les vraies implémentations de C se comportaient, alors je pense que cela est valable. Il suppose également que le jeu de caractères est ASCII et qu’il n’imprime pas de nouvelle ligne.Bonus: pour une version EBCDIC, vous pouvez remplacer
8
par22
et64
avec32
, et basculer la logique pourp[1]
etp[2]
. Pour tester sur un système non-EBCDIC, vous pouvez compiler avec-funsigned-char -fexec-charset=cp037
.La sortie est de 43 octets:
Hello world«H‹hE‹eL‹lL‹lO‹o ‹ W‹wO‹oR‹rL‹lD
la source
Scala, 92 octets
Ungolfed
la source
h(i)toUpper
Lot, 184 octets
Curieusement, la ligne de commande de
timeout/t>nul 1
est corrompue s’il n’ya pas de nouvelle ligne, donc je ne peux pas la mettre à la fin du fichier.la source
Ruby, 108 octets
Première fois, étudiant de première année. Ce n'est pas un aigle mais je suis au moins un peu fier.
la source
Pascal,
187152 octetsPas exactement le plus efficace ou le plus court, mais fonctionne assez bien!
Testé et fonctionne sur Free Pascal Compiler 2.6+.
Merci à @manatwork pour la sauvegarde de 35 octets!
J'ai utilisé http://www.onlinecompiler.net/pascal pour compiler le fichier et l'exécuter sous Windows.
Je n'ai vu aucun problème avec cela, jusqu'à présent.
la source
UpCase
fonction existe depuis les anciens temps Turbo. (Là seulementChar
, mais dans Free Pascal, il gère aussi les chaînes.)Word
(ouByte
); make P aconst
pour qu’il déduise le type de la valeur d’initialisation; pendant que vous y êtes, faites de X une constante initialisée pour vous débarrasser duvar
mot clé séparé (celui-ci peut ne pas fonctionner dans toutes les variantes de Pascal, mais certainement dans Free Pascal); utilisezClrScr
pour sauter dans le coin supérieur gauche; remplacer queif
par une seule expression:X:=X*Ord(X<11)+1
. pastebin.com/FfaixkESconst X:Word=1;P='hello world';
etconst X:Word=1;P='hello world';
c'était possible. J'ai appris Pascal sur Turbo Pascal 7, ce qui peut ne pas être compatible avec cela. Et complètement oubliéupcase
. Merci beaucoup!C
12011010496 octetsVersion non-golfée
@ Pakk Merci d'avoir sauvegardé quelques octets, bonne idée. :)
@Pakk @KarlNapf Merci les gars pour vos contributions.
peut encore être raccourci !? :)
la source
-=
et+=
. En outre, une variable de pointeur pourrait enregistrer le[]
mais je ne suis pas sûr.char *j,s[]="hello world";
pour sauver quelques caractères supplémentaires.f(){char*j,s[]="\rhello world";for(j=s;*++j;*j-=32,printf(s),*j+=32,fflush(0),sleep(1));}
89 octets.Python 2,
220189179 octetsSolution sans utiliser les chaînes et le
capitalize()
nombre d'octets tels quels:Et une variante un peu plus longue (191 caractères) sans réinitialisation de casse:
la source
C ++,
88 à125 octetsVersion non-golfée:
Compilé avec TDM-GCC sur une machine Windows 10 avec Dev-C ++.
Edit: J'ai oublié l'inclus dans ma première version.
la source
for
boucle en déplaçant le retour chariot au début de la chaîne .. Je vais vous aider aussi: Fairefor(int c=1;;c++)
vous permettra d' économiser 1 octet.for(int c=1;;)
, puisa[c++]-=32;
enregistrer un autre octet.