Buat versi logo BBC Micro owl

13

BBC Micro Owl Logo

Bisakah Anda membuat versi logo BBC Micro Owl sesuai kode di atas?

Aturan:

  • Anda dapat menggunakan bahasa pemrograman apa pun yang Anda suka.
  • Output dapat berupa teks atau grafik.
  • Lingkaran tidak harus tumpang tindih.

Pemenang:

  • Jawaban dengan kemenangan terbanyak menang.

Kudos untuk siapa saja yang mencoba ini di BBC basic

Anda dapat membaca tentang BBC Micro di sini

Ben Paton
sumber
3
"Paling inventif" dan "paling seperti aslinya" adalah subyektif. Harap berikan kriteria kemenangan yang objektif. (Saya memilih untuk menutup, karena "Pertanyaan tanpa kriteria pemenang utama obyektif adalah di luar topik, karena mereka membuat tidak mungkin untuk memutuskan entri mana yang harus dimenangkan.")
Doorknob
1
Saya telah mengubah kriteria menang menjadi kode terpendek yang saya harap kurang subyektif untuk semua orang.
Ben Paton
Mungkin golf kode baik- baik saja tapi saya pikir pertanyaan ini bisa cocok dengan tag kontes-popularitas . Kebanyakan suara menang. Itu objektif. Mob memutuskan. Ini mendorong hasil yang menarik tanpa mengorbankan kualitas output / kreativitas untuk menghemat beberapa karakter kode. Saksikan pertanyaan cincin Olimpiade gaya bebas .
Darren Stone
Ide bagus saya telah mengubahnya menjadi kemenangan terbanyak yang lebih adil. Bagaimana cara saya menunda ini?
Ben Paton

Jawaban:

28

BBC BASIC

Saya mencoba menggunakan fungsi trigonometri untuk menggambar lingkaran yang tepat, tetapi itu sangat lambat. Muncul dengan ini sebagai gantinya:

10 MODE 1
20 GCOL 0,1 : VDU 19,1,3,0,0,0
30 FOR Y%=0 TO 20
40 READ N% : P%=65536
50 FOR X%=0 TO 16
60 IF (N% AND P%)=0 THEN GOTO 160
70 X0% = X%*32+384 : Y0% = 872-Y%*32
80 FOR DX%=-16 TO 16 STEP 8
90 FOR DY%=-8 TO 8 STEP 8
100 PLOT 69,X0%+DX%,Y0%+DY%
110 NEXT DY% : NEXT DX%
120 FOR DX%=-8 TO 8 STEP 8
130 FOR DY%=-16 TO 16 STEP 32
140 PLOT 69,X0%+DX%,Y0%+DY%
150 NEXT DY% : NEXT DX%
160 P%=P%/2
170 NEXT : NEXT
1000 DATA 87381,33410,69905,10280
1010 DATA 69649,33410,82181,40968
1020 DATA 87377,43520,87297,43520
1030 DATA 21761,10880,5441,2720
1040 DATA 1361,552,1093,43682,1

Inilah hasilnya:

GIF animasi dari BBC Micro Owl Logo

r3mainer
sumber
6
Wow, sungguh luar biasa, seseorang benar-benar meluangkan waktu menggunakan BBC basic. Saya sangat terkesan!!
Ben Paton
Itu burung hantu yang bagus. Apakah Anda menggunakan BBC nyata atau program emulator. Jika itu emulator, yang mana? karena itu tidak sama dengan yang saya gunakan.
Level River St
BTW, jika Anda ingin menggambar lingkaran lebih cepat, jangan gunakan fungsi trigonometri, gunakan teorema pythagoras: Y = (R ^ 2-X ^ 2) ^ 0,5 lihat jawaban saya untuk pertanyaan pelangi. Dan sebenarnya ada cara yang lebih maju untuk melakukannya dengan hanya penambahan, berdasarkan pada fakta bahwa (1) + (3) + (5) .... (1 + 2n) = (n + 1) ^ 2.
Level River St
10

