BBC Micro baykuş logosunun bir sürümünü oluşturma [kapalı]


15

BBC Mikro Baykuş Logosu

BBC Micro Owl logosunun yukarıdaki koddan bir versiyonunu çıkarabilir misiniz?

Kurallar:

  • İstediğiniz herhangi bir programlama dilini kullanabilirsiniz.
  • Çıktı metin veya grafik olabilir.
  • Çevrelerin çakışması gerekmez.

Kazanan:

  • En çok oy alan cevap kazanır.

BBC basic bunu deneyen herkes için şeref.

BBC Micro hakkında buradan bilgi edinebilirsiniz


4
"En yaratıcı" ve "en çok orijinal gibi" özneldir. Lütfen nesnel bir kazanma kriteri sağlayın. (Kapatmak için oy kullanıyorum, göre "Birincil birincil kazanma kriteri olmayan sorular konu
dışıdır

1
Kazanma ölçütlerini herkes için daha az öznel olduğunu umduğum en kısa koda değiştirdim.
Ben Paton

Belki de kod golf iyi ama bu sorunun bir popülerlik yarışması etiketine uygun olabileceğini düşünüyorum . Çoğu oy kazanır. Bu nesneldir. Mafya karar verir. Bu, birkaç karakter kodunu kaydetmek için çıktı kalitesinden / yaratıcılığından ödün vermeden ilginç sonuçları teşvik eder. Serbest stil Olimpiyat halkaları sorusuna tanık olun .
Darren Stone

İyi fikir, çoğu adil oy olan kazançları değiştirdim. Bunu ertelemeyi nasıl sağlayabilirim?
Ben Paton

1
Altı yaşında bir soruyu on iki iyi yanıtla kapatmanın verimli olduğunu düşünmüyorum.
Jonathan Frech

Yanıtlar:


31

BBC TEMEL

Uygun daireler çizmek için trig fonksiyonlarını kullanmayı denedim, ama bu acı verici bir şekilde yavaştı. Bunun yerine geldi:

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

İşte çıktı:

BBC Mikro Baykuş Logosu Hareketli GIF


6
Vay ciddi ciddi biri aslında BBC temel kullanmak için zaman aldı. Çok etkilendim!!
Ben Paton

Güzel bir baykuş. Gerçek bir BBC veya bir emülatör programı mı kullanıyorsunuz? Emülatörse hangisi? çünkü kullandığımla aynı değil.
Level River St

BTW, daha hızlı daireler çizmek istiyorsanız, trig fonksiyonları kullanmayın, pisagor teoremini kullanın: Y = (R ^ 2-X ^ 2) ^ 0.5 gökkuşağı sorusuna cevabımı görün. Ve aslında, (1) + (3) + (5) .... (1 + 2n) = (n + 1) ^ 2 gerçeğine dayanarak, sadece ekleyerek yapmanın daha gelişmiş bir yolu var.
Level River St

10

GolfScript

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

Kod, logonun ascii art versiyonunu yazdırır ( burada çalıştırılır ).

* * * * * * * * * 
 *     * *     * 
*   *   *   *   * 
   * *     * *   
*   *       *   * 
 *     * *     * 
* *     *     * * 
 * *         *   
* * * * * * *   * 
 * * * *         
* * * * *       * 
 * * * *         
  * * * *       * 
   * * * *       
    * * * *     * 
     * * * *     
      * * * *   * 
       *   * *   
      *   *   * * 
 * * * * * *   * 
                * 

4
82 karakterle gerçekten etkileyici!
Ben Paton

7

Mathematica

Hiçbir şey ama homurdanıyor iş.

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]

baykuş


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)

Sonuçlar:

resim açıklamasını buraya girin

Temel olarak fikir 17 sayının taban-2 temsilini almaktır (1397760, 567810, 1070336, 141954, 1381696, 133794, 1054036, 559786, 1332560, 557218, 1052756, 131114, 1380368, 139272, 1064964, 557058 ve 1398101) 1 ve 0'lık 21x17'lik bir matris haline getirin ve matrisi olduğu gibi çizin.


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}}

ile 'derlemek' povray +Ibbc.pov -Obbc.png +A0.1 +R9 -W240 -H285

resim açıklamasını buraya girin


6

darbe

Harici kaynak belirtmediğiniz için ...

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 - Ascii sanatını çaldı, teşekkürler.

Veya buraya yükledikten sonra -

curl -s http://textuploader.com/1ojd | sed -n '/<code/,/<\/code>/p' | sed 's/<[^>]\+>//g'

4
Sanırım bu yanal düşünme ...
Ben Paton

6

BBC Basic, rastgele renkler, golf!

149 karakter. Ben golf büyük değilim (Ben kod zorlukları tercih) ama BBC temel golf saçma sevdim. Http://www.bbcbasic.co.uk/ adresindeki BBC öykünücüsü . Komut satırında ekran modu 6'da çalışır.

ÇATAL = 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 * G: İLERİ

resim açıklamasını buraya girin

Açıklama (ungolfed sürümü)

