Raffaele Cecco est un programmeur qui a produit certains des meilleurs jeux vidéo pour l’ ordinateur ZX Spectrum à la fin des années quatre-vingt. Il a notamment développé les très célèbres Cybernoid et Exolon .
Raffaele aura 50 ans le 10 mai 2017 . Ce défi est un petit hommage à lui, pour les heures heureuses que beaucoup d’entre nous ont passées à jouer à ces jeux extraordinaires et pour la motivation qu’ils ont apportée.
Le défi
Le but est de produire un chapiteau rectangulaire inspiré de celui du menu principal de Cybernoid , mais de l’art ASCII.
En particulier, la chaîne "Happy birthday Raffaele Cecco "
(notez l'espace final) sera représentée en rotation sur les bords d'un rectangle 12 × 5, avec un temps de pause constant entre les instantanés.
Par exemple, en supposant que le texte soit affiché dans le sens des aiguilles d'une montre et pivoté dans le sens contraire des aiguilles d'une montre (voir les options ci-dessous), voici trois instantanés consécutifs du rectangle de sélection rectangulaire:
Happy birthd
a
o y
c
ceC eleaffaR
puis
appy birthda
H y
o R
cceC eleaffa
puis
ppy birthday
a
H R
a
occeC eleaff
etc.
Règles
Aucune entrée ne sera prise. La sortie se fera par STDOUT ou équivalent, ou dans une fenêtre graphique.
La sortie devrait en fait représenter le texte en rotation; c'est-à-dire que chaque nouvel instantané doit écraser le précédent pour donner une impression de mouvement. Cela peut être fait par n'importe quel moyen, par exemple, en écrivant le nombre approprié de nouvelles lignes pour effacer efficacement l'écran. C’est acceptable si cela n’est valable que pour une taille d’écran donnée; spécifiez-le simplement dans la réponse.
Les options suivantes sont acceptées:
- Le texte peut être affiché dans le sens horaire ou anti-horaire, et tourné dans le sens horaire ou anti-horaire (les exemples d'instantanés ci-dessus supposent un affichage dans le sens horaire et une rotation dans le sens anti-horaire).
- La rotation doit continuer cycliquement dans une boucle infinie (jusqu'à ce que le programme soit arrêté) et peut commencer à n'importe quelle phase.
- Le temps de pause entre les instantanés doit être approximativement constant, mais peut être choisi librement entre 0,1 et 1 s. Une pause initiale avant d'afficher le premier instantané est acceptable.
- Les lettres peuvent être majuscules, minuscules ou mixtes (comme dans l'exemple ci-dessus).
- Les espaces vides de début ou de fin sont autorisés.
Les programmes ou fonctions sont autorisés, dans n'importe quel langage de programmation . Les échappatoires standard sont interdites.
Si possible, veuillez fournir un fichier gif montrant la sortie, ou un lien pour tester le programme.
Le code le plus court en octets gagne.
Réponses:
Gelée ,
74 à65 octetsVersion Windows fonctionnant dans une console haute de 6 lignes cp-65001.
Il y a une pause d'une demi-seconde (plus l'évaluation) entre les itérations:
Comment?
la source
HTML + ES6, 200 octets
la source
ZX Spectrum BASIC, 187 octets
Ennuyé par le fait que Philip m'y a battu de quelques minutes :-) Les nombres
\{15}
sont comme des codes de contrôle non imprimables - compilez avec zmakebas si vous voulez bricoler. Notez que le rectangle complet n'est pas imprimé immédiatement, mais il se met en place après les quelques premières images.Essayez-le ici (version en ligne émulée par JS, appuyez sur Entrée pour commencer) ... http://jsspeccy.zxdemo.org/cecco/
Vous pouvez également économiser quatre octets en effaçant l'écran entre les images au lieu de faire une impression sous, mais c'est trop scintillant pour en valoir la peine ...
la source
V,
757170 octets4 octets enregistrés grâce à @DJMcMayhem
Voici un lien TIO, mais notez que cela ne fonctionnera pas sur TIO car le programme est en boucle infinie. Essayez-le en ligne!
Comme ce code contient des éléments non imprimables, voici un hexdump.
Le temps de sommeil est de 500 millisecondes.
la source
H|
->{
.<C-v>êx
->dê
, et5L
->}
±± a
,o° y
etc±±<space>
5L
=>}
.ZX Spectrum BASIC, 274 octets
Eh bien, quelqu'un devait le faire. Les pédants voudront peut-être disqualifier cela parce qu'ils sont trop lents et qu'ils n'ont pas de pause entre les animations, mais je réclame un cas particulier ici :-)
Pas très golfé non plus. 274 octets est le nombre d'octets enregistrés par le spectre sur bande lors de l'enregistrement de ce programme.
la source
SGN PI
pour1
économiser 5 octets), mais vous avez oubliéNOT PI
pour0
etVAL
pour les autres constantes ...NOT PI
Je viens de manquer. Délibérément n'a pas faitVAL
comme il était assez lent, etVAL
est horriblement lent.SVG (HTML5), 267 octets
Eh bien, il est rectangulaire, et il est un chapiteau, et il est du texte ASCII ...
la source
PHP, 184 octets
imprime 39 nouvelles lignes pour effacer l'écran; courir avec
-nr
.La pause réelle est de 1 seconde; mais j'ai accéléré le gif.
non-golfé
la source
Python 2,
230184 octetsEssayez-le sur repl.it
la source
Python 3 , 160 octets
Essayez-le en ligne! (Pas d'animation)
la source
Python 2,
218200190181176 octets-18 octets en supprimant le
str
formatage-10 octets, grâce aux suggestions de @Uriel et @ElPedro
-9 octets en supprimant l'indexation négative
-5 octets en stockant l'inverse en
f
tantv
quewhile
conditionrepl.it
la source
while 1:
etprint
et remplacer le suivant;
par une nouvelle ligne (réelle). Aussif='H..
. Aussif[:1]
est actuellementf[0]
.time.sleep(1)
pas le prendre en dessous de 200?Ruby + GNU Core Utils, 136 octets
la source
Python 2,
182179173160 octetsEssayez-le sur repl.it
Ne fonctionne pas sur TIO donc ma première tentative d'utilisation repl.it
Modifier l' aide d' une boucle « perte de temps » à compter de 1000000 donne un retard constant de entre 0,1 et 1 s sur ma machine et sur repl.it et enregistre l'importation
time
. J'imagine que si vous utilisiez un vieil ordinateur 286 doté de 64 Mo de RAM, il pourrait dépasser la seconde, mais je suis à peu près sûr que cela ne se produira pas. Si c'est le cas, réduisez simplement le 1000000 et sauvez-moi quelques octets :-)Modifier 2 6 pour se souvenir de cette liste dans Python 2 contiennent la dernière valeur de
s
afin que je puisse l’utiliser plus tard et je me souviens aussi que presque tout ce qui est autre que 0 et "" est la vérité. Bugs ou fonctionnalités? Ne t'en fais pas. Cela m'a sauvé 6 octets :-)Edit 3 Another 13 en revenant sur la rotation et en utilisant une liste de compréhension pour les lignes du milieu à l'intérieur de la jointure et en passant
3000000
à40**4
. Merci à @FelixDombek pour le dernier. J'ai dû perdre mon tour de compréhension de liste cependant.la source
999999
au lieu d'1000000
un octet: VZX81 Code machine Z80,
158130 octetsOK, donc il a beaucoup d'octets jusqu'à ce qu'il soit assemblé, mais tombe ensuite à 130 octets. Vous ne savez pas si cela enfreint les règles? C'est mon premier post et seulement en tant qu'invité.
Le programme utilise la «force brute» pour afficher le message plutôt que l’utilisation intelligente de fonctions, comme il ressort de la façon dont il dispose de fragments de code distincts pour la ligne supérieure, la verticale à droite, la ligne inférieure et la verticale à gauche. L'animation est obtenue en faisant pivoter le contenu du message, puis en l'affichant juste après un court délai, ce qui devrait prendre 0,2 seconde exactement, car il attend 10 images sur un taux de 50 (pour les spécifications britanniques Zeddys de toute façon).
Je dois créditer à kmurta le concept de rotation du message pour obtenir l'animation - qui a économisé 28 octets !!!
Désolé, je ne peux pas publier de lien en cours d'exécution car il s'agit d'un programme compilé au format .P pour EightyOne (ou d'autres émulateurs) ou d'un Zeddy réel si vous avez un ZXPand ou similaire pour le charger.
Le fichier .P peut être téléchargé à l’ adresse http://www.sinclairzxworld.com/viewtopic.php?f=11&t=2376&p=24988#p24988.
la source