GolfScript

"!C-DD[5v`>U8G`J2zX['b#L*\\q>FQp "{32-}%96base 2base{"   *"2/=}%18/{""*1>17/~n@n}/

Kode mencetak versi ascii art dari logo (jalankan di sini ).

* * * * * * * * * 
 *     * *     * 
*   *   *   *   * 
   * *     * *   
*   *       *   * 
 *     * *     * 
* *     *     * * 
 * *         *   
* * * * * * *   * 
 * * * *         
* * * * *       * 
 * * * *         
  * * * *       * 
   * * * *       
    * * * *     * 
     * * * *     
      * * * *   * 
       *   * *   
      *   *   * * 
 * * * * * *   * 
                * 
Howard
sumber
4
Sangat mengesankan dalam 82 karakter!
Ben Paton
7

Mathematica

Tidak ada yang lain selain pekerjaan kasar.

w = 20; h = 25; r = .7; r2 = .2; t = Table; d = Disk;
owl = Graphics[{Polygon[{{0, 0}, {w, 0}, {w, h}, {0, h}}],
   ColorData[57, 4],
   t[d[{k, 22}, r], {k, 2, 19, 2}],
   t[d[{18, k}, r], {k, 2, 21, 2}],
   t[d[{k, #}, r], {k, #2}] & @@@ {{21, {3, 9, 10, 11, 17}}, {20, {2, 
       6, 10, 14, 18}},
     {19, {5, 6, 7, 13, 14, 15}}, {18, {6, 9, 11, 14}}, {17, {10, 
       17}, {16, {16}}, {15, {15}}, {14, {8, 10, 12, 14}},
      {13, {9}}, {12, {9}}}},  
   t[d[{# - k, k}, r], #2] & @@@ {{20, {k, 18, 3, -1}}, {19, {k, 16, 
       6, -1}}, {18, {k, 16, 5, -1}}, {17, {k, 14, 7, -1}}, {16, {k, 
       14, 6, -1}}, {14, {k, 11, 5, -1}}, {14, {k, 12, 5, -1}}},
   t[d[{k, 4}, r], {k, {8, 12}}],
   t[d[{k, 3}, r], {k, 3, 13, 2}],
   d[{8, 13}, r],
   Black, d[{10, 21}, r2], d[{8, 13}, r2], d[{9, 12}, r2],
   t[d[{19 - k, k}, r2], {k, 16, 6, -1}],
   t[d[{17 - k, k}, r2], {k, 14, 7, -1}],
   t[d[{15 - k, k}, r2], {k, 12, 6, -1}],
   t[d[{k, 19}, r2], {k, {6, 14}}]}, ImageSize -> 220]

burung hantu

DavidC
sumber
7

R

image(t(matrix(as.integer(sapply(c(1397760,567810,1070336,141954,1381696,133794,
                                   1054036,559786,1332560,557218,1052756,131114,
                                   1380368,139272,1064964,557058,1398101),
                                   intToBits)[1:21,]),nr=21)),ax=F)

Hasil dalam:

masukkan deskripsi gambar di sini

Pada dasarnya idenya adalah untuk mengambil representasi basis-2 dari 17 angka (1397760, 567810, 1070336, 141954, 1381696, 133794, 1054036, 559786, 1332560, 557218, 1052756, 131114, 1380368, 139272, 1064964, 557058 dan 1398101) , buat menjadi 21x17 matriks 1 dan 0s dan plot matriks apa adanya.

plannapus
sumber
7

Pov-Ray

