BBC BASIC
Rev B, 234 bytes
Em vez de desenhar uma cruz branca e uma cruz vermelha, desenhamos 100 cruzamentos progressivamente mais estreitos, alternando de fundo branco para primeiro plano vermelho com uma 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.
Faça o download do intérprete gratuitamente em http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Totalmente jogado, 249 bytes
Códigos VDU de byte único, por exemplo, 25,0
combinados em little endian de byte duplo, por exemplo, 25;
e uso máximo de constantes para valores comuns. Palavras-chave compactadas para a forma abreviada, por exemplo, FOR
=> F.
(o intérprete se expande automaticamente.)
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;
Semigolfe
Códigos VDU brutos. No BBC BASIC, os caracteres podem ser enviados para o controlador VDU como VDU65
(imprime um A.) Existem certos caracteres especiais específicos da BBC para gráficos. Estes devem ser seguidos por vários outros bytes para especificar coordenadas, etc. Aqui 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
Primeiro, desenhamos metade das partes diagonais: 2 triângulos azuis e 2 paralelogramos vermelhos. Em seguida, alteramos a escala de -1 para +1 e desenhamos a outra metade. Finalmente, desenhamos as partes horizontais e verticais na parte superior: 2 retângulos brancos para formar uma cruz branca, depois 2 retângulos vermelhos. A imagem após a primeira iteração do loop é mostrada abaixo, juntamente com a imagem final.
Código ungolfed
O BBC basic lembra os dois últimos locais do cursor gráfico. PLOT81 desenha um triângulo entre as novas coordenadas especificadas e esses dois últimos locais. PLOT113 e PLOT117 desenham um paralelogramo da mesma maneira: três cantos do paralelogramo devem ser dados na ordem em que são encontrados percorrendo o perímetro. Os últimos três bits do código PLOT definem se as coordenadas fornecidas são absolutas ou relativas e se a cor de primeiro plano ou de fundo é usada. Os bits mais significativos definem que tipo de forma é desenhada (ponto, linha, triângulo, paralelogramo, retâ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)