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;
unduh emulator di http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Di BBC basic, semua gambar ditangani pada level rendah menggunakan karakter kontrol ASCII khusus mesin (tetapi beberapa perintah level tinggi juga tersedia untuk yang umum untuk kenyamanan.) Yang digunakan di sini adalah 22 (ubah mode tampilan) 29 (ubah asal) dan 25, setara dengan pernyataan PLOT, yang mengambil parameter tindakan tambahan (menggambar garis, lingkaran, segitiga, dll. di latar belakang / latar depan dengan gerakan relatif / absolut) sebelum parameter X dan Y.
Jadi yang harus saya lakukan adalah mengirim banyak karakter ke VDU controller. nilai yang diakhiri dalam titik koma adalah 16 bit. yang lain 8 bit. Jumlah total byte yang dikirim ke pengontrol VDU adalah 91 , meskipun itu sendiri tidak akan memenuhi syarat sebagai jawaban karena pada tahap itu ukurannya di-hardcode.
Tempat yang jelas untuk asal adalah pusat lingkaran, tetapi sebenarnya ada lebih banyak perintah yang terlibat dalam memproduksi palang. Jadi saya menggeser asal turun 1,5 ke bagian bawah bar yang lebih rendah, yang mengurangi jumlah fraksi dan angka negatif yang diperlukan. Tetap pada garis vertikal dengan pusat lingkaran, yang penting karena garis E dimulai dari garis vertikal ini.
Sebenarnya, saya hanya harus menghitung 3 angka dari gambar: sudut bagian dalam atas dari bentuk C (5 cos 40, 5 sin 40 + 1.5) = (3.8302,3.1394 + 1.5) = approx (12 / 3.1, 4.6) dan gradien garis E: x / y = 3,8302 / (6 + 3,1394) = 0,4157 = kira-kira 1 / 2,4
Karena saya hanya memiliki versi evaluasi gratis (ditafsirkan), saya menganggap tinggi simbol sebagai input pengguna. Jika Anda membeli versi lengkap (29.99GBP), Anda dapat mengkompilasi dan kemudian membaca baris perintah dengan w=VAL(@cmd$)/12
.
Kode tidak dikunci
Dalam kode golf, hanya ada satu pernyataan VDU, tetapi dalam kode yang tidak disatukan saya memecahnya menjadi beberapa untuk kejelasan. Juga, karena dasar BBC sedikit endian, kombinasinya p,0,
bisa di p;
mainkan, tetapi saya membiarkannya tidak jernih untuk kejelasan.
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)