BBC BASIC
Rev B, 234 bytes
En lugar de dibujar una cruz blanca y una roja, dibujamos 100 cruces progresivamente más estrechas, cambiando del fondo blanco al primer plano rojo en una coordenada de 60.
p=20761m=1049w=600h=300F.i=-1TO1V.29,w;h;18;4,m;134*i;0;m;w*i;-233;p;0;466;m;0;67*i;m;-466;h*i;p;932;0;18;1,m;511*i;h*i;25;89*i;0;29977;0;0;m;w*i;-h*i;28953;0;45*i;
N.F.c=-100TO0q=25881-c DIV60*512V.m;-c;-h;q;c;h;m;-w;-c;q;w;c;
N.
Descargue el intérprete gratis en http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Totalmente golfizado, 249 bytes
Códigos de VDU de un solo byte, por ejemplo, 25,0
combinados en little endian de doble byte, por ejemplo, 25;
y uso máximo de constantes para valores comunes. Palabras clave comprimidas en forma abreviada, p. Ej. FOR
=> F.
(El intérprete se expande automáticamente).
p=20761q=26393r=25881m=1049c=100w=600h=300F.i=-1TO1V.29,w;h;18;4,m;134*i;0;m;w*i;-233;p;0;466;m;0;67*i;m;-466;h*i;p;932;0;18;1,m;511*i;h*i;25;89*i;0;29977;0;0;m;w*i;-h*i;28953;0;45*i;
N.V.m;-c;-h;q;c;h;2m;-w;-c;q;w;c;m;-60;-h;r;60;h;m;-w;-60;r;w;60;
Semigolfed
Códigos de VDU sin procesar. En BBC BASIC, los caracteres pueden enviarse al controlador VDU como VDU65
(imprime una A). Hay ciertos caracteres especiales particulares de la BBC para los gráficos. Estos deben ser seguidos por varios otros bytes para especificar coordenadas, etc. Aquí usamos PLOT
=> VDU25
, GCOL
=> VDU18
, ORIGIN
=> VDU29
.
c=100w=600h=300 :REM constants 100,width,height
FORi=-1TO1 :REM loop -1 and 1 (0 draws nothing)
VDU29,w;h; :REM set origin (bring inside loop for golfing reasons)
VDU18;4 :REM change to blue and draw triangles
VDU25,4,134*i;0;25,4,w*i;-233;25,81,0;466;25,4,0;67*i;25,4,-466;h*i;25,81,932;0;
VDU18;1 :REM change to red and draw parallelograms
VDU25,4,511*i;h*i;25,0,89*i;0;25,117,0;0;25,4,w*i;-h*i;25,113,0;45*i;
NEXT
VDU25,4,-c;-h;25,103,c;h;25,4,-w;-c;25,103,w;c; :REM draw white background rectangles
VDU25,4,-60;-h;25,101,60;h;25,4,-w;-60;25,101,w;60; :REM draw red foreground rectangles
Primero dibujamos la mitad de las partes diagonales: 2 triángulos azules y 2 paralelogramos rojos. Luego cambiamos la escala de -1 a +1 y dibujamos la otra mitad. Finalmente dibujamos las partes horizontal y vertical en la parte superior: 2 rectángulos blancos para formar una cruz blanca, luego 2 rectángulos rojos. La imagen después de la primera iteración del bucle se muestra a continuación, junto con la imagen final.
Código sin golf
BBC basic recuerda las últimas 2 ubicaciones del cursor de gráficos. PLOT81 dibuja un triángulo entre las nuevas coordenadas especificadas y estas dos últimas ubicaciones. PLOT113 y PLOT117 dibujan un paralelogramo de manera similar: se deben dar tres esquinas del paralelogramo en el orden en que se encuentran alrededor del perímetro. Los últimos tres bits del código PLOT definen si las coordenadas dadas son absolutas o relativas, y si se utiliza el color frontal o de fondo. Los bits más significativos definen qué tipo de forma se dibuja (punto, línea, triángulo, paralelogramo, rectángulo, etc.)
ORIGIN600,300 :REM move the origin (which will be centre of flag) away from the corner of the screen.
FORi=-1TO1 :REM at scales of -1 and 1, plot half each of the diagonal parts (i=0 plots nothing).
GCOL0,4 :REM blue foreground colour
PLOT4,134*i,0 :REM absolute move to peak of upper/lower triangle
PLOT4,600*i,-233 :REM absolute move to left hand corner
PLOT81,0,466 :REM relative move to right hand corner, plotting triangle
PLOT4,0,67*i :REM absolute move to peak of left/right triangle
PLOT4,-466,300*i :REM absolute move to lower corner
PLOT81,932,0 :REM relative move to upper corner, plotting triangle
GCOL0,1 :REM red foreground colour
PLOT4,511*i,300*i :REM absolute move to long edge of flag
PLOT0,89*i,0 :REM relative move to corner of flag (top right / bottom left)
PLOT117,0,0 :REM absolute move to centre of flag, plotting parallelogram (stripe)
PLOT4,600*i,-300*i :REM absolute move to corner of flag (bottom right / top left)
PLOT113,0,45*i :REM relative move to short edge of flag, plotting parallelogram (stripe)
NEXT :REM diagonal parts completed, now plot vertical/horizontal parts on top.
PLOT4,-100,-300 :REM move to bottom left of vertical white stripe
PLOT103,100,300 :REM move to top right corner, plot it in background colour (white)
PLOT4,-600,-100 :REM move to bottom left corner of horizontal white stripe
PLOT103,600,100 :REM move to top right corner, plot it in background colour (white)
PLOT4,-60,-300 :REM move to bottom left of vertical red stripe
PLOT101,60,300 :REM move to top right corner, plot it in foreground colour (red)
PLOT4,-600,-60 :REM move to bottom left corner of horizontal red stripe
PLOT101,600,60 :REM move to top right corner, plot it in foreground colour (red)