Dibuje el símbolo de riesgo biológico en un color arbitrario sobre un fondo de colores distintos. Las proporciones específicas se publicaron en la edición del 27 de junio de 1974 del Registro Federal del Gobierno de los Estados Unidos.
Detalles
Como salida, se permite escribir en un archivo (se permiten los formatos ráster y vectorial) o mostrarlos en la pantalla.
Puede dibujar solo el borde o la forma rellena.
Si utiliza imágenes ráster, debe tomar un parámetro (o dos) como entrada que le permita ajustar la resolución de la salida (por ejemplo, ancho / alto).
El fondo debe tener al menos el tamaño del cuadro delimitador del símbolo, pero puede ser más grande.
La salida del símbolo unicode ☣ no es suficiente .
- Las proporciones exactas de las distancias utilizadas se dan en el siguiente diagrama (que originalmente era de aquí ):
También traté de hacer un diagrama adicional con las mismas medidas que espero sea un poco más fácil de leer:
(Inspirado por una publicación en 99% invisible )
Respuestas:
T-SQL,
442 441 426 355 349344 bytesAhorró más de 70 bytes al usar
REPLACE()
palabras clave largas y ejecutar como SQL dinámico. Vea el código posterior al reemplazo en la captura de pantalla a continuación.Dupliqué los valores de coordenadas de la ilustración de muestra y subí 9 unidades, para reducir el número de decimales que se muestran.
Esto se realizó en SQL 2017, utilizando características geoespaciales introducidas en SQL 2008. Muchas funciones de geometría incorporadas útiles, que incluyen
STBuffer
, lo que me brinda una manera simple de definir círculos de diferentes tamaños alrededor de un punto.Visual de salida, con código anotado:
Para más dibujos de T-SQL, vea mi Conejito de Pascua .
Para aplicaciones más prácticas de esta tecnología en SQL, lea este artículo o vea este video . SE incluso tiene un sitio relacionado, gis.stackexchange.com .
Ediciones:
STDifference
de aSTUnion
de objetos, en lugar de cada uno individualmente.REPLACE()
palabras clave repetidas y luego se ejecutó como SQL dinámico. Revertido Edit 2, para dejar más reemplazos deSTDifference
.5
para usarlo como un carácter de reemplazo en lugar de'#'
, ahorrando 2 bytes más en las comillas.)
a laSTDifference
cadena de reemplazo; gracias, @Nicholas!fuente
Tex + Tikz, 232 bytes
43 bytes guardados al cambiar a tex. Gracias a Phelype Oleinik
Algunos bytes guardados gracias a Skillmon
Con saltos de línea y sin
\def
:Explicación
Esto está un poco desactualizado. Lo arreglaré cuando pueda descubrir cómo hacer que las imágenes no sean enormes.
Aquí voy a explicar cómo la respuesta sin comprimir resuelve el problema. En algún momento puedo explicar cómo funciona la compresión. Primero dibujamos los grandes círculos negros:
Luego dibujamos algunas líneas blancas:
Luego dibujamos círculos blancos:
Luego agregamos un círculo blanco central:
Luego agregamos un anillo negro:
Luego eliminamos partes del anillo negro
fuente
\1
lugar de\x
, como puede usar\def\f{\foreach\1in{90,210,330}}
.C, 8010 bytes
Hace mucho tiempo, antes de SVG o EMF, tenía que lidiar con el ráster, y si quería que algo se cargara de inmediato, antes de que el O / S estuviera listo, como una pantalla de inicio de Windows, tenía que usar RLE o duración de ejecución -coding. Este monstruo genera un archivo PBM usando RLE como datos. Construye como siempre y corre así
./biohazard > biohazard.pbm
.Si tuviera que incluir todos los marcos necesarios para generar, por ejemplo, el motor SVG en HTML, las bibliotecas de Java, etc., esta sería probablemente la solución autónoma más pequeña , porque
puts
es la única función externa, y generalmente es una de las más pequeñasstdio.h
funcionesCon respecto a este detalle:
Interpreté "debería" como diferente de "imprescindible", por ejemplo, como en RFC 2119 , por lo que no incluí el escalado, porque para este código solo sería factible hacer múltiplos del original, por ejemplo,
./biohazard 2
y eso introduciríaatoi
,printf
y otros complicaciones que restarían importancia al foco principal de la presentación.fuente
putchar()
o similar.TeX + Ti k Z,
234230226 bytesOriginalmente 5 bytes más que la respuesta de Sriotchilism O'Zaic , pero esta debería ser correcta. Es similar a su respuesta, pero ahorra algunos bytes más aquí y allá, necesita uno
\draw[line width=8]
más (en el código a continuación, esto se hace por\28](~30)to(~55);
, eso es 17 bytes agregados solo para esto) para obtener las puntas del símbolo correctas, de ahí el 5 bytes más longitud total del código.Y gracias al Sriotchilism O'Zaic volví a leer algunas de las preguntas y me di cuenta de que puedo cambiar el color a rojo, de modo que vuelvo a guardar algunos bytes:
TeX-g + Ti k Z, 195 bytes
Solo si a alguien le importa, lo siguiente usa un dialecto de golf de código basado en TeX en el que estoy trabajando (no considere el código estable). El recuento de bytes incluye caracteres EOL y el carácter EOF, ya que se usan semánticamente (EOL delimita argumentos de bucles). El dialecto es bastante pequeño hasta ahora y solo presenta shorthands para definiciones y una sintaxis for-loop, sin embargo, no está escrito específicamente para esta respuesta, por lo que no debería romper las reglas del golf de código. Repositorio para el
-g.tex
paquete / archivo: https://github.com/Skillmon/TeX-gLa salida de ambos fragmentos de código se ve idéntica:
( Demasiado perezoso para actualizar la imagen, solo imagina que es rojo )
fuente
GLSL,
700629564545499 bytesEstaba jugando con Shadertoy, así que probé el lenguaje de sombreado GLSL. El código simplemente rasteriza círculos y líneas al probar cada fragmento y les asigna un valor de uno o cero. El tamaño se redujo de> 1000 bytes por el uso intensivo de macros.
Programa de sombreado
fuente
&&
y||
estar a Jugamos al golf&
y|
en algunas o todas las partes?|
/ en&
lugar de||
/&&
para bools, ¿no? No he hecho nada en C en mucho tiempo, así que no estoy seguro. Sé que funciona en Java / C # .NET en la mayoría de los casos. Pero solo ahora noto el enlace de Shadertoy que ha agregado, y no parece funcionar allí como ya lo ha dicho. Ah bueno. Bonita primera respuesta por cierto! Bienvenido a CGCC.SVG (HTML5),
434410321 bytesAhora basado en el SVG de @ LevelRiverSt.
fuente
<defs>
es seguro. Esto funciona para mí en Firefox, Chrome y Edge.<use>
!Procesamiento,
371368 bytesNo estaba seguro de si el procesamiento debería contar como rasterizado o no para el propósito de este desafío. Si cuenta como rasterizado, el
translate
yscale
es necesario para que el símbolo sea legible y en pantalla para un tamaño de ventana determinado. Pero, dado que todos los comandos de dibujo están vectorizados, funciona a cualquier escala; así que si suponemos que dibujar en el origen relativo tiene unas 200 unidades de ancho está bien, los primeros 43 bytes se pueden descartar.Esto supone que el color de fondo es
204, 204, 204
, que es el color de fondo predeterminado en el procesamiento. También supone unrectMode
deCORNER
y unellipseMode
deCENTER
(los valores predeterminados)Con una inicial
size(640, 640)
, el boceto resultante se ve así:Al duplicar la escala, ahorré 3 bytes, porque
.5
se eliminan los s (aunque varios números fluyen de 1 dígito a 2 dígitos).La construcción es similar a la solución TeX, dibujando negro y luego gris en la parte superior para "borrar" los espacios entre la forma.
Explicación:
fuente
.5
!scale
para cambiarlo solo por una parte del código, pero no estaba seguro de dónde ponerlo mejorGLSL
319310 bytesEsto se puede representar en Shadertoy .
Puede usar la simetría en la imagen para dibujarla con una cantidad menor de formas separadas.
Aquí hay una versión algo inflada:
(gracias a @Kevin Cruijssen por eliminar algunos espacios en blanco innecesarios)
fuente
H(y) sqrt
→H(y)sqrt
; todos los espacios en sus sentencias if:if (
→if(
; y aquellos en su último enunciado if que rodean los AND:if (R>.10 && R<.135 && S<.095)c=1.;
→if(R>.10&&R<.135&&S<.095)c=1.;
.HTML / JS,
448 435 433387 bytesAhorró muchos bytes usando la versión minimizada de @ Neil del SVG.
Ahorró 2 bytes gracias a @Shaggy
Una versión comprimida de este archivo SVG de Wikimedia Commons.
Pruébalo en línea! (solo da salida a la cadena descomprimida)
Fragmento de demostración
Mostrar fragmento de código
fuente
Haskell ,
530491436435430420 bytesEmite un archivo PBM.
¡Esto fue muy divertido!
(Tuve que convertir esto a PNG para cargar a imgur)
Básicamente creamos nuestras propias funciones de gráficos vectoriales que se representan en una imagen píxel por píxel al detectar si el píxel es parte de la forma. La forma se construye como un grupo de círculos y líneas (que se irradian desde el origen) unidos con operaciones básicas del conjunto: unión, intersección y no. Los círculos están compuestos por su centro y un radio, y las líneas tienen un radio mínimo, un ancho y un ángulo en ese orden. Detectar la membresía en un círculo es fácil: solo resta las coordenadas centrales y comparo la magnitud con el radio. La línea es un poco más complicada: giro el punto por el opuesto del ángulo para traerlo (para anular la rotación) y luego verifico si las coordenadas x e y están dentro del rango esperado. El radio mínimo es garantizar que el espacio más grande en los extremos lejanos de los círculos grandes no anule los espacios pequeños cerca del centro. Después de eso, es una simple cuestión de lógica booleana establecer las matemáticas.
EDITAR: ¡Muchas gracias a @flawr por quitar 39 bytes!
EDIT2: ¡Muchas gracias a @Christian Sievers por sacar 55 bytes! Buena idea convertirlos en funciones.
EDIT3: ¡Gracias de nuevo a @Christian Sievers por eliminar otro byte!
EDIT4: ¡Despegó 7 bytes gracias a @ H.PWiz y @Angs!
EDIT5: ¡Acabo de notar un error! ¡Estaba renderizando las líneas dos veces más gruesas de lo que se suponía que debían ser! Me costó 2 bytes arreglarlo (tuve que dividir el ancho por 2; podría haber ajustado los valores constantes, pero cambiar 1 a 0.5 también costaría 2).
EDIT6: ¡Gracias @Angs por sacar otros 10 bytes!
fuente
[-90,-210,-330]
? ¿Y sería posible cambiar el<=
a<
?Rubí , 278 bytes
Pruébalo en línea!
Genera el código SVG a continuación, con el símbolo al 200% de la escala en el OP.
Consiste en un círculo en la parte posterior y las puntas en primer plano. La punta se escala
-1,0,1
en elX
eje y se gira a través de múltiplos de 120 grados. Los casos donde laX
escala es cero no producen salida, mientras que-1
y+1
. Proporcione los dos lados de cada par de dientes.Se utiliza un borde blanco de 2 unidades de ancho alrededor del diente para cortar el círculo posterior, utilizando los atributos
stroke
ystroke-width
. Para que la forma interna sea según el OP, las coordenadas se mueven 1 unidad (la mitad del ancho del borde). Observe que el camino no está cerrado deliberadamente, para suprimir el dibujo de la línea final del borde. Esto asegura que las dos mitades de cada par de puntas se unan.Se dibujan 90 grados del círculo interior en lugar de los 60 esperados, por razones de golf. Esto significa que existe cierta superposición entre las bases de cada par de puntas, pero esto no afecta la apariencia de la forma de salida.
fuente
PostScript ,
367359328271 bytesCódigo (versión comprimida):
Código (versión sin comprimir):
Resultado (como animación para ver cómo se dibuja):
fuente
Python 3 con pygame,
327 314 287278 bytes(Aplicado varios cortes desagradables para salvar a 13 bytes; más notablemente ya que almacena el color, pero el cálculo sobre la marcha sin
-(r>25)
)(refactorizado de funcionar, perdiendo
sys
; hackeado a cabomath
a favor de coordinar constantes, pequeños retoques; guardadas en la memoria 27 bytes)(Reescribió coordenada constantes a trucos matemáticos complejos para obtener (co) seno , ahorrando 9 bytes)
Función que toma un argumento entero único que representa la mitad del ancho / alto de la imagen resultante. Por ejemplo
f(500)
, creará una ventana de 1000x1000 píxeles y dibujará un símbolo de riesgo biológico allí.Versión sin acortar:
La clave de este programa es explotar principalmente la simetría de puntos de 3 vías del símbolo y expresar las operaciones de dibujo de la forma más escasa posible. El corazón de todo es
circles
, que es una lista de definiciones de círculo, que consta solo de:position
: a qué distancia del origen en unidades básicas mediasradius
: el radio del círculo en unidades medias mediaswidth
: el ancho del borde del círculo (hacia adentro desde el círculo exterior, 0 = relleno)color
: explotando el hecho de que pygame interpreta0
como blanco y-1
negroCada operación de dibujo se repite tres veces, girada 120 °. El embotamiento de las "garras" se realiza con otro círculo. Los "cortes de línea" internos están revestidos especialmente porque no podría pensar en una forma más eficiente de introducirlos allí. La "unidad básica" se define en la especificación se duplicó aquí, así que no tenía que usar
.5
encircles
yint()
por todo el lugar para satisfacer pygame.Resultado para
python3 -c 'from biohazard import *; f(500)'
:fuente
sys
módulo, lo que acorta el código (ver reglas ). Además, este truco se puede aplicar para evitar la necesidad de importarmath
.math
, refactoré eso a una lista de coordenadas; eran solo 3 de ellos de todos modos. No (co) seno necesario.Tcl / Tk - 557 bytes
Sin embargo, esa versión es aburrida, ya que obtienes la misma imagen de tamaño pequeño sin importar qué. Sin embargo, satisface las condiciones OP para mostrar en pantalla. Aquí está la versión sin comprimir con comentarios y la capacidad de especificar un tamaño agregado en:
Lo siento, no hay fotos (trabajando en mi teléfono hoy). Produce un símbolo negro sobre un fondo naranja de riesgo biológico.
fuente