BBC Micro owl 로고 버전을 렌더링합니다. [닫기]


15

BBC 마이크로 올빼미 로고

위 코드에 따라 BBC Micro Owl 로고 버전을 코드에서 렌더링 할 수 있습니까?

규칙 :

  • 원하는 프로그래밍 언어를 사용할 수 있습니다.
  • 출력은 텍스트 또는 그래픽 일 수 있습니다.
  • 원은 겹치지 않아도됩니다.

우승자:

  • 가장 많이 찬성을 가진 답이 이깁니다.

BBC 기본에서 이것을 시도하는 누군가를위한 Kudos.

BBC Micro에 대한 내용은 여기를 참조하십시오.


4
"가장 독창적 인" "원본과 가장 비슷하다"는 주관적입니다. 객관적인 승리 기준을 제공하십시오. ( '객관적인 1 차 우승 기준이없는 질문은 논란의 여지가 있기 때문에 논쟁의 여지가없는 결정은 불가능하기 때문에 주제에 맞지 않는 주제'에 따라 마감 투표를합니다.)
Doorknob

1
승리 기준을 가장 짧은 코드로 변경하여 모든 사람이 덜 주관적이라고 생각합니다.
Ben Paton

아마도 code-golf 는 괜찮을지 모르지만이 질문은 대신 인기 경쟁 태그에 적합 할 수 있다고 생각 합니다. 대부분의 표가 승리합니다. 목표입니다. 폭도가 결정합니다. 이를 통해 출력 품질 / 창의성을 그대로 유지하면서 몇 가지 코드를 절약 할 수있는 흥미로운 결과를 얻을 수 있습니다. 자유형 올림픽 링 문제를 목격하십시오 .
대런 스톤

좋은 생각은 내가 더 공평한 승리로 바 꾸었습니다. 이것을 보류하려면 어떻게해야합니까?
Ben Paton

1
나는 잘 된 12 개의 답변으로 6 살짜리 질문을 끝내는 것이 유익하다고 생각하지 않습니다.
Jonathan Frech

답변:


30

BBC 기본

적절한 원을 그리기 위해 삼각 함수를 사용해 보았지만 고통스럽게 느 렸습니다. 대신에 이것을 생각해 냈습니다.

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

출력은 다음과 같습니다.

BBC Micro Owl 로고 애니메이션 GIF


6
와우 정말 놀랍게도 누군가 BBC 기본을 사용하는 데 실제로 시간이 걸렸습니다. 나는 매우 감동한다!!
Ben Paton

좋은 올빼미입니다. 실제 BBC 또는 에뮬레이터 프로그램을 사용하고 있습니까? 에뮬레이터라면 어느 것입니까? 왜냐하면 내가 사용한 것과 같지 않습니다.
레벨 리버 세인트

BTW, 원을 더 빨리 그리려면 삼각 함수를 사용하지 말고 피타고라스 정리를 사용하십시오. Y = (R ^ 2-X ^ 2) ^ 0.5 무지개 질문에 대한 내 대답을 참조하십시오. 그리고 실제로 (1) + (3) + (5) .... (1 + 2n) = (n + 1) ^ 2라는 사실에 근거하여 더하기만으로 더 발전된 방법이 있습니다.
레벨 리버 세인트

10

GolfScript

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

이 코드는 로고의 ASCII 아트 버전을 인쇄합니다 ( 여기에서 실행 ).

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

4
82 자로 정말 인상적입니다!
Ben Paton

7

매스 매 티카

그런 일 외에는 아무것도 없습니다.

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]

올빼미


7

아르 자형

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)

결과 :

여기에 이미지 설명을 입력하십시오

기본적으로 아이디어는 17 숫자 (297760, 567810, 1070336, 141954, 1381696, 133794, 1054036, 559786, 1332560, 557218, 1052756, 131114, 1380368, 139272, 1064964, 557058 및 1398101)를 기본 2로 표현하는 것입니다. 1과 0의 21x17 행렬로 만들고 행렬을 그대로 플로팅합니다.


7

포 브레이

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

'컴파일' povray +Ibbc.pov -Obbc.png +A0.1 +R9 -W240 -H285

여기에 이미지 설명을 입력하십시오


6

세게 때리다

외부 리소스를 지정하지 않았으므로 ...

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>//'

하워드-아스키 아트를 훔쳤습니다. 감사합니다.

또는 여기에 업로드 한 후 -

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

4
내가 생각하는 것은 횡적인 생각이다.
Ben Paton

6

BBC 기본, 임의의 색상, 골프!

149 자 나는 골프에 큰 관심이 없지만 (코드 도전을 선호합니다) BBC 기본에서 골프의 어리 석음이 마음에 들었습니다. 에서 BBC 에뮬레이터 http://www.bbcbasic.co.uk/ . 명령 행에서 화면 모드 6으로 실행합니다.

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 : 다음

