Dessinez le symbole Biohazard dans une couleur arbitraire sur un fond distinctement coloré. Les proportions spécifiques ont été publiées dans le numéro du 27 juin 1974 du Federal Register du gouvernement des États-Unis.
Détails
En sortie, l'écriture dans un fichier (les formats raster et vectoriel sont autorisés) ou l'affichage à l'écran sont tous deux autorisés.
Vous pouvez dessiner juste la bordure ou la forme remplie.
Si vous utilisez des images raster, vous devez utiliser un paramètre (ou deux) comme entrée, ce qui vous permet de régler la résolution de la sortie (par exemple, largeur / hauteur).
L'arrière-plan doit au moins avoir la taille du cadre de sélection du symbole, mais il peut être plus grand.
La sortie du symbole Unicode n'est pas suffisante .
- Les rapports exacts des distances utilisées sont donnés dans le diagramme suivant (qui était à l'origine d' ici ):
J'ai aussi essayé de faire un diagramme supplémentaire avec les mêmes mesures, ce qui est un peu plus facile à lire:
(Inspiré par un message sur 99% invisible )
Réponses:
T-SQL,
442 441 426 355 349344 octetsSauvegardé plus de 70 octets en utilisant
REPLACE()
des mots-clés longs et en s'exécutant en tant que SQL dynamique. Voir le code post-remplacement dans la capture d'écran ci-dessous.J'ai doublé les valeurs de coordonnées de l'exemple d'illustration et augmenté de 9 unités afin de réduire le nombre de décimales affichées.
Cela a été fait dans SQL 2017, à l'aide des fonctionnalités géospatiales introduites dans SQL 2008. De nombreuses fonctions de géométrie intégrées utiles, notamment
STBuffer
, me permettent de définir simplement des cercles de différentes tailles autour d'un point.Visuel de la sortie, avec code annoté:
Pour plus de dessins T-SQL, voir mon lapin de Pâques .
Pour plus d' applications pratiques de cette technologie en SQL, lisez cet article ou visionnez cette vidéo . SE a même un site connexe, gis.stackexchange.com .
Modifications:
STDifference
unSTUnion
des objets, au lieu de chacun individuellement.REPLACE()
des mots-clés répétés, puis en s'exécutant en tant que SQL dynamique. Revert Edit 2, pour laisser plus de remplacements deSTDifference
.5
à utiliser comme caractère de remplacement au lieu de'#'
, en sauvegardant 2 octets supplémentaires sur les guillemets.)
dans laSTDifference
chaîne de remplacement; merci, Nicolas!la source
Tex + Tikz, 232 octets
43 octets enregistrés en passant à tex. Merci à Phelype Oleinik
Quelques octets sauvés grâce à Skillmon
Avec des sauts de ligne et sans
\def
:Explication
C'est un peu désuet, je vais le réparer quand je pourrai comprendre comment rendre les images pas énormes
Ici, je vais expliquer comment la réponse non compressée résout le problème. J'expliquerai peut-être un jour le fonctionnement de la compression Nous dessinons d’abord les grands cercles noirs:
Ensuite, nous traçons des lignes blanches:
Ensuite, nous dessinons des cercles blancs:
Ensuite, nous ajoutons un cercle blanc central:
Ensuite, nous ajoutons un anneau noir:
Puis on enlève des parties de l'anneau noir
la source
\1
place de\x
, comme vous pouvez ensuite utiliser\def\f{\foreach\1in{90,210,330}}
.C, 8010 octets
Il y a bien longtemps, avant SVG ou EMF, vous deviez gérer le raster et si vous vouliez quelque chose à charger immédiatement, disons avant que le système d'exploitation ne soit prêt, comme un écran de démarrage Windows, vous deviez utiliser RLE ou run-length. -codage. Ce monstre génère un fichier PBM en utilisant RLE comme données. Construisez comme d'habitude et courez comme ça
./biohazard > biohazard.pbm
.Si vous deviez inclure tous les frameworks nécessaires à la génération, par exemple le moteur SVG en HTML, les bibliothèques Java, etc., il s'agirait probablement de la plus petite solution autonome , car
puts
c'est la seule fonction externe, et c'est généralement l'une des plus petites.stdio.h
les fonctions.En ce qui concerne ce détail:
J'ai interprété "devrait" comme différent de "must", par exemple comme dans RFC 2119 , donc je n'ai pas inclus la mise à l'échelle, car pour ce code, il ne serait possible de faire que des multiples de l'original, par exemple
./biohazard 2
, qui introduiraitatoi
,printf
et d'autres complications qui détourneraient de l’objet principal de la soumission.la source
putchar()
ou similaire.TeX + Ti k Z,
234230226 octetsÀ l'origine, 5 octets de plus que la réponse de Sriotchilism O'Zaic , mais celle-ci devrait être correcte. Il ressemble à sa réponse mais enregistre quelques octets de plus ici et là, il lui en faut un de
\draw[line width=8]
plus (dans le code ci-dessous\28](~30)to(~55);
, 17 octets sont ajoutés uniquement pour cela), pour que les 5 octets plus la longueur totale du code.Et grâce au Sriotchilism O'Zaic, j'ai relu une partie de la question et je me suis rendu compte que je pouvais changer la couleur en rouge, ce qui économise à nouveau quelques octets:
TeX-g + Ti k Z, 195 octets
Juste si quelqu'un s'en soucie, ce qui suit utilise un dialecte de golf basé sur le code TeX sur lequel je travaille (ne considérez pas le code comme stable). Le nombre d'octets comprend les caractères EOL et le caractère EOF, car ceux-ci sont utilisés sémantiquement (EOL délimite les arguments des boucles). Jusqu'à présent, le dialecte était assez petit et ne comportait que des raccourcis pour les définitions et une syntaxe for-loop. Cependant, il n'est pas spécifiquement écrit pour cette réponse et ne devrait donc pas enfreindre les règles du code. Référentiel pour le
-g.tex
fichier -package /: https://github.com/Skillmon/TeX-gLa sortie des deux extraits de code semble identique:
( trop paresseux pour mettre à jour l'image, imaginez juste qu'elle soit rouge )
la source
GLSL,
700629564545499 octetsJe jouais avec Shadertoy, alors j’ai essayé le langage d’ombrage GLSL. Le code rastérise simplement les cercles et les lignes en testant chaque fragment et leur attribue une valeur de un ou zéro. La taille a été réduite de> 1000 octets grâce à une utilisation intensive de macros.
Programme Shadertoy
la source
&&
et||
être à joué au golf&
et|
à certaines ou toutes les parties?|
/&
au lieu de||
/&&
pour bools, n'est-ce pas? Je n'ai rien fait en C depuis longtemps, donc je ne suis pas sûr. Je sais que cela fonctionne dans Java / C # .NET dans la plupart des cas. Mais je remarque seulement maintenant le lien Shadertoy que vous avez ajouté, et cela ne semble pas fonctionner comme vous l'avez déjà indiqué. Et bien. Belle première réponse d'ailleurs! Bienvenue chez CGCC.SVG (HTML5),
434410321 octetsMaintenant basé sur le SVG de @ LevelRiverSt.
la source
<defs>
est sans danger. Cela fonctionne pour moi sur Firefox, Chrome et Edge.<use>
!Traitement,
371368 octetsJe ne savais pas trop si le traitement devait être rasterisé ou non aux fins de ce défi. Si cela compte comme un rendu raster,
translate
ilscale
est nécessaire de rendre le symbole lisible et visible à l'écran pour une taille de fenêtre donnée. Mais, comme toutes les commandes de dessin sont vectorisées, cela fonctionne à n'importe quelle échelle. Par conséquent, si nous supposons que dessiner à l'origine relative est large d'environ 200 unités, les 43 premiers octets peuvent être supprimés.Cela suppose que la couleur d'arrière-plan est
204, 204, 204
, qui est la couleur d'arrière-plan par défaut lors du traitement. Il suppose également unrectMode
deCORNER
et unellipseMode
deCENTER
(les défauts)Avec une initiale
size(640, 640)
, l’esquisse résultante ressemble à ceci:En doublant l'échelle, j'ai économisé 3 octets, car les
.5
s sont éliminés (bien que plusieurs nombres passent de 1 à 2 chiffres).La construction est similaire à la solution TeX, dessinant le noir puis le gris en haut pour "effacer" les espaces entre la forme.
Explication:
la source
.5
!scale
changer pour seulement une partie du code, mais ne savais pas où au mieux le mettreGLSL,
319310 octetsCela peut être rendu sur Shadertoy .
Vous pouvez utiliser la symétrie de l'image pour la dessiner avec une quantité moindre de formes séparées.
Voici une version un peu gonflée:
(merci à @Kevin Cruijssen d'avoir supprimé certains espaces inutiles)
la source
H(y) sqrt
→H(y)sqrt
; tous les espaces de votre if-statement:if (
→if(
; et ceux de votre dernière déclaration if entourant les ET:if (R>.10 && R<.135 && S<.095)c=1.;
→if(R>.10&&R<.135&&S<.095)c=1.;
.HTML / JS,
448 435 433387 octetsSauvegardé de nombreux octets en utilisant la version pré-minimisée de SVG enregistrée par @ Neil
grâce à @Shaggy
Une version compressée de ce fichier SVG de Wikimedia Commons.
Essayez-le en ligne! (sort juste la chaîne décompressée)
Extrait de démonstration
Afficher l'extrait de code
la source
Haskell ,
530491436435430420 octetsSort un fichier PBM.
C'était très amusant!
(J'ai dû convertir cela en PNG pour le télécharger sur imgur)
Fondamentalement, nous créons nos propres fonctions graphiques vectorielles qui rendent une image pixel par pixel en détectant si le pixel fait partie de la forme. La forme est construite sous la forme d’un ensemble de cercles et de lignes (rayonnant depuis l’origine) associés à des opérations de base: union, intersection et non. Les cercles sont composés de leur centre et d'un rayon, et les lignes ont un rayon minimal, une largeur et un angle dans cet ordre. Détecter l'appartenance à un cercle est facile: il suffit de soustraire les coordonnées du centre et de comparer la magnitude au rayon. La ligne est légèrement plus compliquée: je fais pivoter le point de l’opposé de l’angle pour le ramener (pour annuler la rotation), puis je vérifie simplement si les coordonnées x et y se situent dans la plage attendue. Le rayon minimum est d'assurer que le plus grand espace aux extrémités les plus éloignées des grands cercles ne l'emporte pas sur les petits espaces près du centre. Après cela, la logique booléenne consiste à faire des calculs mathématiques.
EDIT: Merci beaucoup à @flawr pour avoir enlevé 39 octets!
EDIT2: Merci beaucoup à @Christian Sievers pour avoir supprimé 55 octets! Bonne idée en les transformant en fonctions
EDIT3: Merci encore à @Christian Sievers pour avoir réduit un octet!
EDIT4: Suppression de 7 octets grâce à @ H.PWiz et @Angs!
EDIT5: Je viens de remarquer un bug! Je rendais les lignes deux fois plus épaisses qu'elles étaient supposées l'être! Cela m'a coûté 2 octets pour le réparer (il fallait diviser la largeur par 2; on aurait pu ajuster les valeurs constantes, mais passer de 1 à 0,5 coûterait également 2).
EDIT6: Merci @Angs d'avoir enlevé 10 octets supplémentaires!
la source
[-90,-210,-330]
? Et serait-il possible de changer le<=
à<
?Ruby , 278 octets
Essayez-le en ligne!
Génère le code SVG ci-dessous, le symbole étant à 200% de l’échelle dans le PO.
Il se compose d'un cercle à l'arrière et des branches au premier plan. La broche est mise
-1,0,1
à l' échelle dans l'X
axe et tournée de multiples de 120 degrés. Les cas où laX
mise à l' échelle est zéro ne produisent aucune sortie, tandis que les-1
et+1
. fournir les deux côtés de chaque paire de griffes.On utilise une bordure blanche large de 2 unités autour de la branche pour couper le cercle arrière en utilisant les attributs
stroke
etstroke-width
. Pour que la forme interne soit conforme au PO, les coordonnées sont déplacées de 1 unité (la moitié de la largeur de la bordure.) Notez que le tracé est délibérément non fermé afin de supprimer le tracé de la dernière ligne de la bordure. Cela garantit que les deux moitiés de chaque paire de griffes se rejoignent.Le cercle intérieur est tracé à 90 degrés au lieu des 60 prévus, pour des raisons liées au golf. Cela signifie qu'il y a un certain chevauchement entre les bases de chaque paire de griffes, mais cela n'affecte pas l'apparence de la forme de sortie.
la source
PostScript ,
367359328271 octetsCode (version compressée):
Code (version non compressée):
Résultat (sous forme d'animation pour voir comment il est dessiné):
la source
Python 3 avec pygame,
327 314 287278 octets(Appliqué divers hacks méchants pour sauver 13 octets, notamment plus le stockage de la couleur , mais le calcul à la volée avec
-(r>25)
)(Refonte à la fonction, perdre
sys
, piraté enmath
en faveur de coordonnées constantes; petites modifications; évité 27 octets)(Réécriture coordonnées des constantes aux astuces mathématiques complexes pour obtenir le (co) sinus , en sauvegardant 9 octets
Fonction qui prend un seul argument entier représentant la moitié de la largeur / hauteur de l'image résultante. Par exemple
f(500)
, créera une fenêtre de 1000 x 1000 pixels et y dessinera un symbole de risque biologique.Version non raccourcie:
La clé de ce programme consiste principalement à exploiter la symétrie à trois points du symbole et à exprimer le moins possible les opérations de dessin. Le coeur de tout cela est
circles
, qui est une liste de définitions de cercle, consistant uniquement en:position
: à quelle distance de l'origine en demi unités de baseradius
: le rayon du cercle en demi unités de basewidth
: la largeur de la bordure du cercle (vers l'intérieur depuis le cercle extérieur, 0 = remplir)color
: exploiter le fait que pygame s'interprète0
en noir et-1
en blancChaque opération de dessin est répétée trois fois, avec une rotation de 120 °. L'affaiblissement des "griffes" se fait avec un autre cercle. Les coupes de lignes à l'intérieur ont une casse spéciale car je ne pouvais pas penser à un moyen plus efficace de les y faire entrer. "L'unité de base" définie dans la spécification est doublée ici, donc je n'ai pas eu à l'utiliser
.5
incircles
etint()
partout pour satisfaire pygame.Résultat pour
python3 -c 'from biohazard import *; f(500)'
:la source
sys
module, ce qui raccourcit le code (voir règles ). En outre, cette astuce peut être appliquée pour éviter le besoin d'importermath
.math
, j'ai refactoré cela en une liste de coordonnées; ce n'était que 3 d'entre eux de toute façon. Pas de (co) sinus.Tcl / Tk - 557 octets
Cette version, cependant, est ennuyeuse, car vous obtenez la même image de petite taille, quoi qu’il en soit. Cependant, il satisfait aux conditions de l'OP pour l'affichage à l'écran. Voici la version non compressée avec commentaire et la possibilité de spécifier une taille ajoutée dans:
Désolé, pas de photos (travaillant sur mon téléphone aujourd'hui). Produit un symbole noir sur un fond orange présentant un risque biologique.
la source