background{color<.14,.01,.01>}
camera{orthographic location z*-2 up y*24 right x*20}
#macro s(X,Y)sphere{<X,Y,0>,1.07,2.6}#end
#declare b=array[17]{1397760,567810,1070336,141954,1381696,133794,1054036,
559786,1332560,557218,1052756,131114,1380368,139272,1064964,557058,1398101}
blob{threshold 0.9 #for(j,0,16,1)#declare V=b[j];#for(i,0,28,1)
#if(mod(V,2))s(j-8,i-10)#end #declare V=floor(V/2);#end #end
pigment{color<1,1,.8>}finish{ambient 1}}

'kompilasi' dengan povray +Ibbc.pov -Obbc.png +A0.1 +R9 -W240 -H285

masukkan deskripsi gambar di sini

matja
sumber
6

Pesta

Karena Anda tidak menentukan tidak ada sumber daya eksternal ...

curl -s http://codegolf.stackexchange.com/questions/19214/render-a-version-of-the-bbc-micro-owl-logo | grep '* * *' | sed -n '/code>\*/,/<pre>/p' | sed '$d' | sed 's/<pre><code>//'

Howard - curi seni Ascii Anda, terima kasih.

Atau setelah saya unggah di sini -

curl -s http://textuploader.com/1ojd | sed -n '/<code/,/<\/code>/p' | sed 's/<[^>]\+>//g'
hapus clemeat
sumber
4
Kurasa itu pemikiran lateral ...
Ben Paton
5

BBC Basic, warna acak, golf!

149 karakter. Saya tidak begitu besar dalam bermain golf (saya lebih suka tantangan kode) tetapi saya menyukai kekonyolan bermain golf di BBC basic. Emulator BBC di http://www.bbcbasic.co.uk/ . Berjalan dalam mode layar 6 di baris perintah.

FORK = 6TO185S = K MOD9 = 5VDU-32 * (K MOD18 = 15), 17.128 + RND (6) * (ASCMID $ ("? OSUuLEMSS ^ H? = A_W", K / 6,1) / 2 ^ (K MOD6) AND1), 32,17,128,32, -13 * S, -10 * S: NEXT

masukkan deskripsi gambar di sini

Penjelasan (versi ungolfed)

Tidak ada pernyataan IF, karena sisa baris hanya akan dieksekusi jika IF benar (jadi untuk memastikan NEXT tercapai saya harus melakukan program dengan nomor baris.) Oleh karena itu saya banyak menggunakan ASC (null karakter) = 0 untuk mengontrol output. Juga, saya harus memotong piksel di sudut kanan bawah agar sesuai dengan seluruh baris perintah di layar setelah pencetakan (dan itu menyelamatkan 2 karakter.

Saya suka bagaimana BBC basic dapat mengenali pengidentifikasi setelah FOR, bahkan tanpa spasi. FORE, FORD, FORK, FORM, FORS, FORT :-)

 FOR K=6 TO 185

     REM Set S to true(-1) if K mod 9 = 5, otherwise set S to false(0)

     S = K MOD 9=5

     REM If K mod 18 = 15, send asc(space)=32 to the VDU controller,otherwise send 0.  
     REM This causes staggering every 2 lines.

     VDU-32*(K MOD18=15)

     REM Vdu 17 for colour. foreground colours start at 0, background colours at 128.
     REM Rnd(6) to choose a bright color. Multiply by the horrible expression. 
     REM The horrible expression evaluates to 1 if the pixel is to be printed, 0 if not.
     REM Picture data is stored in base 64 in the string.
     REM MID$ extracts the characters in order. 
     REM The FOR loop starts at K=6 so that this will work properly.
     REM Extracted character SHR ((K mod 6)) AND 1 to decide to
     REM colour pixel or not. BBC basic does not have SHR operator.
     REM so we divide by 2^(K mod 6) instead.

     VDU 17,128+RND(6)*
      (ASC(MID$( "?OSUuLEMSS^H?=A_<A^tC|dGxEMh>W" ,K/6,1))/2^(K MOD 6)AND 1)

     REM Print a space in the new background colour

     VDU 32

     REM Change background colour back to black

     VDU 17,128

     REM Print another space 

     VDU 32

     REM If S is true (-1) print a carriage return and linefeed. otherwise two 0's

     VDU -13*S,-10*S

 NEXT
