BBC BASIC, 202
INPUTh:w=h/12s=w/2.4p=25VDU22,6,29,640;400;p,4,0;1.5*w;p,153,6*w;0;p,4,0;1.5*w;p,159,h/3.1;4.7*w;p;9*s;9*w;p,87,h/3.1;-19*w;p,4,-7.5*w;0;p;s;w;p,85,4.5*s;0;p,81,s;w;p;s;w;p;s;w;p,85,-7.5*w;2*w;p,81,s;w;
Téléchargez l'émulateur à l' adresse http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Dans BBC Basic, tous les graphiques sont gérés au niveau inférieur à l’aide de caractères de contrôle ASCII spécifiques à la machine (mais certaines commandes de niveau supérieur sont également disponibles pour les commandes courantes.) Celles utilisées ici sont 22 (changement du mode d’affichage) 29 (changement origine) et 25, équivalent à l’instruction PLOT, qui prend un paramètre d’action supplémentaire (tracer une ligne, un cercle, un triangle, etc. en arrière-plan / avant-plan avec déplacement relatif / absolu) avant les paramètres X et Y.
Donc, tout ce que j'ai à faire, c'est d'envoyer une charge de caractères au contrôleur VDU. les valeurs terminées en point-virgule sont 16 bits. d'autres sont en 8 bits. Le nombre total d'octets envoyés au contrôleur de l'écran de visualisation est de 91 , bien que cela ne soit pas considéré en soi comme une réponse car à ce stade, la taille est codée en dur.
Le lieu évident pour l'origine est le centre du cercle, mais il y a en réalité plus de commandes impliquées dans la production des barres. J'ai donc décalé l'origine de 1,5 au bas de la barre inférieure, ce qui réduit le nombre de fractions et de nombres négatifs requis. Il reste sur la ligne verticale avec le centre du cercle, ce qui est important car la ligne E part de cette ligne verticale.
En fait, il me suffisait de calculer 3 chiffres du dessin: le coin interne supérieur de la forme en C (5 cos 40, 5 sin 40 + 1,5) = (3,8302,3.1394 + 1,5) = environ (12 / 3,1, 4,6) et la pente de la droite E: x / y = 3,8302 / (6 + 3,1394) = 0,4157 = environ 1 / 2,4
Comme je n'ai que la version d'évaluation gratuite (interprétée), je prends la hauteur du symbole en tant qu'entrée de l'utilisateur. Si vous achetez la version complète (29.99GBP), vous pouvez compiler et lire la ligne de commande avec w=VAL(@cmd$)/12
.
Code non-liquéfié
Dans le code golfé, il n’ya qu’une déclaration VDU, mais dans le code non golfé, je la décompose en plusieurs pour plus de clarté. En outre, comme la base de la BBC est peu répandue, la combinaison p,0,
peut être utilisée, p;
mais je l’ai laissée sans couleur pour plus de clarté.
INPUT h
w=h/12 :REM w is the width of the line, which is 1/12 the height of the symbol, hardcoded at 900.
s=w/2.4 :REM s/w is the gradient x/y of line E. s is the horizontal offset of the top and bottom of the ends of horizontal bars
p=25 :REM VDU p,action,x;y; is the equivalent of PLOT action,x,y
VDU 22,6 :REM change mode
VDU 29,640;400; :REM set origin
VDU p,4,0;1.5*w; :REM move to centre of circle
VDU p,153,6*w;0; :REM draw circle in foreground colour
VDU p,4,0;1.5*w; :REM move to centre of circle
VDU p,159,h/3.1;4.6*w; :REM draw circle in background colour, ending at the upper inner point of the C shape.
VDU p,0,9*s;9*w; :REM move relative along slant gradient, 9 spaces in y direction, to define the upper cut on the circle
VDU p,87,h/3.1;-19*w; :REM draw triangle in background colour, based on the last two points and the absolute point specified here (vertical line for lower cut)
VDU p,4,-7.5*w;0; :REM move absolute to bottom left of lower bar
VDU p,0,s;w; :REM move relative to top left of lower bar
VDU p,85,4.5*s;0; :REM draw triangle to bottom right corner of lower bar (absolute)
VDU p,81,s;w; :REM draw triangle to top right of lower bar (relative)
VDU p,0,s;w; :REM move relative to bottom right of upper bar
VDU p,0,s;w; :REM move relative to top right of upper bar
VDU p,85,-7.5*w;2*w; :REM draw triangle to bottom left of upper bar (absolute)
VDU p,81,s;w; :REM draw triangle to top left of upper bar (relative)