Es posible que haya oído hablar del "Logotipo de Hacker", también llamado "Emblema de Hacker". Se parece a esto:
Este es un patrón de una simulación matemática llamada Juego de la vida. El planeador es el patrón de vida más simple que se mueve y el más instantáneamente reconocible de todos los patrones de vida.
El reto
El desafío es bastante simple: mostrar el logotipo del hacker. Esto se define como:
- Una cuadrícula de 3x3 con un borde, un fondo blanco y grillas grises.
- Cinco puntos negros dispuestos en el patrón de planeador GoL.
- Nada más.
Las normas
- Los puntos negros deben llenar 40% - 80% de sus cuadros de cuadrícula individuales.
- Mostrará el emblema con salida gráfica pero sin arte ASCII .
- La salida debe ser de al menos 30x30 píxeles .
- La salida solo debe tener los colores gris, blanco y negro .
- Cada cuadro de cuadrícula en la cuadrícula será del mismo tamaño. La cuadrícula será un cuadrado normal de 3x3 .
- No puede extraer el logotipo de Internet o de su sistema de archivos.
- Su programa mostrará el logotipo en una pantalla / ventana vacía. Si termina, debe hacerlo normalmente.
- Tenga en cuenta que "puntos" no significa necesariamente "círculos". Un "punto" es una forma geométrica única centrada en el centro de la cuadrícula con una superficie. Por ejemplo, mientras que un círculo o cuadrado calificará como un punto, dos triángulos o un tablero no lo harán.
El ganador
Como se trata de código de golf , ¡la respuesta más corta en cada idioma gana!
Incluya una captura de pantalla de la salida de su programa en su respuesta.
Respuestas:
Mathematica, 62 bytes
Mathematica, 71 bytes
fuente
Graphics@Disk[]
como argumento.Rasterize@Grid[{{,●,},{,,●},{●,●,●}},Frame->All,FrameStyle->Gray]
. El ● es un carácter unicode de dos bytes. Como no tiene que ser estrictamente un círculo, quizás algún carácter ASCII podría funcionar para cumplir con el requisito del 40% -80%.Rasterize
o similar para cumplir con el requisito de,graphical output but no ASCII art
ya que los símbolos aún se pueden seleccionar en la cuadrícula como caracteres Unicode.CSS + HTML,
56 + 84 = 140 bytes52 + 84 = 136 bytesSe guardaron 4 bytes al incorporar sugerencias de los comentarios.
Utiliza el carácter UTF-8
•
que tiene 2 bytes de longitud y aprovecha la gracia de la sintaxis HTML.fuente
•
!line-height:.4;
y otro omitiendo el cierre}
GLSL (sombreador de fragmentos),
278235256 bytesVéalo en acción: http://glslsandbox.com/e#40717.2
fuente
precision highp float;void main(){vec2 a=gl_FragCoord.xy/20.-.2;ivec2 b=ivec2(a);a-=vec2(b)+.5;gl_FragColor=vec4(vec3(a.x<-.5||a.y<-.5||a.x>.3||a.y>.3?.5:length(a+.1)<.4&&(b.x+b.y-3)*b.y==0?.0:1.)*float(b.x<3&&b.y<3),1.);}
Python 2 ,
169140 bytesTamaño real, 61 por 61, trazado dentro de un lienzo mucho más grande de 300 por 400:
Mostrando la cuadrícula de píxeles:
Los puntos usan 177 píxeles dentro del rango de 40% -80% si se considera el relleno blanco de 19 por 19 (144.4-288.8) o el 21 por 21, incluidos ambos bordes (176.4-352.8).
Nota: el programa finaliza y cierra la ventana del lienzo tan pronto como el dibujo ha finalizado, para permitir el cierre manual de la ventana, agregue la línea
done()
.turtle
es un paquete de Python desarrollado para la programación gráfica introductoria. Un bolígrafo comienzax,y=0,0
en el medio de un lienzo de 300 por 400 píxeles (por defecto),up
levanta el bolígrafo,goto
mueve el bolígrafo,shape
establece la forma del bolígrafo en una forma con nombre ("square"
es una forma predefinida con un ancho de píxel predeterminado de 21 ),color
establece el color, donde dos parámetros establecen el trazo (con un ancho predeterminado de 1) y el relleno; un byte se guarda utilizando la(r,g,b)
opción de sustituir tupla"white"
con[1,1,1]
el uso de la lista de multiplicación[1]*3
. Finalmentedot
dibuja un punto con el ancho dado en píxeles y color. El valor de ancho predeterminado del punto es demasiado pequeño para calificar, por9
lo que lo convertí en una estética y calificación15
. El color del punto podría ser"black"
pero la(r,g,b)
tupla desempaquetada de0,0,0
es más corta en dos bytes.El lápiz debe alejarse de cualquier punto al final, ya que de lo contrario el lápiz gris / blanco oculta el punto.
La rejilla está atravesada usando un div (
/
) y mod (%
) dei
a partir de8
(i
se inicializa a9
pero se decrementa en el comienzo de lawhile
circular) y trabajando hacia abajo para0
, compensando los resultados de2,1,0
a-1,0,1
usar(1-...)
y escalar cada hasta el tamaño de la cuadrícula usando un factor de 20 (tenga en cuenta que en20-i/3*20
realidad es un byte menor que20*(1-i/3)
, lo mismo ocurre%
). Esto produce el orden [abajo-izquierda, centro-izquierda, arriba-izquierda, abajo-medio, centro-medio, arriba-medio, abajo-derecha, centro-derecha, arriba-derecha], y requiere una "hasDot
" evaluación de[1,0,0,1,0,1,1,1,0]
, que está302
en binario, por lo que se puede acceder inspeccionando la potenciai
th de dos componentes de302
con el uso de un bit a bit-y,302&2**i
.fuente
turtle
.Applesoft BASIC ,
479476516515483482 bytes-32 mediante el uso de nombres de variables ilegibles: P
-1 porque Apple decidió ser mágico y me dejó usar un GOTO implícito / inexistente
Aquí está mi propio programa (muy superable) para un ejemplo de una salida que no usa círculos:
Salida:
fuente
Código de máquina IA-32,
8180 bytesHexdump:
Es una
fastcall
función llamadadoit
que devuelve la imagen en formato PGM en el búfer suministrado. Uso:Salida:
Utilicé una resolución de 256x256 porque
es genial, me permite dividir el índice de píxelesecx
automáticamente en coordenadasy
adentroch
yx
adentrocl
. Además, el formato de archivo PGM requiere el número 255 en el encabezado de la imagen.Los cuadrados internos son 54x54 (41% de la celda por área).
Código fuente (puede ser compilado por Visual Studio):
El patrón celular
puede ser representado por un mapa de bits "optimizado" de 7 bits.
Los bits están indexados por la expresión
y * 2 + x
, donde(x,y)
es la ubicación de la celda. Esta expresión da el mismo índice a 2 pares de células. Es una coincidencia afortunada que los valores de bits sean los mismos.fuente
42*42/85/85
gano solo el 24.4%.HTML y CSS, 155 bytes
Resulta que HTML realmente perdona los errores de sintaxis.
1 byte guardado gracias a @Octopus · 1 byte guardado gracias a @Downgoat · 2 bytes guardados gracias a @StephenS
2 bytes guardados gracias a @Ryan · 3 bytes guardados gracias a @styfle · 4 bytes guardados gracias a @Ferrybig
13 bytes guardados gracias a @SteveBennett
fuente
R (
130119113 bytes)fuente
axes=F
para reemplazarxaxt="n",yaxt="n"
. Si duplica todos los valores de coordenadas, ahorra 4 bytes netos (pero no puede usar el1:3,2:3
truco).;box()
ya queaxes=F
también elimina el marco. Además, comoaxes
es unplot
parámetro y no sean transmitidos apar
través de...
comoxaxt
/yaxt
, no necesita ni siquiera ser explicado por completo.c(1,7)
con una variable (l=c(1,7)
); (2) reemplazarann
conan
; (3) reemplazar[xy]li
con[xy]li
; y (4) retirar el segundo, el argumento redundante paragrid
:grid(3,lt=1)
. De hecho, me he tomado la libertad de editar esto en (bajo revisión).Python 2.7,
214311309 bytesEste es mi primer intento aquí en el código de golf, así que estoy seguro de que esto se puede mejorar. Me hubiera gustado no establecer los límites, pero parece que matplotlib no puede detectar que tracé círculos donde lo hice. Sin establecer xlim () e ylim () solo muestra los dos círculos inferiores.
Salida:
Editar: se corrigió el color de los bordes y se eliminaron los números de marca. Debo decir que matplotlib está muy densamente redactado, y no es muy amigable con los colores cambiantes del eje.
Afeitado 3 bytes gracias a @DJMcMayhem
Editar: eliminé dos bytes configurando mis ticks como una tupla dentro de las funciones set_ticks.
fuente
for s in'xy':exec"x.set_"+s+"ticks(a);"+s+"lim(-.5,2.5);"
. (No he probado eso, así que no soy positivo)Bash + ImageMagick,
233226 caracteresSalida de muestra:
Bash + ImageMagick, 215 caracteres
El propietario de la pregunta aún no ha respondido la pregunta de suavizado y algunas otras soluciones también tienen sombras grises adicionales agregadas por el suavizado, por lo que por ahora esta más corta también parece aceptable.
Salida de muestra:
fuente
Ruby,
144166164148144 bytesSalida:
Editar: ahora tiene grillas grises.
fuente
d=d+1
tiene una forma más corta (d+=1
) y==1
aquí es equivalente a>0
. También considere lo que sucede cuando establece c en un Fixnum en lugar de una matriz :-)[]
como si fuera una matriz de bits (solo lectura, pero está bien aquí).g=[2,13,24]
ag=2,13,24
y reemplazareach
conmap
.PNG,
105100bytes(es decir, este archivo de imagen)
Teniendo en cuenta que el HTML y otros lenguajes que no son de programación están permitidos , tenía curiosidad por ver cuánto podía jugar una imagen simple visualizable en el navegador, para servir como una comparación de referencia. El resultado se comprime con las herramientas de código abierto optipng (
-o7 -zm1-9 -strip all
) y pngwolf . También experimenté con zopflipng , pero los resultados fueron mayores. Es posible que otras herramientas de compresión de código cerrado puedan reducir un par de bytes más.Datos de imagen en base64:
Mostrar fragmento de código
Editar Hice que los puntos toquen la parte superior e inferior de la celda, para causar más repetitividad en el patrón de píxeles y mejorar así la relación de compresión. Pero no se preocupe, un punto todavía solo llena (7 * 9) / (9 * 9) ≈ 78% de su celda.
PNG no estándar, 88 bytes
Como señaló @anatolyg , existe un potencial de golf al eliminar el fragmento IEND (12 bytes). Técnicamente, IEND es requerido por el estándar . Sin embargo, cada fragmento PNG incluye su propio tamaño e información de suma de verificación. Por lo tanto, no es absolutamente necesario tener un marcador final. Y, de hecho, todos los navegadores que probé pueden mostrar la imagen sin problemas.
Desafortunadamente (o afortunadamente), imgur rechaza esta imagen no estándar, por lo que no puedo subirla. Esta es la codificación base64:
Mostrar fragmento de código
fuente
PNG
No es un lenguaje de programación.Octava ,
127124bytesEliminado 3 bytes gracias a Luis.
grid
es suficiente (en lugar degrid on
).Salidas (después de guardar):
Tenga en cuenta que la salida muestra líneas de cuadrícula grises en la ventana de trazado. Se vuelven negros al guardarlo (por alguna razón).
Bueno, eso fue largo y desordenado! Tuve que pasar por muchas modificaciones para que esto se adhiera a las especificaciones.
Explicación y, con suerte, algo de golf ...
fuente
'square'
para hacerlo cuadrado en todas las plataformas.spy([0,1,0;0,0,1;1,1,1],'.k',80),set(gca,'XTick',.5:4,'XTickLabel','','YTick',.5:4,'YTickLabel',''),axis(.5+[0,3,0,3],'square'),grid on
.Procesamiento,
212198 bytesBásicamente, estamos usando un procesamiento simple para dibujar un fondo blanco, luego configuramos la transparencia de los rectángulos utilizados para la cuadrícula y dibujamos sus trazos en gris. Continuamos definiendo el rectángulo, configurando el valor de relleno nuevamente para llenar los círculos de negro y definiendo cinco círculos.
Voilà!
Podrías agregar
o más para ver mejor el color de los trazos.
(Ese es mi primer Code-Golf, espero haber hecho todo bien).
EDITAR: ¡Gracias a Kritixi Lithos! Se eliminaron las líneas nuevas, se cambió a int f = 25 y se usó -1 en segundo plano (flotante)
fuente
float f=25;
queint f=25;
y usandobackground(-1)
en lugar debackground(255);
TikZ,
193175170 bytesAquí está la salida:
fuente
MATL ,
7469686462 bytes¡Pruébalo en MATL Online! (Toma unos segundos)
Salida del intérprete en línea:
fuente
Procesamiento, 134 bytes
Inspirado por @Zep, aquí está mi línea de procesamiento (y también mi primer código de golf):
¡Gracias por @Kritixi Lithos por sus brillantes consejos para reducir algunos bytes!
fuente
for(int i=0,x,y;...
modo que pueda soltarint
el cuerpo del bucle. Además,fill(255);
puede volverse justofill(-1);
+20
mientras establece los valores dex
yy
, para que pueda cambiarrect
arect(x+5,y+5,30,30);
yellipse
aellipse(x+20,y+20,23,23);
y guardar dos bytes.LaTeX + Tikz, 155 bytes
fuente
1/0
Eso está haciendo división?x
yy
coordenadas..5
sea justo1
.[step=2]
) para producir una cuadrícula más grande. Simplificar las coordenadas para el dibujo de los círculos no ahorraría suficientes bytes. (SmileBASIC, 125 bytes
58081 (U + E2E1, que se encuentra en el bloque "Área de uso privado") es el código de caracteres para un símbolo circular. Ponerlo en una cadena también funcionaría, pero como está codificado como 3 bytes en UTF-8, tendría la misma longitud (y no se mostrará correctamente aquí).
fuente
C #, 333 bytes
Versión completa / formateada:
La idea es simple: creamos un objeto gráfico a partir de la imagen y lo usamos para hacer que la imagen sea completamente blanca. Luego recorra cada cuadrado de la imagen dibujando el rectángulo delimitador. Si es una de las ubicaciones para un punto, también lo dibujamos. Por último, guardamos la imagen en un archivo y dejamos que Windows decida cómo abrirla, en mi caso se abre con Windows Photo Viewer.
Usar un
Process
para mostrar la imagen y guardarlo en un archivo es mucho más corto que crear formularios de Windows o una aplicación WPF debido a todas las clases diferentes y la pelusa adicional necesaria para crearlos.Salida:
fuente
PHP, 221 + 2 bytes
Guardar en archivo; Llamar en el navegador. Si su navegador muestra galimatías,
insértelo
header("Content-Type:image-png");
antesimagepng($i);
.Los puntos no son muy redondos; eso se debe a las pequeñas proporciones.
Descompostura
Creo que eso
0x4c4b40
califica como gris aproximado. Si no, agregue cuatro bytes.fuente
R 313 236 bytes
El Código revisado, basado principalmente en los comentarios de @ user2390246, guardó 77 bytes. Agradezco mucho la ayuda.
Además, desea agregar una llamada a la solución R más corta de @mschilli. Muestra una forma elegante de abordar el problema de los valores predeterminados gráficos R.
Salida
Va a un nombre de archivo "r". La omisión y la extensión me ahorraron cuatro bytes. Pero luego tuve que editar la extensión del archivo nuevamente a "bmp" para que se cargara. Entonces quizás no debería obtener crédito por esos cuatro bytes.
Comentario
Pensé para mí mismo: "Ese gráfico no es más que un gráfico simple con cinco puntos. Debería ser un asunto simple de implementar en un lenguaje con capacidades gráficas de datos robustas. Probémoslo en R." Pero luego tuve que gastar en el orden del 80% de los bytes simplemente trabajando alrededor de los valores predeterminados gráficos de R.
Un poco la herramienta incorrecta para el trabajo ...
No pude encontrar una forma menos detallada de garantizar el tamaño y la relación de aspecto del gráfico que llamando al constructor bmp y luego dev.off (). La combinación representa 25 bytes. Si su sesión R está configurada correctamente, es posible que obtenga un gráfico que se vea más o menos correcto sin gastar esos bytes, pero no es confiable ni consistente.
fuente
b
en absoluto, solo coloque los dos vectores sin nombre directamente en laplot
función. Usec(l,3)
paraxaxp
yyaxp
. Puede usarF
para falso, no es necesario definirlo. Y defina una nueva funcióna(x,...)
que llameaxis(x)
pero que tenga valores predeterminados para etiquetas, tck, etc., de modo que no necesite especificarlos dos veces.axes=F
lugar dexaxt='n',yaxt='n'
. Y olvidó usarlo.5
cuando definió,l
aunque usó ese truco más tarde..5
completo?.bmp
extensión del archivo, también podría nombrar el archivor
.TI-BASIC,
218140137 bytesNota: este recuento de bytes está un poco inflado. El programa solo usa 85 tokens, pero eso se guarda en 137 bytes. Además, si está usando una calculadora sin color, podría guardar otros 4 tokens porque no tiene que especificar el color (que es azul de forma predeterminada), pero no sé si sus pantallas son lo suficientemente grandes para este desafío porque no tengo uno.
prgmHACKER (138 bytes, 86 tokens):
Para una visualización adecuada, este programa requiere que Xmin = Ymin = 0, Xmax = Ymax = 3, Xscl = Yscl = 1. dX también debe configurarse correctamente, pero la calculadora lo hace por usted cuando configura cualquier otra variable de ventana. No podía ver cuánto espacio usaban estas variables en la RAM.
Además, la configuración del formato debe ser {RectGC, CoordOff, GridLine, GridColor: MEDGRAY, Axes: OFF, ExprOff, BorderColor: 1, Background: OFF} pero estos son valores alternados y no consumen espacio adicional dependiendo de la configuración.
fuente
{0,1,2,1,2}
y{0,0,0,2,1}
luego agregarlos0.5
a cada elemento.L1
yL2
haciaL₁
yL₂
, ya que ya los usa. Creo que puedes eliminar}
, yL₁(I)+.5→A
=>.5+L₁(I
yL₂(I)+.5→B
=>.5+L₂(I→B
.R,
119114111 bytes(Gracias a @JayCe por guardarme 3 bytes)
No más corto que la otra solución R , sino un enfoque completamente diferente:
Utiliza un diseño en el que las 4 primeras parcelas son las celdas vacías, y las otras 5 son las que tienen puntos en ellas.
fuente
Excel VBA, 180 bytes
Una función de ventana VBE inmediata anónima que no toma entradas y salidas al objeto predeterminado de la hoja de trabajo (
Sheet1
).Versión comentada
Salida
-6 bytes para usar
[{21,32,13,23,33}]
más deSplit("21 32 13 23 33")
-2 bytes para usar
Mid(s,2)
más deRight(s,1)
-3 bytes para usar
(s\10)
más deLeft(s,1)
fuente
Octave
10794103 byteso
ambas soluciones son 103 bytes.
fuente
line([x1,x2],y)
tener que hacerline([x1,x2],[y,y])
Apple Swift (iOS - CoreGraphics / QuartzCore) - 832 bytes
Dibujé la forma completamente usando Quartz para un dispositivo Apple iOS. Desafortunadamente, este no es un lenguaje consciente de tamaño particular, por lo que el resultado es bastante grande, pero es lo más pequeño que puedo obtener.
Una versión más legible para cualquiera que esté interesado:
Aquí está la salida producida en el simulador de iOS:
fuente
Ruby with Shoes, 118 caracteres.
Bit comprobación tomado de RJHunter 's comentario hecho sobre Mark Thomas ' s solución de Rubí .
Salida de muestra:
fuente
SVG + HTML,
146138135133 bytesGracias al analizador HTML indulgente,
xmlns="http://www.w3.org/2000/svg"
se puede omitir la declaración, así como las comillas de atributos y la etiqueta de cierre. Esta versión aborda algunos problemas de otras soluciones HTML:Editar Eliminó 8 bytes explotando el hecho de que las subrutas no necesitan cerrarse para rellenarse .
Editar Según la gramática svg , no es necesario separar los no dígitos con una coma (
.5,.5
). También abandoné el relleno explícito, para poder cambiar la dirección de dibujo de una línea de negativa a positiva, guardando un guión. Y por último, ajusté el conteo para no incluir una nueva línea final, perdón por este error de novato.Editar Aprendiendo de otra respuesta en codegolf, he reemplazado la final
9 />
con9>
. Esto funciona bien en todos los navegadores probados.fuente
Python 3 + PyGame, 238 bytes
Las constantes aparentemente arbitrarias son de mí tratando de hacer que la imagen sea lo más grande posible sin sacrificar bytes.
Con caracteres que no se imprimen, 229 bytes
Reemplacé las listas con literales de bytes, lo que ahorra un montón de caracteres, pero los caracteres que no se imprimen no se pueden mostrar correctamente aquí. Sustituí los caracteres que no se imprimen con sus equivalentes gráficos U + 2400-U + 2421 para fines de visualización.
fuente