Renderice una versión del logotipo de BBC Micro owl

13

BBC Micro Owl Logo

¿Puedes mostrar una versión del logotipo de BBC Micro Owl según el código anterior?

Reglas:

  • Puede usar cualquier lenguaje de programación que desee.
  • La salida puede ser texto o gráfico.
  • Los círculos no tienen que superponerse.

Ganador:

  • La respuesta con más votos a favor gana.

Felicitaciones a cualquiera que intente esto en BBC basic.

Puedes leer sobre BBC Micro aquí

Ben Paton
fuente
3
"Más inventivo" y "más parecido al original" es subjetivo. Proporcione un criterio ganador objetivo. (Voy a votar a cerrar, de acuerdo con "Preguntas sin ganar un criterio principal objetivo son fuera del tema, ya que hacen que sea imposible decidir qué entrada indiscutiblemente debe ganar.")
Pomo
1
He cambiado el criterio de ganar al código más corto que espero sea menos subjetivo para todos.
Ben Paton el
Tal vez el código de golf está bien, pero creo que esta pregunta podría adaptarse a una etiqueta de concurso de popularidad . La mayoría de los votos gana. Eso es objetivo. La multitud decide. Esto fomenta resultados interesantes sin sacrificar la calidad / creatividad de salida para guardar algunos caracteres de código. Sea testigo de la cuestión de los anillos olímpicos de estilo libre .
Darren Stone el
Buena idea, lo he cambiado a la mayoría de los votos a favor, lo que es más justo. ¿Cómo hago para que esto se suspenda?
Ben Paton el

Respuestas:

28

BBC BASIC

Intenté usar las funciones trigonométricas para dibujar círculos apropiados, pero eso fue dolorosamente lento. Se le ocurrió esto:

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

Aquí está la salida:

GIF animado del logotipo de BBC Micro Owl

r3mainer
fuente
66
Wow, realmente sorprendente, alguien realmente se tomó el tiempo para usar BBC basic. ¡¡Estoy muy impresionado!!
Ben Paton
Esa es una buena lechuza. ¿Estás utilizando una BBC real o un programa emulador? Si es un emulador, ¿cuál? porque no es lo mismo que el que usé.
Level River St
Por cierto, si desea dibujar círculos más rápido, no use funciones trigonométricas, use el teorema de Pitágoras: Y = (R ^ 2-X ^ 2) ^ 0.5 vea mi respuesta a la pregunta del arco iris. Y en realidad hay una forma más avanzada de hacerlo con solo suma, basada en el hecho de que (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}/

El código imprime una versión ascii art del logotipo (ejecutar aquí ).

* * * * * * * * * 
 *     * *     * 
*   *   *   *   * 
   * *     * *   
*   *       *   * 
 *     * *     * 
* *     *     * * 
 * *         *   
* * * * * * *   * 
 * * * *         
* * * * *       * 
 * * * *         
  * * * *       * 
   * * * *       
    * * * *     * 
     * * * *     
      * * * *   * 
       *   * *   
      *   *   * * 
 * * * * * *   * 
                * 
Howard
fuente
44
Realmente impresionante en 82 personajes!
Ben Paton el
7

Mathematica

Nada más que un trabajo duro.

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]

búho

DavidC
fuente
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)

Resultados en:

ingrese la descripción de la imagen aquí

Básicamente, la idea es tomar la representación en base 2 de los 17 números (1397760, 567810, 1070336, 141954, 1381696, 133794, 1054036, 559786, 1332560, 557218, 1052756, 131114, 1380368, 139272, 1064964, 557058 y 1398101) , conviértalo en una matriz de 21x17 de 1 y 0s y trace la matriz tal como está.

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

'compilar con povray +Ibbc.pov -Obbc.png +A0.1 +R9 -W240 -H285

ingrese la descripción de la imagen aquí

matja
fuente
6

Golpetazo

Como no especificó ningún recurso externo ...

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 - robó tu arte Ascii, gracias.

O después de que lo cargué aquí :

curl -s http://textuploader.com/1ojd | sed -n '/<code/,/<\/code>/p' | sed 's/<[^>]\+>//g'
carne sin carne
fuente
44
Bueno, eso es pensamiento lateral, supongo ...
Ben Paton
5