Level River St
sumber
Terima kasih telah berkontribusi bahwa ini adalah solusi yang sangat pintar dan burung hantu warna-warni yang bagus, saya belum pernah melihat golf dasar BBC sebelumnya.
Ben Paton
Terima kasih telah mengilhami saya untuk pergi dan mencari emulator dasar BBC. Ini adalah bahasa yang hebat yang belum pernah saya gunakan selama 20 tahun. Ada banyak fasilitas grafis yang dibangun tanpa harus menyertakan perpustakaan tambahan, yang menjadikannya bahasa yang sangat baik untuk bermain golf tugas seperti ini.
Level River St
Juga, pertama kali saya menggunakan basis 64. Itu tepat untuk gambar ini, menjadi 18 piksel untuk setiap 2 baris. Saya pasti akan menggunakannya lagi. Fakta bahwa bit ke-6 adalah huruf besar / huruf kecil berarti Anda hanya benar-benar harus memikirkan lima lainnya. Saya menemukan bahwa membuatnya semudah hex begitu saya masuk ke dalamnya.
Level River St
4

C

Output ASCII.

x[]={256,191,424,104,376,60,316,30,286,15,287,15,383,67,403,153,325,102,341,153,511};i=20;mai
n(){for(;i>=0;i--){i&1&&putchar(32);while(x[i]){putchar(x[i]&1?42:32);x[i]>>=1;putchar(32);}pu
tchar(10);}}

Output kode:

* * * * * * * * * 
 *     * *     * 
*   *   *   *   * 
   * *     * *   
*   *       *   * 
 *     * *     * 
* *     *     * * 
 * *         *   
* * * * * * *   * 
 * * * *         
* * * * *       * 
 * * * *         
  * * * *       * 
   * * * *       
    * * * *     * 
     * * * *     
      * * * *   * 
       *   * *   
      *   *   * * 
 * * * * * *   * 
                * 
Oberon
sumber
4

JavaScript - 326 307 285 karakter (ASCII)

a=[1716886015,1133746501,253693823,1010572830,3215485048,0];s="";with(Math)
for(y=0;44>y;y++,s+="\n")for(x=0;90>x;x++,s+="#8*+=:-. "[min(floor(d),8)])
for(j=d=0;22>j;j++)for(i=0;9>i;i++)1==((8==i?j+1:a[floor(j/4)]>>i+j%4*8)&1)
&&(d+=50/pow(pow(x-10*(i+j%2/2)-4,2)+pow(2*y-4*j-4,2),1.5));s;

Mungkin bukan kode terpendek. Saya mencoba sedekat mungkin dengan logo asli, hanya menggunakan ASCII.

Untuk mengeksekusi: salin tempel ke konsol javascript (mis: chrome atau firefox). Catatan: skrip mungkin membutuhkan sedikit waktu untuk dijalankan sehingga jika tidak ada yang datang setelah menekan enter, bersabarlah.

tigrou
sumber
Anda dapat mempersingkat ini dengan melakukan m=Math;dan kemudian melakukan m.floor, m.powdll.
eithed
1
Bahkan lebih dengan membungkus for-Luar terluar dalam with (Math)dan kemudian menghilangkan Math.pada setiap kejadian. Pindahkan s+=bagian ke tajuk for-loop (di sebelah y++/ x++) untuk menyingkirkan beberapa kawat gigi. Saya pikir ini tipikal untuk menggunakan alert/ promptuntuk I / O ketika bermain golf di JS, jadi saya akan memilih alert(s)yang terakhir.
FireFly
Terima kasih atas tips dan komentarnya. Saya seorang pemula dalam hal mengoptimalkan ukuran kode :) Tentang saran lansiran / saran: Saya mencoba menggunakannya, tetapi ada beberapa masalah: peramban (setidaknya Chrome) sepertinya membungkus teks secara otomatis jika garis terlalu panjang, yang pecah logo.
tigrou
4

