Desenhe o símbolo de risco biológico em uma cor arbitrária em um fundo de cores distintas. As proporções específicas foram publicadas na edição de 27 de junho de 1974 do Federal Register do governo dos EUA.
Detalhes
Como saída, a gravação em um arquivo (formatos de varredura e vetor são permitidos) ou a exibição na tela são permitidos.
Você pode desenhar apenas a borda ou a forma preenchida.
Se você usar imagens rasterizadas, use um parâmetro (ou dois) como entrada que permita ajustar a resolução da saída (por exemplo, largura / altura).
O plano de fundo deve ter pelo menos o tamanho da caixa delimitadora do símbolo, mas pode ser maior.
A saída do símbolo unicode ☣ não é suficiente .
- As proporções exatas das distâncias usadas são fornecidas no diagrama a seguir (que era originalmente daqui ):
Também tentei fazer um diagrama adicional com as mesmas medidas que, espero, seja um pouco mais fácil de ler:
(Inspirado em um post em 99% invisível )
Respostas:
T-SQL,
442 441 426 355 349344 bytesEconomizou mais de 70 bytes usando
REPLACE()
palavras-chave longas e executando como SQL dinâmico. Veja o código pós-substituição na captura de tela abaixo.Dobrei os valores das coordenadas da ilustração da amostra e subi 9 unidades, para reduzir o número de casas decimais exibidas.
Isso foi feito no SQL 2017, usando os recursos geoespaciais introduzidos no SQL 2008. Muitas funções úteis de geometria interna, incluindo
STBuffer
, o que me fornece uma maneira simples de definir círculos de tamanhos diferentes em torno de um ponto.Visual da saída, com código anotado:
Para mais desenho T-SQL, veja meu coelhinho da Páscoa .
Para aplicações mais práticas desta tecnologia em SQL, leia este artigo ou assista a este vídeo . SE ainda tem um site relacionado, gis.stackexchange.com .
Editar% s:
STDifference
umSTUnion
dos objetos, em vez de cada um individualmente.REPLACE()
palavras-chave repetidas e executando como SQL dinâmico. Revertido Edit 2, para deixar mais substituições deSTDifference
.5
para usar como um caractere de substituição em vez de'#'
, economizando mais 2 bytes entre aspas.)
- se para aSTDifference
sequência de substituição; obrigado, @Nicholas!fonte
Tex + Tikz, 232 bytes
43 bytes salvos mudando para tex. Agradecimentos a Phelype Oleinik
Alguns bytes salvos graças ao Skillmon
Com quebras de linha e sem
\def
:Explicação
Isso está um pouco desatualizado. Vou corrigi-lo quando puder descobrir como tornar as imagens não interessantes.
Aqui vou explicar como a resposta não compactada resolve o problema. Em algum momento, posso explicar como a compactação funciona. Primeiro, desenhamos os grandes círculos pretos:
Então desenhamos algumas linhas brancas:
Então desenhamos círculos brancos:
Em seguida, adicionamos um círculo branco central:
Em seguida, adicionamos um anel preto:
Em seguida, removemos partes do anel preto
fonte
\1
vez de\x
, como você pode usar\def\f{\foreach\1in{90,210,330}}
.C, 8010 bytes
Muito antes, antes de SVG ou EMF, era necessário lidar com a varredura e, se você queria que algo fosse carregado imediatamente, diga antes que o sistema operacional estivesse pronto, como uma tela de inicialização do Windows, era necessário usar RLE ou duração -codificação. Esse monstro gera um arquivo PBM usando RLE como dados. Construa como de costume e execute assim
./biohazard > biohazard.pbm
.Se você incluísse todas as estruturas necessárias para gerar, por exemplo, o mecanismo SVG em HTML, as bibliotecas Java, etc., essa provavelmente seria a menor solução independente , porque
puts
é a única função externa e, normalmente, é uma das menores.stdio.h
funções.Em relação a este detalhe:
Interpretei "deveria" como diferente de "must", por exemplo, como na RFC 2119 , então eu não incluem dimensionamento, porque para este código só seria viável fazer múltiplos do original, por exemplo,
./biohazard 2
e que iria introduziratoi
,printf
e outros complicações que prejudiquem o foco principal da submissão.fonte
putchar()
ou similar.TeX + Ti k Z,
234230226 bytesOriginalmente 5 bytes a mais que a resposta do Sriotchilism O'Zaic , mas este deve estar correto. É semelhante à sua resposta, mas economiza mais alguns bytes aqui e ali, e precisa de
\draw[line width=8]
mais um (no código abaixo isso é feito\28](~30)to(~55);
, são 17 bytes adicionados apenas para isso) para acertar as dicas do símbolo, daí os 5 bytes mais comprimento geral do código.E, graças ao Sriotchilism O'Zaic, reli algumas das perguntas e percebi que posso mudar a cor para vermelho, para salvar alguns bytes novamente:
TeX-g + Ti k Z, 195 bytes
Apenas se alguém se importa, o seguinte usa um dialeto de golfe com código baseado em TeX no qual estou trabalhando (não considere o código estável). A contagem de bytes inclui caracteres EOL e caracteres EOF, pois esses são usados semanticamente (o EOL delimita argumentos de loops). O dialeto é muito pequeno até agora e apresenta apenas atalhos para definições e uma sintaxe para loop, no entanto, não foi escrito especificamente para esta resposta, portanto não deve violar as regras do código de golfe. Repositório do
-g.tex
arquivo -package /: https://github.com/Skillmon/TeX-gA saída dos dois trechos de código parece idêntica:
( com preguiça de atualizar a imagem, imagine-a vermelha )
fonte
GLSL,
700629564545499 bytesEu estava brincando com Shadertoy, então tentei a linguagem de sombreamento GLSL. O código apenas rasteriza círculos e linhas testando cada fragmento e atribui a eles um valor de um ou zero. O tamanho foi reduzido de> 1000 bytes pelo uso intenso de macros.
Programa Shadertoy
fonte
&&
e||
ser golfed para&
e|
em algumas ou todas as partes?|
/ em&
vez de||
/&&
para bools, não é? Não faz nada em C há muito tempo, então não tenho certeza. Eu sei que funciona em Java / C # .NET na maioria dos casos. Mas só agora percebo o link Shadertoy que você adicionou, e ele não parece funcionar lá como você já declarou. Ah bem. Nice primeira resposta btw! Bem-vindo ao CGCC.SVG (HTML5),
434410321 bytesAgora, com base no SVG do @ LevelRiverSt.
fonte
<defs>
é seguro. Isso funciona para mim no Firefox, Chrome e Edge.<use>
também!Processando,
371368 bytesNão tinha certeza se o processamento deveria contar como rasterizado ou não para o objetivo deste desafio. Se ele conta como rasterized, o
translate
escale
é necessário fazer o símbolo legível e na tela para um determinado tamanho da janela. Mas, como todos os comandos de desenho são vetorizados, ele funciona em qualquer escala; portanto, se assumirmos que desenhar na origem relativa com cerca de 200 unidades de largura é bom, os primeiros 43 bytes podem ser eliminados.Isso pressupõe que a cor de fundo seja
204, 204, 204
, que é a cor de fundo padrão no processamento. Ele também assume umrectMode
deCORNER
e umellipseMode
deCENTER
(os padrões)Com uma inicial
size(640, 640)
, o esboço resultante fica assim:Ao dobrar a escala, salvei 3 bytes, porque
.5
s são eliminados (embora vários números fluam de 1 a 2 dígitos).A construção é semelhante à solução TeX, desenhando preto e cinza no topo para "apagar" as lacunas entre a forma.
Explicação:
fonte
.5
!scale
para mudá-lo para apenas uma parte do código, mas não tinha certeza de onde a melhor colocá-loGLSL,
319310 bytesIsso pode ser renderizado em Shadertoy .
Você pode usar a simetria na imagem para desenhá-la com uma quantidade menor de formas separadas.
Aqui está uma versão um pouco inflada:
(obrigado a @Kevin Cruijssen por remover alguns espaços em branco desnecessários)
fonte
H(y) sqrt
→H(y)sqrt
; todos os espaços nas suas declarações if:if (
→if(
; e aqueles em sua última declaração if envolvendo os ANDs:if (R>.10 && R<.135 && S<.095)c=1.;
→if(R>.10&&R<.135&&S<.095)c=1.;
.HTML / JS,
448 435 433387 bytesEconomizou muitos bytes usando a versão pré-minimizada do SVG do @ Neil
Economizou 2 bytes graças ao @Shaggy
Uma versão compactada deste arquivo SVG do Wikimedia Commons.
Experimente online! (apenas gera a string descompactada)
Snippet de demonstração
Mostrar snippet de código
fonte
Haskell ,
530491436435430420 bytesProduz um arquivo PBM.
Isso foi muito divertido!
(Eu tive que converter isso em PNG para fazer upload para imgur)
Basicamente, criamos nossas próprias funções de gráficos vetoriais que são renderizadas em uma imagem pixel por pixel, detectando se o pixel faz parte da forma. A forma é construída como um monte de círculos e linhas (irradiando da origem) mantidos juntos com operações básicas do conjunto: união, interseção e não. Os círculos são compostos de seu centro e um raio, e as linhas têm um raio mínimo, uma largura e um ângulo nessa ordem. É fácil detectar a participação em um círculo: subtraio as cordas centrais e comparo a magnitude ao raio. A linha é um pouco mais complicada: eu giro o ponto pelo oposto do ângulo para trazê-lo (para anular a rotação) e apenas verifico se as coordenadas xey estão dentro do intervalo esperado. O raio mínimo é garantir que o espaço maior nas extremidades dos grandes círculos não anule os pequenos espaços próximos ao centro. Depois disso, é uma simples questão de lógica booleana definir a matemática.
EDIT: Muito obrigado a @flawr por descolar 39 bytes!
EDIT2: Muito obrigado a @Christian Sievers por descolar 55 bytes! Boa ideia transformá-los em funções
EDIT3: Mais uma vez obrigado a @Christian Sievers por cortar outro byte!
EDIT4: Retirou 7 bytes graças a @ H.PWiz e @Angs!
EDIT5: Acabei de perceber um bug! Eu estava processando as linhas duas vezes mais grossas do que deveriam! Custou-me 2 bytes para corrigi-lo (tinha que dividir a largura por 2; poderia ter ajustado os valores constantes, mas alterar 1 para 0,5 também custaria 2).
EDIT6: Obrigado @ Angs por decolar outros 10 bytes!
fonte
[-90,-210,-330]
? E seria possível alterar o<=
para<
?Ruby , 278 bytes
Experimente online!
Gera o código SVG abaixo, com o símbolo em 200% da escala no OP.
Consiste em um círculo na parte de trás e as pontas em primeiro plano. A ponta é dimensionada
-1,0,1
noX
eixo e girada em múltiplos de 120 graus. Os casos em que aX
escala é zero não produzem saída, enquanto o-1
e+1
. forneça os dois lados de cada par de pinos.Utiliza-se uma borda branca de duas unidades de largura em torno da ponta para cortar o círculo traseiro, usando os atributos
stroke
estroke-width
. Para que a forma interna seja de acordo com o OP, as coordenadas são movidas por 1 unidade (metade da largura da borda). Observe que o caminho não foi deliberadamente fechado para suprimir o desenho da linha final da borda. Isso garante que as duas metades de cada par de pinos se juntem.90 graus do círculo interno são desenhados em vez dos 60 esperados, por razões de golfe. Isso significa que há alguma sobreposição entre as bases de cada par de pinos, mas isso não afeta a aparência da forma de saída.
fonte
PostScript ,
367359328271 bytesCódigo (versão compactada):
Código (versão não compactada):
Resultado (como animação para ver como é desenhado):
fonte
Python 3 com pygame,
327 314 287278 bytes(Aplicamos vários hacks desagradáveis para economizar 13 bytes; principalmente não mais armazenando a cor, mas calculando-a rapidamente
-(r>25)
)(Refatorada para funcionar, perdendo
sys
; hackeadamath
em favor de constantes de coordenadas; pequenos ajustes; salvos 27 bytes)(Reescrever coordenadas constantes para truques matemáticos complexos para obter (co) seno , economizando 9 bytes)
Função que usa um único argumento inteiro representando metade da largura / altura da imagem resultante. Por exemplo
f(500)
, criará uma janela de 1000 x 1000 pixels e desenhará um símbolo de risco biológico.Versão não abreviada:
A chave para este programa é principalmente explorar a simetria de três vias do símbolo e expressar as operações de desenho o mais esparsamente possível. O coração de tudo isso é
circles
, que é uma lista de definições de círculo, consistindo apenas em:position
: a que distância da origem em meias unidades básicasradius
: o raio do círculo em meias unidades básicaswidth
: a largura da borda do círculo (a partir do círculo externo, 0 = preenchimento)color
: explorando o fato de que pygame interpreta0
como preto e-1
brancoCada operação de desenho é repetida três vezes, girada 120 °. O embotamento das "garras" é feito com outro círculo. Os "cortes de linha" internos são especiais, porque eu não conseguia pensar em uma maneira mais eficiente de obtê-los lá. A "unidade básica" definido na especificação é duplicada aqui, então eu não tinha que usar
.5
nocircles
eint()
em todo o lugar para satisfazer pygame.Resultado para
python3 -c 'from biohazard import *; f(500)'
:fonte
sys
módulo, que reduz o código (consulte as regras ). Além disso, esse truque pode ser aplicado para evitar a necessidade de importaçãomath
.math
, refatorei isso para uma lista de coordenadas; eram apenas 3 deles de qualquer maneira. Não é necessário (co) seno.Tcl / Tk - 557 bytes
Essa versão, no entanto, é chata, pois você obtém a mesma imagem em tamanho pequeno, não importa o quê. Porém, ele satisfaz as condições de OP para exibição na tela. Aqui está a versão não compactada com comentários e a capacidade de especificar um tamanho adicionado em:
Desculpe, não há fotos (funcionando hoje no meu telefone). Produz um símbolo preto em um fundo laranja com risco biológico.
fonte