BBC Basic, colores aleatorios, golf!

149 caracteres. No soy tan aficionado al golf (prefiero los desafíos del código) pero me gustó la ridiculez del golf en BBC basic. Emulador de la BBC en http://www.bbcbasic.co.uk/ . Se ejecuta en el modo de pantalla 6 en la línea de comando.

HORQUILLA = 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: SIGUIENTE

ingrese la descripción de la imagen aquí

Explicación (versión sin golf)

Sin sentencias IF, porque el resto de la línea solo se ejecutaría si el IF fuera verdadero (por lo tanto, para asegurar que se alcanzara el SIGUIENTE, tendría que hacer un programa con números de línea). Por lo tanto, hice mucho uso de ASC (nulo carácter) = 0 para controlar la salida. Además, tuve que cortar el píxel en la esquina inferior derecha para ajustar toda la línea de comando en la pantalla después de imprimir (y eso salvó 2 caracteres.

Me encanta cómo BBC basic puede reconocer un identificador después de FOR, incluso sin espacios en blanco. 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
fuente
Gracias por contribuir, esa es una solución realmente inteligente y un lindo búho multicolor, nunca antes había visto el golf básico de la BBC.
Ben Paton
Gracias por inspirarme a buscar un emulador básico de la BBC. Es un gran lenguaje que no he usado en 20 años. Tiene muchas instalaciones gráficas integradas sin tener que incluir bibliotecas complementarias, lo que lo convierte en un excelente lenguaje para jugar al golf en una tarea como esta.
Level River St
Además, la primera vez que utilicé la base 64. Era justo para esta imagen, con 18 píxeles por cada 2 líneas. Definitivamente lo usaré de nuevo. El hecho de que el sexto bit sea mayúscula / minúscula significa que solo tienes que pensar en los otros cinco. Descubrí que lo hacía casi tan fácil como el hechizo una vez que me metí en él.
Level River St
4

C

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

Código de salida:

* * * * * * * * * 
 *     * *     * 
*   *   *   *   * 
   * *     * *   
*   *       *   * 
 *     * *     * 
* *     *     * * 
 * *         *   
* * * * * * *   * 
 * * * *         
* * * * *       * 
 * * * *         
  * * * *       * 
   * * * *       
    * * * *     * 
     * * * *     
      * * * *   * 
       *   * *   
      *   *   * * 
 * * * * * *   * 
                * 
Oberon
fuente
4

JavaScript - 326 307 285 caracteres (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;

Probablemente no sea el código más corto. Traté de estar lo más cerca posible del logotipo original, usando solo ASCII.

Para ejecutar: copie y pegue en la consola de JavaScript (por ejemplo: Chrome o Firefox). Nota: el script puede tardar un poco en ejecutarse, por lo que si no aparece nada después de presionar enter, sea un poco paciente.

tigrou
fuente
Puede acortar esto haciendo m=Math;y luego haciendo m.floor, m.powetc.
titulado
1
Incluso más, envolviendo el forbucle más externo en ay with (Math)luego omitiendo Math.cada vez que ocurra. Mueva las s+=partes al encabezado del bucle for (junto a y++/ x++) para deshacerse de algunas llaves. Creo que es típico usar alert/ promptpara E / S cuando se juega al golf en JS, por lo que preferiría ir alert(s)al final.
FireFly
Gracias por consejos y comentarios. Soy un principiante cuando se trata de optimizar el tamaño del código :) Acerca de la sugerencia de alerta / solicitud: intenté usarlos, pero hay algunos problemas: los navegadores (al menos Chrome) parecen ajustar automáticamente el texto si la línea es demasiado larga, que se rompió logo.
tigrou
4

CoffeeScript

El código no es golf. Utiliza un algoritmo metaballs -ish para simular la "adherencia" de los círculos. El búho ASCII fue robado descaradamente de otras respuestas :)

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

Mire cómo destruye la documentación de coffeescript.org ( presione Ejecutar):

OwlScript

epidemia
fuente
2

PHP

Basándose en las versiones artísticas ascii del logotipo presentado previamente y utilizando esto como matriz para representar una versión gráfica utilizando la biblioteca 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);

Resultados en:

Logotipo de BBC Owl de PHP

Ben Paton
fuente