Zeichnen Sie das Biohazard-Symbol in einer beliebigen Farbe auf einen deutlich farbigen Hintergrund. Die spezifischen Proportionen wurden in der Ausgabe vom 27. Juni 1974 des Federal Register der US-Regierung veröffentlicht.
Einzelheiten
Als Ausgabe ist das Schreiben in eine Datei (Raster- und Vektorformate sind zulässig) oder das Anzeigen auf dem Bildschirm zulässig.
Sie können nur den Rand oder die gefüllte Form zeichnen.
Wenn Sie Rasterbilder verwenden, sollten Sie einen oder zwei Parameter als Eingabe verwenden, mit denen Sie die Auflösung der Ausgabe anpassen können (z. B. Breite / Höhe).
Der Hintergrund muss mindestens die Größe des Begrenzungsrahmens des Symbols haben, darf jedoch größer sein.
Die Ausgabe des Unicode-Symbols ☣ reicht nicht aus .
- Die genauen Verhältnisse der verwendeten Abstände sind im folgenden Diagramm angegeben (das ursprünglich von hier stammt ):
Ich habe auch versucht, ein zusätzliches Diagramm mit denselben Maßen zu erstellen, das hoffentlich ein bisschen einfacher zu lesen ist:
(Inspiriert von einem Beitrag auf 99% unsichtbar )
quelle
Antworten:
T-SQL,
442 441 426 355 349344 Bytes70+ Bytes durch Verwendung
REPLACE()
langer Schlüsselwörter und Ausführung als dynamisches SQL eingespart . Den Code nach dem Austausch finden Sie im folgenden Screenshot.Ich habe die Koordinatenwerte aus der Beispielillustration verdoppelt und 9 Einheiten nach oben verschoben, um die Anzahl der angezeigten Dezimalstellen zu verringern.
Dies wurde in SQL 2017 mit georäumlichen Features durchgeführt, die in SQL 2008 eingeführt wurden. Viele nützliche integrierte Geometriefunktionen, einschließlich
STBuffer
, geben mir eine einfache Möglichkeit, Kreise unterschiedlicher Größe um einen Punkt zu definieren.Grafik der Ausgabe mit kommentiertem Code:
Weitere T-SQL-Zeichnungen finden Sie in meinem Osterhasen .
Weitere praktische Anwendungen dieser Technologie in SQL finden Sie in diesem Artikel oder in diesem Video . SE hat sogar eine verwandte Website, gis.stackexchange.com .
Bearbeitungen:
STDifference
einesSTUnion
der Objekte anstatt jedes einzeln genommen wurde.REPLACE()
wiederholten Schlüsselwörtern gespeichert und dann als dynamisches SQL ausgeführt. Reverted Edit 2, um mehr Ersatz für zu hinterlassenSTDifference
.5
als Ersatzzeichen frei'#'
und sparte 2 weitere Bytes in den Anführungszeichen.)
in dieSTDifference
Ersatzzeichenfolge gespart ; danke, @Nicholas!quelle
Tex + Tikz, 232 Bytes
43 Bytes gespart durch Umschaltung auf tex. Vielen Dank an Phelype Oleinik
Einige Bytes wurden dank Skillmon gespeichert
Mit Zeilenumbrüchen und ohne
\def
:Erläuterung
Dies ist ein wenig veraltet. Ich werde es korrigieren, wenn ich herausfinden kann, wie ich die Bilder nicht großartig machen kann
Hier erkläre ich, wie die unkomprimierte Antwort das Problem löst. Ich kann irgendwann erklären, wie die Komprimierung funktioniert. Zuerst zeichnen wir die großen schwarzen Kreise:
Dann zeichnen wir ein paar weiße Linien:
Dann zeichnen wir weiße Kreise:
Dann fügen wir einen zentralen weißen Kreis hinzu:
Dann fügen wir einen schwarzen Ring hinzu:
Dann entfernen wir Teile des schwarzen Rings
quelle
\1
anstelle von verwenden\x
, wie Sie dann verwenden können\def\f{\foreach\1in{90,210,330}}
.C 8010 Bytes
Früher, vor SVG oder EMF, mussten Sie sich mit Raster befassen, und wenn Sie möchten, dass etwas sofort geladen wird, z. B. bevor das Betriebssystem bereit war, wie ein Windows-Startbildschirm, mussten Sie RLE oder Run-Length verwenden -Codierung. Dieses Monster gibt eine PBM-Datei mit RLE als Daten aus. Bauen Sie wie gewohnt und laufen Sie so
./biohazard > biohazard.pbm
.Wenn Sie alle zur Generierung erforderlichen Frameworks einbinden würden, z. B. die SVG-Engine in HTML, die Java-Bibliotheken usw., wäre dies wahrscheinlich die kleinste in sich geschlossene Lösung , da
puts
es sich um die einzige externe Funktion handelt und es sich in der Regel um eine der kleinsten handeltstdio.h
funktionen.In Bezug auf dieses Detail:
Ich interpretierte „sollte“ so verschieden von „must“, zB wie in RFC 2119 , so dass ich nicht Skalierung enthalten, da für diesen Code wäre es nur möglich sein , ein Vielfaches der ursprünglichen, zum Beispiel zu tun ,
./biohazard 2
und das würde einführenatoi
,printf
und andere Komplikationen, die den Schwerpunkt der Einreichung beeinträchtigen würden.quelle
putchar()
oder ähnliches.TeX + Ti k Z,
234230226 BytesUrsprünglich 5 Bytes länger als die Antwort von Sriotchilism O'Zaic , aber diese sollte korrekt sein. Es ähnelt seiner Antwort, spart aber hier und da ein paar Bytes mehr, und es braucht noch eine
\draw[line width=8]
(im Code darunter sind das\28](~30)to(~55);
nur 17 Bytes), um die Tipps des Symbols richtig zu machen, daher die 5 Bytes mehr Gesamtcodelänge.Und dank Sriotchilism O'Zaic habe ich einige Fragen noch einmal durchgelesen und festgestellt, dass ich die Farbe in Rot ändern kann, so dass wieder ein paar Bytes gespart werden:
TeX-g + Ti k Z, 195 Bytes
Wenn es jemanden interessiert, wird im Folgenden ein TeX-basierter Code-Golf-Dialekt verwendet, an dem ich arbeite (den Code nicht als stabil betrachten). Die Byteanzahl umfasst EOL-Zeichen und das EOF-Zeichen, da diese semantisch verwendet werden (EOL begrenzt die Argumente von Schleifen). Der Dialekt ist bis jetzt ziemlich klein und enthält nur Abkürzungen für Definitionen und eine for-loop-Syntax. Er wurde jedoch nicht speziell für diese Antwort geschrieben, sodass die Regeln für das Code-Golfen nicht verletzt werden sollten. Repository für das
-g.tex
-Paket / die Datei: https://github.com/Skillmon/TeX-gDie Ausgabe beider Codeausschnitte sieht identisch aus:
( zu faul, um das Bild zu aktualisieren, stell dir vor, es sei rot )
quelle
GLSL,
700629564545499 BytesIch habe mit Shadertoy rumgespielt und die GLSL-Schattierungssprache ausprobiert. Der Code rastert nur Kreise und Linien, indem er jedes Fragment testet, und weist ihnen einen Wert von eins oder null zu. Die Größe wurde durch häufige Verwendung von Makros von> 1000 Bytes reduziert.
Shadertoy-Programm
quelle
&&
und||
zu golfed werden&
und|
bei einigen oder allen Teilen?|
/&
anstelle von||
/&&
für Bools zu verwenden, nicht wahr? Ich habe lange nichts mehr in C gemacht, also bin ich mir nicht sicher. Ich weiß, dass es in den meisten Fällen in Java / C # .NET funktioniert. Aber ich bemerke erst jetzt den Shadertoy-Link, den Sie hinzugefügt haben, und er scheint dort nicht zu funktionieren, wie Sie bereits angegeben haben. Ah, gut. Schöne erste Antwort übrigens! Willkommen bei CGCC.SVG (HTML5),
434410321 BytesJetzt basierend auf der SVG von @ LevelRiverSt.
quelle
<defs>
sicher ist. Dies funktioniert bei mir unter Firefox, Chrome und Edge.<use>
!Verarbeitung,
371368 BytesIch war mir nicht sicher, ob die Verarbeitung für diese Herausforderung als gerastert gelten sollte oder nicht. Wenn es als gerastert gilt, ist das
translate
undscale
erforderlich, um das Symbol für eine bestimmte Fenstergröße lesbar und auf dem Bildschirm anzuzeigen. Da jedoch alle Zeichenbefehle vektorisiert sind, funktioniert dies in einem beliebigen Maßstab. Wenn wir also davon ausgehen, dass das Zeichnen am relativen Ursprung ungefähr 200 Einheiten breit ist, können die ersten 43 Bytes verworfen werden.Dies setzt voraus, dass die Hintergrundfarbe
204, 204, 204
die Standardhintergrundfarbe bei der Verarbeitung ist. Es wird auch einrectMode
vonCORNER
und einellipseMode
vonCENTER
(die Standardeinstellungen) angenommen.Mit einer Initiale
size(640, 640)
sieht die resultierende Skizze folgendermaßen aus:Durch das Verdoppeln der Skala habe ich 3 Bytes gespart, da
.5
s eliminiert werden (obwohl mehrere Zahlen von 1 bis 2 Ziffern fließen).Die Konstruktion ähnelt der TeX-Lösung, bei der zunächst schwarz und dann grau gezeichnet wird, um die Lücken zwischen den Formen zu "beseitigen".
Erläuterung:
quelle
.5
!scale
zu verwenden, um es nur für einen Teil des Codes zu ändern, war mir aber nicht sicher, wo ich es am besten platzieren sollteGLSL,
319310 BytesDies kann auf Shadertoy gerendert werden .
Sie können die Symmetrie im Bild verwenden, um es mit einer geringeren Anzahl separater Formen zu zeichnen.
Hier ist eine etwas aufgeblasene Version:
(Danke an @Kevin Cruijssen für das Entfernen von unnötigen Leerzeichen)
quelle
H(y) sqrt
→H(y)sqrt
; Alle Leerzeichen in Ihren if-Anweisungen:if (
→if(
; und die in Ihrer letzten if-Anweisung zu den ANDs:if (R>.10 && R<.135 && S<.095)c=1.;
→if(R>.10&&R<.135&&S<.095)c=1.;
.HTML / JS,
448 435 433387 BytesSparte viele Bytes mit der vorminimierten Version von @ Neil der SVG.
Sparte dank @Shaggy 2 Bytes
Eine komprimierte Version dieser SVG-Datei aus Wikimedia Commons.
Probieren Sie es online! (gibt nur den dekomprimierten String aus)
Demo-Snippet
Code-Snippet anzeigen
quelle
Haskell ,
530491436435430420 BytesGibt eine PBM-Datei aus.
Das hat viel Spaß gemacht!
(Ich musste dies in PNG konvertieren, um es in imgur hochzuladen)
Grundsätzlich erstellen wir unsere eigenen Vektorgrafikfunktionen, die Pixel für Pixel auf ein Bild rendern, indem sie erkennen, ob das Pixel Teil der Form ist. Die Form besteht aus einem Bündel von Kreisen und Linien (die vom Ursprung ausgehen), die mit grundlegenden Mengenoperationen zusammengehalten werden: Vereinigung, Schnittmenge und nicht. Die Kreise setzen sich aus ihrem Mittelpunkt und einem Radius zusammen, und die Linien haben einen minimalen Radius, eine Breite und einen Winkel in dieser Reihenfolge. Das Erkennen der Zugehörigkeit zu einem Kreis ist einfach: Ich subtrahiere nur die Mittelkoordinaten und vergleiche die Größe mit dem Radius. Die Linie ist etwas komplizierter: Ich drehe den Punkt um das Gegenteil des Winkels, um ihn zu bringen (um die Drehung aufzuheben), und überprüfe dann nur, ob die x- und y-Koordinaten innerhalb des erwarteten Bereichs liegen. Der minimale Radius soll sicherstellen, dass die größere Lücke an den entfernten Enden der großen Kreise die kleinen Lücken nahe der Mitte nicht übersteuert. Danach ist es eine einfache Sache der Booleschen Logik, Mengenmathematik zu machen.
EDIT: Vielen Dank an @flawr für die 39 Bytes!
EDIT2: Vielen Dank an @Christian Sievers für die 55 Bytes! Gute Idee, sie in Funktionen umzuwandeln
EDIT3: Nochmals vielen Dank an @Christian Sievers für das Abschneiden eines weiteren Bytes!
EDIT4: Hatte 7 Bytes dank @ H.PWiz und @Angs weg!
EDIT5: Habe gerade einen Bug bemerkt! Ich habe die Linien doppelt so dick gerendert, wie sie eigentlich sein sollten! Kostete mich 2 Bytes, um es zu reparieren (musste die Breite durch 2 teilen; hätte die konstanten Werte anpassen können, aber das Ändern von 1 auf 0,5 würde auch 2 kosten).
EDIT6: Danke @Angs für die weiteren 10 Bytes!
quelle
[-90,-210,-330]
? Und wäre es möglich, die Änderungen<=
zu<
?Ruby , 278 Bytes
Probieren Sie es online!
Erzeugt den folgenden SVG-Code, wobei sich das Symbol auf 200% der Skala im OP befindet.
Es besteht aus einem Kreis auf der Rückseite und den Zinken im Vordergrund. Der Stift ist
-1,0,1
in derX
Achse skaliert und um ein Vielfaches von 120 Grad gedreht. Die Fälle, in denen dieX
Skalierung Null ist, erzeugen keine Ausgabe, während die-1
und+1
. Stellen Sie die beiden Seiten jedes Zinkenpaares bereit.Es wird ein 2 Einheiten breiter weißer Rand um den Stift verwendet, um den hinteren Kreis unter Verwendung der Attribute
stroke
undstroke-width
auszuschneiden. Damit die interne Form dem OP entspricht, werden die Koordinaten um 1 Einheit (die Hälfte der Breite des Rahmens) verschoben. Beachten Sie, dass der Pfad absichtlich nicht geschlossen wird, um das Zeichnen der letzten Linie des Rahmens zu unterdrücken. Dies stellt sicher, dass die beiden Hälften jedes Zinkenpaars zusammengefügt werden.Aus Golfgründen werden 90 Grad des inneren Kreises anstatt der erwarteten 60 Grad gezeichnet. Dies bedeutet, dass es eine gewisse Überlappung zwischen den Basen der einzelnen Zinkenpaare gibt, dies hat jedoch keine Auswirkungen auf das Erscheinungsbild der Ausgabeform.
quelle
PostScript ,
367359328271 BytesCode (komprimierte Version):
Code (unkomprimierte Version):
Ergebnis (als Animation, um zu sehen, wie es gezeichnet wird):
quelle
Python 3 mit Pygame,
327 314 287278 Bytes(Wendet verschiedene unangenehme Hacks an, um 13 Bytes zu sparen. Insbesondere wird die Farbe nicht mehr gespeichert, sondern im laufenden Betrieb berechnet.
-(r>25)
)(Auf Funktion umgestaltet, verloren
sys
;math
zugunsten von Koordinatenkonstanten gehackt ; kleine Optimierungen; 27 Bytes gespart.)(Koordinate neu geschrieben Konstanten zu komplexen mathematischen Tricks, um (Co) Sinus zu erhalten ( 9 Bytes sparen)
Funktion, die ein einzelnes ganzzahliges Argument annimmt, das die Hälfte der Breite / Höhe des resultierenden Bildes darstellt. ZB
f(500)
wird ein 1000x1000 Pixel Fenster erstellt und ein Biohazard Symbol darin gezeichnet.Ungekürzte Ausführung:
Der Schlüssel zu diesem Programm besteht hauptsächlich darin, die 3-Wege-Punktsymmetrie des Symbols auszunutzen und die Zeichenoperationen so sparsam wie möglich auszudrücken. Das Herzstück des Ganzen
circles
ist eine Liste von Kreisdefinitionen, bestehend aus:position
: wie weit nach außen vom Ursprung in halben Grundeinheitenradius
: der Radius des Kreises in halben Grundeinheitenwidth
: die Randbreite des Kreises (einwärts vom äußeren Kreis, 0 = füllen)color
: Ausnutzung der Tatsache, dass Pygame0
als schwarz und-1
als weiß interpretiertJeder Zeichenvorgang wird dreimal um 120 ° gedreht wiederholt. Das Abstumpfen der "Krallen" erfolgt mit einem anderen Kreis. Die inneren "Linienschnitte" sind speziell ummantelt, weil ich mir keinen effizienteren Weg vorstellen kann, sie dort hinein zu bringen. Das „Grundgerät“ in der Spezifikation definiert ist hier verdoppelt , damit ich nicht haben verwende
.5
incircles
und inint()
dem ganzen Ort pygame zu befriedigen.Ergebnis für
python3 -c 'from biohazard import *; f(500)'
:quelle
sys
Modul importiert wird, wodurch der Code verkürzt wird (siehe Regeln ). Auch dieser Trick angewandt werden , um die Notwendigkeit , die Einfuhr zu vermeidenmath
.math
, refactored ich , daß auf eine Liste von Koordinaten; es waren sowieso nur 3 von ihnen. Kein (Co) Sinus notwendig.Tcl / Tk - 557 Bytes
Diese Version ist jedoch langweilig, da Sie das gleiche kleine Bild erhalten, egal was passiert. Es erfüllt jedoch die OP-Bedingungen für die Anzeige auf dem Bildschirm. Hier ist die unkomprimierte Version mit Kommentaren und der Möglichkeit, eine Größe anzugeben, die hinzugefügt wurde in:
Entschuldigung, keine Bilder (funktioniert heute auf meinem Handy). Erzeugt ein schwarzes Symbol auf einem orangefarbenen Biohazard-Hintergrund.
quelle