CoffeeScript

Kode tidak golf. Ini menggunakan beberapa algoritma metaballs -ish untuk mensimulasikan "lengket" dari lingkaran. Burung hantu ASCII dicuri tanpa malu-malu dari jawaban lain :)

canvas = document.createElement 'canvas'
canvas.style.backgroundColor = '#240202'
canvas.style.transform = 'scale(0.5) translate(-480px,-570px)'
W = canvas.width = 960
H = canvas.height = 1140
D = 50
R = D / 2
ctx = canvas.getContext '2d'
imageData = ctx.getImageData 0, 0, W, H
data = imageData.data
owl = '''

\ * * * * * * * * *
\  *     * *     *
\ *   *   *   *   *
\    * *     * *
\ *   *       *   *
\  *     * *     *
\ * *     *     * *
\  * *         *
\ * * * * * * *   *
\  * * * *
\ * * * * *       *
\  * * * *
\   * * * *       *
\    * * * *
\     * * * *     *
\      * * * *
\       * * * *   *
\        *   * *
\       *   *   * *
\  * * * * * *   *
\                 *
'''.split '\n'

insideDot = (x, y) ->
  w = 0
  for du in [-1..1] then for dv in [-1..1]
    u = x // D + du
    v = y // D + dv
    continue unless owl[v]?[u] is '*'
    dx = x - (u * D + R)
    dy = y - (v * D + R)
    d = dx * dx + dy * dy
    w += 1 / (d * d)
    return yes if w > 0.0000008
  no

for y in [0...H] then for x in [0...W] when insideDot x, y
  i = (y * W + x) * 4
  data[i] = data[i+1] = data[i+3] = 255
  data[i+2] = 214

ctx.putImageData imageData, 0, 0
document.body.appendChild canvas

Tonton itu hancurkan dokumentasi coffeescript.org (tekan Run):

OwlScript

epidemi
sumber
2

PHP

Membangun versi seni ascii dari logo yang dikirimkan sebelumnya dan menggunakan ini sebagai array untuk membuat versi grafis menggunakan pustaka GD.

$circleWidth = 34;
$circleHeight = 34;
$movement = 24;
$canvasWidth = 480;
$canvasHeight = 570;
$image = imagecreatetruecolor($canvasWidth, $canvasHeight);
$backgroundColour = imagecolorallocate($image, 36, 2, 2);
ImageFillToBorder($image, 0, 0, $backgroundColour, $backgroundColour);
$circleColour = imagecolorallocate($image, 255, 255, 214);
$coordinates ='
* * * * * * * * * 
 *     * *     *  
*   *   *   *   * 
   * *     * *    
*   *       *   * 
 *     * *     *  
* *     *     * * 
 * *         *    
* * * * * * *   * 
 * * * *          
* * * * *       * 
 * * * *          
  * * * *       * 
   * * * *        
    * * * *     * 
     * * * *      
      * * * *   * 
       *   * *    
      *   *   * * 
 * * * * * *   *  
                * ';
$coordinates = str_split($coordinates);
$coordinateX = $movement;
$coordinatY = $movement;
$i=1;
foreach ($coordinates as $coordinate) {
    if ($i < 19) {
        if ($coordinate == '*') { 
            ImageFilledEllipse($image, $coordinateX, $coordinatY, $circleWidth, $circleHeight, $circleColour);  
        }
        $coordinateX = $coordinateX + $movement;
        $i++;
    } else {
        $i=1;
        $coordinateX = $movement;
        $coordinatY = $coordinatY + $movement;
    }
}
header("Content-type: image/png");
imagepng($image);
imagedestroy($image);

Hasil dalam:

Logo BBC Owl dari PHP

Ben Paton
sumber