Hiçbir IF ifadesi yok, çünkü satırın geri kalanı yalnızca IF doğruysa yürütülecekti (NEXT'e ulaşıldığından emin olmak için satır numaralarına sahip bir program yapmak zorunda kalacağım.) Bu nedenle ASC (null) karakter) = 0 çıkış kontrolü. Ayrıca, yazdırdıktan sonra tüm komut satırını ekrana sığdırmak için sağ alt köşedeki pikseli kesmek zorunda kaldım (ve 2 karakter kaydetti.

BBC basic'in, boşluk olmadan bile FOR'dan sonra bir tanımlayıcıyı nasıl tanıyabileceğini seviyorum. 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

Bu gerçekten zekice bir çözüm ve güzel bir renkli baykuş katkıda bulunduğunuz için teşekkür ederim, daha önce BBC temel golf görmedim.
Ben Paton

BBC temel öykünücüsünü aramam için bana ilham verdiğin için teşekkür ederim. 20 yıldır kullanmadığım harika bir dil. Eklenti kütüphaneleri eklemek zorunda kalmadan inşa edilmiş çok sayıda grafik olanağı var, bu da böyle bir görevi golf oynamak için mükemmel bir dil haline getiriyor.
Level River St

Ayrıca, temel 64'ü ilk kez kullandım. Bu resim için her 2 satır için 18 piksel olması doğru. Kesinlikle tekrar kullanacağım. 6. bitin büyük / küçük harf olması, diğer beşi düşünmeniz gerektiği anlamına gelir. Ben içine girdikten sonra altıgen kadar kolay yaptı buldum.
Level River St

Bu twitter.com/bbcmicrobot/status/1229933895401058304 bazı tekniklerinize dayanarak yaptım , çok teşekkürler; Ancak bazı golf fırsatlarını kaçırdığınızı fark ettim. BBC Basic komutları kısaltmanıza izin verir, örneğin 'FOR' = 'F.', 'VDU' = 'V.', Artı x / 2 ^ z VE 1 sadece x VE 2 ^ z,
SHR'ye

4

C

ASCII çıkışı.

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);}}

Kod çıktısı:

* * * * * * * * * 
 *     * *     * 
*   *   *   *   * 
   * *     * *   
*   *       *   * 
 *     * *     * 
* *     *     * * 
 * *         *   
* * * * * * *   * 
 * * * *         
* * * * *       * 
 * * * *         
  * * * *       * 
   * * * *       
    * * * *     * 
     * * * *     
      * * * *   * 
       *   * *   
      *   *   * * 
 * * * * * *   * 
                * 

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;

Muhtemelen en kısa kod değil. Sadece ASCII kullanarak orijinal logoya olabildiğince yakın olmaya çalıştım.

Yürütmek için: yapıştırmayı javascript konsoluna kopyalayın (örneğin: chrome veya firefox). Not: Betiğin çalışması biraz zaman alabilir, bu nedenle enter tuşuna bastıktan hemen sonra hiçbir şey gelmezse biraz sabırlı olun.


Sen yaparak bu kısaltabilirsiniz m=Math;ve sonra yapıyor m.floor, m.powvb
eithed

1
Hatta en dıştaki for-e döngü sarın with (Math)ve daha sonra Math.her durumda atlayarak moreso . Bazı parantezlerden kurtulmak için s+=parçaları for-döngüsü başlığına ( y++/ yanında x++) hareket ettirin . Bunun kullanmak tipik olduğunu düşünüyorum alert/ promptzaman JS golf, ben gelirdim yüzden I / O için alert(s)sonunda yerine.
FireFly

İpuçları ve yorumlar için teşekkürler. Kod boyutu optimizasyonu söz konusu olduğunda bir acemi değilim :) Uyarı / komut istemi hakkında: Onları kullanmaya çalıştım, ancak bazı sorunlar var: satırlar çok uzunsa tarayıcılar (en azından krom) otomatik olarak metni sarar gibi görünüyor, bu da kırdı logo.
tigrou

4

CoffeeScript

Kod golf değil. Çevrelerin "yapışkanlığını" simüle etmek için bazı metaballs -ish algoritması kullanır . ASCII baykuşu utanmadan başka cevaplardan çalındı ​​:)

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

O İzle coffeescript.org belgelerine yok (Run isabet):

OwlScript


2

PHP

Daha önce gönderilen logonun ascii art versiyonları üzerine inşa edilmiş ve GD kütüphanesini kullanarak grafik versiyonu oluşturmak için dizi olarak kullanılmıştır.

$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);

Sonuçlar:

PHP'den BBC Baykuş logosu


2

BBC Temel + GXR

Buna çok geç ama: 'bbcmicrobot' hesabı, <280 karakter ya da daha fazla progs çalıştıran twitter'da Acorn GXR ROM'u ekleyerek daire ve elips çizmeye izin verdi. Birkaç daire ile ne çizebilirim diye düşündüm. Ve bu bana geldi. Kısmen @Level River Street'in cevabına dayanıyor, kısaltılmış temel komutları kullandım, SHR yerine bit testi kullandım ve bit gösterimini değiştirdim:

2MO.2:P."HOW TO DRAW AN OWL":MOV.200,700:PL.&91,120,0:MOV.250,450:PL.0,-200,0:PL.&C1,155,250:V.29,640;130;
5F.G=0TO188:Z=(G MOD18)>8:X=G MOD9*2-Z:Y=G DIV18*2-Z
6IFASC(MID$("@|WhFMxeG|tC^|A_|A?]HSNSEuLUMS?G",(G+6)DIV6,1))AND2^(G MOD6) MOV.X*36,Y*36:PL.&99,24,0
8N.G

bot render kodunun ekran görüntüsü

Orijinal tweet'im burada

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.