introduction
Rappelez-vous les années 80 rugissantes? Je veux dire, vous savez, comme il y a 30 ans? Pas de téléphones portables, pas d'Internet, pas de distributeurs automatiques de billets, des vêtements fluorescents (qu'est-ce que c'était?!) Et des marqee à défilement ! Non non Non! Pas ceux en ligne, mais les vrais, avec des lumières LED.
Comme je suis d'humeur nostalgique, j'aimerais que vous créiez un chapiteau défilant.
Défi
Créez un programme dans lequel vous pouvez saisir une chaîne d'une ligne. Votre programme doit créer un cadre de défilement de 80 caractères, en répétant le texte si nécessaire.
Règles
- L'utilisateur doit pouvoir saisir une chaîne dans votre programme en entrée. La chaîne peut être un paramètre de ligne de commande ou une chaîne entrée lors de l'exécution du programme.
- Votre programme doit imprimer en continu une chaîne d'exactement 80 caractères (visibles).
- La chaîne doit être mise à jour toutes les 0,1 seconde (plus ou moins; je ne la chronométrerai pas), décalant les caractères à chaque itération d'une position vers la gauche.
- La chaîne "tourne". À la fin de la chaîne fournie par l'utilisateur, une autre instance de la chaîne doit apparaître.
- Votre programme doit imprimer sa sortie sur une seule ligne, sans sauts de ligne (utilisez un '\ r' au lieu d'un '\ n')
- Votre programme doit s'exécuter à l' infini , jusqu'à une interruption utilisateur.
- Il s'agit d'un codegolf, donc le code le plus court en octets l'emporte.
- Il y a un bonus de 10% (arrondi jusqu'à à l'entier) pour l' impression en rouge sur un fond noir.
- Des échappatoires standard s'appliquent.
Implémentation de référence dans Python 2.7
Ce programme n'est pas golfé, mais il fournit une implémentation de référence (et donc une limite supérieure à la taille).
import time,sys
s=raw_input()*99
while 1:
for i in range(80):
print s[i:i+80]+'\r',
sys.stdout.flush()
time.sleep(0.1)
1 2 3 4 5 6 7 8 9 10 11 ... 300
coupures après environ 56.Réponses:
CJam, 31 octets
Attend exactement 100 ms.
Cela ne fonctionnera qu'avec l' interpréteur Java officiel , car l'interpréteur en ligne n'affiche la sortie qu'après avoir quitté le programme.
Le texte rouge sur fond noir est possible en 40 (ou 39) octets, pour un score de 36:
Comment ça fonctionne
la source
;
explication ne soit pas alignéePowerShell,
118113112108102101 9996-10% = 86Code
Avec la mise en garde qu'il commence maintenant la première boucle avec le deuxième caractère; Les règles ne disent pas qu'elle doit commencer par le devant de la chaîne, et la première est incluse dans l'ensemble, donc ça me convient. Je vais l'avoir à 100 caractères en quelque sorte - éditer: merci @ConnorLSW pour les éditions pour l'avoir en dessous de 100.
Instructions
Production
Remarques
Une version plus lisible avec les noms de variables et les paramètres un peu remplis:
-F R
sont donc suffisamment uniques pour définir une couleur rouge de premier plan, par exemple.-B 0
définit sur la couleur Enum value 0 qui est interprétée comme Black.Chapiteau alternatif, plus «correct»:
Le code de référence ne gère pas correctement les chaînes de plus de 80 caractères, ignorant tout ce qui se trouve dans le message au-delà de 160 caractères, et il réinitialise tous les 99 caractères len (chaîne). Par exemple, si la largeur du signe était de 5 caractères, cela fait ceci:
Cette version indexe modulo la longueur du texte au lieu de la largeur du signe, donc il parcourt toute la chaîne. 106 - 10% = 95 caractères.
Alternative: signe quels cycles comme le .gif dans la question, 118-10% = 106
Parce que ça a l'air mieux.
la source
Bla
pour0
-Write-Host
interpréter les nombres en couleurs.while(1)
pourfor()
économiser quelques octets :)for()
, vous pouvez enregistrer un octet supplémentaire$s=(Read-Host)*180;for(){
enfor($s=(Read-Host)*180){
Matlab, 76 octets
Ce que je pense être bien ici, c'est que vous pouvez avoir des vecteurs comme indices de tableau. Cela renvoie un vecteur des entrées de tableau correspondantes, ce qui rend très facile l'ajout de la chaîne donnée indépendamment de la longueur.
Résultat:
la source
clc
. Vous avez oublié d'ajouter's'
àinput
a=input('','s')
'
chaînes délimitées en entrée. De nombreuses langues ont besoin d'un délimiteur de chaîne ou elles interpréteraient de toute façon un argument de ligne de commande sous la forme d'une phrase (mots séparés par des espaces) comme des arguments multiples.QBasic,
116113 octets - 10% =105102Voici une version formatée avec quelques commentaires:
Quelques notes:
PRINT
laFOR
boucle est nécessaire.CLS
devrait réinitialiser le curseur dans le coin supérieur gauche à chaque fois. Mais sur QB64, au moins, si je ne mets pas le supplémentPRINT
, le chapiteau se retrouve sur la deuxième ligne au lieu de la première. Si quelqu'un a configuré QBasic sur DosBox ou quelque chose comme ça, je serais intéressé de savoir si la même chose se produit là-bas ou s'il s'agit d'un bogue QB64.TIMER
(nombre de secondes depuis minuit) pour le retard. Si le code s'exécute à minuit, le chapiteau restera bloqué carTIMER
sera réinitialisé0
et toujours inférieur à celuit
par la suite.la source
PRINT
mais avecCLS
--afterCLS
, peu importe ce qui a été imprimé avant, la prochainePRINT
instruction devrait sortir à 1,1; mais au lieu de cela, je suis tombé sur une situation où il sortait à 2,1.Perl,
9998 octets (-10% = 89)Prend son entrée à partir du paramètre de ligne de commande.
la source
pb , ⌈ (216 + 3) * 0,9⌉ = 198
+3 octets pour l'indicateur d'interprète
d=1
Un score assez horrible, mais compte tenu de la difficulté de faire quoi que ce soit dans cette langue, cela pourrait être pire. Le rapport de cette réponse (octets utilisés pour obtenir du texte rouge) à (bonus d'avoir du texte rouge) est vraiment bon, la sortie entière devient rouge avec seulement le
c
au début!Le temps entre chaque tick varie en fonction de la longueur de la chaîne d'entrée, mais il est d'environ 0,1 seconde.
Soit dit en passant, la sortie de ce programme ressemble à une ordure totale parce que l'interpréteur est si mauvais. Toutes les millisecondes, il efface le terminal et redessine tout, donc ça devient vraiment scintillant.
Avec commentaires:
la source
Perl - 120 octets (-10% = 108)
la source
Matlab, ⌈188 * .9⌉ = 170
Cela fonctionne dans la version Matlab R2014b ou supérieure. Le résultat est affiché sur une fenêtre de figure.
Dans l' exemple suivant , le texte est tapé en gras pour une meilleure visualisation (pas fait dans le code ci-dessus car il coûte quelques octets). Notez également que la vitesse de l'animation GIF ne correspond pas à la pause de 0,1 s requise, mais le timing est correct dans la figure réelle affichée en exécutant le programme.
la source
SpecBAS, 130 octets (-10% = 117)
Multiplie la chaîne d'origine pour lui donner 80 caractères ou plus, puis la coupe exactement à 80.
TEXT
est une commande dans SpecBAS qui fonctionne de la même manière quePRINT
(dans cet exemple) mais enregistre un caractère.La
SCALE
commande ajoute quelques caractères supplémentaires au code, mais lui donne une apparence plus marquante.Le programme continue jusqu'à ce que vous appuyiez sur Echap.
la source
Perl, 63 (70 caractères - 10% pour le bonus)
Pas une solution très différente des autres, mais j'ai perdu mon temps à le faire, alors j'ai pensé que je le posterais aussi!
Repose sur un terminal compatible Unix pour les codes ANSI et l'appel à coreutils '
sleep
. Les deux\x..
caractères ci-dessus sont en fait un saut de ligne littéral et un caractère d'échappement selon ce vidage hexadécimal:la source
Rubis,
797675 octetsJe ne suis toujours pas un expert en rubis, peut-être peut-être joué au golf.
Avec le même score en rouge et noir:
la source
Perl, 84 octets (- 10% = 76)
Cela prend un argument de ligne de commande qui est le texte dans le rectangle de sélection.
Explication:
$_
\b
) et un espace (). Cela supprime le dernier caractère de l'impression précédente. Imprimez ensuite le retour chariot et la couleur.
$p
$p = ($p+1) % length of text
la source
bash, 121 octets
la source
Python 3, 96 octets
Cela ne fonctionnera que sur les terminaux qui prennent en charge les séquences d'échappement ANSI. Si vous êtes sous Windows, essayez ansicon .
Vive le
flush
mot - clé dans Python 3, nous n'avons donc pas besoin de faire unsys.stdout.flush()
appel coûteux .la source
C,
293269 octets(Ajout de nouvelles lignes pour plus de lisibilité)
Cela prend l'entrée de l'entrée standard terminée par EOF; il est donc préférable d'entrer une chaîne, une nouvelle ligne, puis l'EOF (par exemple, Ctrl ^ D).
Non golfé:
la source
SmileBASIC BIG, 79 octets
J'avais une belle solution graphique presque terminée quand j'ai réalisé qu'elle devait faire défiler 1 caractère entier à la fois.
la source
Gelée ,
201918 octets80
par⁹
(= 256) car il doit être multiplié par au moins 80Çß
(deÇ1¿
).Avec quelques astuces de la réponse de @Dennis ici . La gelée est plus récente que le défi, mais pas vraiment spécialement conçue pour cela. Les suggestions sur la façon de s'améliorer sont les bienvenues! Si votre console est en utf-8, exécutez
export LC_ALL=en_US
ou similaire avant d'essayer.Exemple
Explication
la source
LOVE2D Lua, 197-10% = 178 octets
Nécessite que l'entrée soit dans un fichier appelé 'tt' à la racine, donc 3 octets supplémentaires ont été ajoutés au score.
Fonctionnalité vraiment basique, juste dans une boucle for de 80 itérations, ajoutez le caractère à l'indice de i plus l'heure actuelle en secondes modulée par la longueur de la chaîne actuelle, donnant une chaîne répétée de 80 caractères de l'entrée, qui décale vers la gauche comme le temps passe.
J'ai utilisé LOVE2D pour les rires.
la source
Sinclair ZX81 / Timex TS1000 / 1500 BASIC,
110 octets182 octets (pour la liste)Il fonctionne en imprimant les
3280 premiers caractères de la chaîneA$
à la position d'écran 0,0 sur la ligne deux, puis en manipulant la chaîne de la position 2 à la fin de la piqûre de la ligne 3 (Sinclair ZX81 BASIC indexe les chaînes de 1 et non nul) ), donc en ajoutant le premier caractère à la fin et en le renvoyant à laA$
variable; puis il y a une boucle inconditionnelle de retour à la ligne 2.la source
Commodore 64, 434 octets
Comme cela nécessite 80 caractères pour s'afficher, et le C64 par défaut n'est que de 40 caractères, alors 40 caractères du scrolly sont imprimés sur la ligne supérieure de la zone d'écran tandis que les 40 autres sont imprimés près du bas.
Pour clarifier ce que les
{HOME}
symboles et d'autres traduisent en PETSCII, voici une capture d'écran tirée de mon émulateur:Je ferai une version golf complète lorsque j'aurai installé CBM PRG Studio (ou quand je ne déjeunerai pas au travail).
la source
Rubis,
7977 caractèresla source
PHP, 136 octets
php -f marquee.php hello\ world
chaîne "hello world".hello worlddddddddddddddddddddddddddddddddddddddd
, mais elle ne parcourra que 80 caractères - j'espère que cela compte toujours.Ça a été une longue journée, il y a probablement quelque chose que je peux faire pour l'améliorer
la source
PHP, 85 octets
prend l'entrée du premier argument de la ligne de commande; courir avec
-nr
.Commence le défilement avec le deuxième caractère. Ajoutez un octet pour commencer au premier caractère:
remplacez
=++$i%
par%=
et;;
par;;$i++,
.la source