여기에 이미지 설명을 입력하십시오

설명 (교체되지 않은 버전)

IF 문이 없습니다. IF가 참인 경우에만 나머지 행이 실행되므로 (NEXT에 도달하려면 행 번호로 프로그램을 작성해야합니다.) 따라서 ASC (null)를 많이 사용했습니다. 문자) = 0 출력을 제어합니다. 또한 인쇄 후 화면의 전체 명령 줄에 맞추기 위해 오른쪽 하단 모서리의 픽셀을 잘라야했습니다 (2 문자를 절약했습니다).

나는 공백이 없어도 BBC basic이 FOR 후에 식별자를 인식하는 방법을 좋아합니다. 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

정말 영리한 솔루션이자 멋진 다색 올빼미로 기고 해 주셔서 감사합니다. 나는 BBC 기본 골프를 보지 못했습니다.
Ben Paton

BBC 기본 에뮬레이터를 찾아 보게 해주셔서 감사합니다. 20 년 동안 사용하지 않은 훌륭한 언어입니다. 애드온 라이브러리를 포함 할 필요없이 내장 된 많은 그래픽 기능이있어 이와 같은 작업을 수행하기에 탁월한 언어입니다.
Level River St

또한 처음으로 base 64를 사용했습니다.이 이미지에는 2 줄당 18 픽셀이 적당합니다. 나는 확실히 그것을 다시 사용할 것입니다. 6 번째 비트가 대문자 / 소문자라는 사실은 다른 5 개에 대해서만 생각하면된다는 것을 의미합니다. 나는 일단 들어가면 16 진수만큼 쉽게 만들었습니다.
Level River St

방금이 기술 중 일부를 기반으로 twitter.com/bbcmicrobot/status/1229933895401058304 를 수행했습니다. 하지만 골프 기회를 놓친 것 같습니다. BBC Basic을 사용하면 'FOR'= 'F.', 'VDU'= 'V.'와 같은 명령을 축약 할 수 있으며 x / 2 ^ z와 1은 x와 2 ^ z
일뿐입니다.

4

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

코드 출력 :

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

4

자바 스크립트 - 326 개 307 285 문자 (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;

아마도 가장 짧은 코드는 아닙니다. ASCII 만 사용하여 원본 로고에 최대한 가깝게 노력했습니다.

실행하려면 붙여 넣기를 자바 ​​스크립트 콘솔 (예 : chrome 또는 firefox)에 복사합니다. 참고 : 스크립트를 실행하는 데 약간의 시간이 걸릴 수 있으므로 enter 키를 누른 직후에 아무것도 나타나지 않으면 조금 인내심을 가지십시오.


당신은 수행하여이 단축 될 수 있습니다 m=Math;다음 일을 m.floor, m.pow
eithed

1
또한 가장 바깥 쪽의 for루프를 감싸고 각 발생 with (Math)을 생략함으로써 더욱 그렇습니다 Math.. s+=부품을 for 루프 헤더 ( y++/ 옆 x++)로 이동하여 일부 버팀대를 제거하십시오. JS에서 골프를 칠 때 I / O에 alert/ 를 사용하는 것이 일반적이라고 생각합니다 . promptalert(s)
FireFly

팁과 의견에 감사드립니다. 나는 코드 크기 최적화에 관해서 초보자입니다. 심벌 마크.
tigrou

4

CoffeeScript

코드가 골프화되지 않았습니다. 그것은 몇 가지 사용 metaballs에게 원의 "로 점착성을"시뮬레이션 -ish 알고리즘을. ASCII 올빼미는 부끄럽게 다른 답변에서 도난당했습니다. :)

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

그것이 coffeescript.org 문서를 파괴하는 것을 보아라 .

올빼미 스크립트


2

PHP

이전에 제출 한 로고의 아스키 아트 버전을 기반으로하고이를 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);

결과 :

PHP의 BBC Owl 로고


2

BBC 기본 + GXR

매우 늦었지만 트위터에서 'bbcmicrobot'계정은 280 자 이하의 progs를 실행하므로 Acorn GXR ROM을 추가하여 원과 타원을 그릴 수 있습니다. 나는 몇 개의 원으로 무엇을 그릴 수 있을까 생각했습니다. 그리고 이것은 나에게왔다. @Level River Street의 답변에 부분적으로 기반을두고 있습니다. 그래서 약어 기본 명령을 사용하고 SHR 대신 비트 테스트를 사용하고 비트 표현을 변경했습니다.

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

봇 렌더링 코드의 스크린 샷

내 원래 트윗이 여기에 있습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.