Narysuj symbol zagrożenia biologicznego w dowolnym kolorze na wyraźnie zaznaczonym tle. Konkretne proporcje zostały opublikowane w wydaniu Federalnego Rejestru Rządu USA z 27 czerwca 1974 roku .
Detale
Jako dane wyjściowe dozwolone jest zapisywanie do pliku (dozwolone są formaty rastrowe i wektorowe) lub wyświetlanie na ekranie.
Możesz narysować tylko obramowanie lub wypełniony kształt.
Jeśli używasz obrazów rastrowych, powinieneś wziąć parametr (lub dwa) jako dane wejściowe, które pozwolą dostosować rozdzielczość wyniku (np. Szerokość / wysokość).
Tło musi mieć przynajmniej rozmiar ramki granicznej symbolu, ale może być większe.
Wyprowadzenie symbolu Unicode ☣ nie jest wystarczające .
- Dokładne stosunki używanych odległości podano na poniższym schemacie (który pierwotnie stąd ):
Próbowałem też stworzyć dodatkowy schemat z tymi samymi pomiarami, który, mam nadzieję, jest nieco łatwiejszy do odczytania:
(Zainspirowany postem w 99% niewidoczny )
Odpowiedzi:
T-SQL,
442 441 426 355 349344 bajtówZaoszczędź ponad 70 bajtów, używając
REPLACE()
długich słów kluczowych i wykonując jako dynamiczny SQL. Zobacz kod po wymianie na zrzucie ekranu poniżej.Podwoiłem wartości współrzędnych z przykładowej ilustracji i przesunąłem się o 9 jednostek w górę, aby zmniejszyć liczbę wyświetlanych miejsc po przecinku.
Dokonano tego w SQL 2017, używając funkcji geoprzestrzennych wprowadzonych w SQL 2008. Wiele przydatnych wbudowanych funkcji geometrii, w tym
STBuffer
, co daje mi prosty sposób definiowania okręgów o różnych rozmiarach wokół punktu.Obraz wyjściowy z kodem z adnotacjami:
Aby uzyskać więcej rysunków w języku T-SQL, zobacz mój zajączek wielkanocny .
Aby uzyskać bardziej praktyczne zastosowania tej technologii w SQL, przeczytaj ten artykuł lub obejrzyj ten film . SE ma nawet powiązaną stronę, gis.stackexchange.com .
Edycje:
STDifference
jedenSTUnion
z obiektów, zamiast każdego z osobna.REPLACE()
powtarzających się słów kluczowych, a następnie wykonując je jako dynamiczny SQL. Cofnięto Edycja 2, aby pozostawić więcej zamiennikówSTDifference
.5
do użycia zamiast znaku zastępczego'#'
, co pozwoliło zaoszczędzić jeszcze 2 bajty w cudzysłowie.)
do ciąguSTDifference
zastępującego; dzięki, @Nicholas!źródło
Tex + Tikz, 232 bajty
43 bajty zapisane przez przejście na tex. Dzięki Phelype Oleinik
Niektóre bajty zapisane dzięki Skillmon
Z podziałami linii i bez
\def
:Wyjaśnienie
To jest trochę przestarzałe. Naprawię to, kiedy będę mógł dowiedzieć się, jak sprawić, by obrazy nie były zachwycające
Tutaj wyjaśnię, w jaki sposób nieskompresowana odpowiedź rozwiązuje problem. W pewnym momencie mogę wyjaśnić, jak działa kompresja. Najpierw narysujemy duże czarne kółka:
Następnie rysujemy białe linie:
Następnie rysujemy białe kółka:
Następnie dodajemy środkowy biały okrąg:
Następnie dodajemy czarny pierścień:
Następnie usuwamy części czarnego pierścienia
źródło
\1
zamiast\x
, ponieważ możesz wtedy użyć\def\f{\foreach\1in{90,210,330}}
.C, 8010 bajtów
Dawno temu, przed SVG lub EMF, musiałeś poradzić sobie z rastrem, a jeśli chcesz coś załadować od razu, powiedz, zanim system operacyjny był gotowy, np. Ekran startowy systemu Windows, musiałeś użyć RLE lub run-length -kodowanie. Ten potwór wysyła plik PBM, używając danych RLE jako danych. Buduj jak zwykle i biegnij w ten sposób
./biohazard > biohazard.pbm
.Gdyby uwzględnić wszystkie frameworki wymagane do wygenerowania, np. Silnik SVG w HTML, biblioteki Java itp., Byłoby to prawdopodobnie najmniejsze samodzielne rozwiązanie , ponieważ
puts
jest to jedyna funkcja zewnętrzna i zazwyczaj jest to jedna z najmniejszychstdio.h
Funkcje.W odniesieniu do tego szczegółu:
I interpretować „powinien” jako różne od „musi”, jak na przykład w dokumencie RFC 2119 , więc nie obejmuje skalowanie, ponieważ dla tego kodu byłoby tylko wykonalne wielokrotności oryginalnego, np
./biohazard 2
i która wprowadziłabyatoi
,printf
i inne powikłania, które utrudniłyby główny cel przedłożenia.źródło
putchar()
czegoś podobnego.TeX + Ti k Z,
234230226 bajtówPoczątkowo 5 bajtów dłuższych niż odpowiedź Sriotchilism O'Zaic , ale ten powinien być poprawny. Jest podobny do jego odpowiedzi, ale oszczędza jeszcze kilka bajtów tu i tam, potrzebuje jeszcze jednego
\draw[line width=8]
(w poniższym kodzie jest to zrobione przez\28](~30)to(~55);
, to tylko 17 bajtów dodanych tylko w tym celu), aby uzyskać właściwe końcówki symbolu, stąd 5 bajty więcej ogólnej długości kodu.I dzięki Sriotchilizmowi O'Zaicowi ponownie przeczytałem niektóre pytania i zdałem sobie sprawę, że mogę zmienić kolor na czerwony, aby zaoszczędzić kilka bajtów:
TeX-g + Ti k Z, 195 bajtów
Jeśli ktoś się tym przejmuje, poniżej używa dialektu golfowego opartego na TeXie, nad którym pracuję (nie uważaj kodu za stabilny). Liczba bajtów obejmuje znaki EOL i EOF, ponieważ są one używane semantycznie (EOL ogranicza argumenty pętli). Dialekt jest do tej pory dość mały i zawiera tylko skróty do definicji i składnię for-loop, jednak nie jest specjalnie napisany dla tej odpowiedzi, więc nie powinien łamać zasad gry w golfa. Repozytorium dla
-g.tex
pakietu / pliku: https://github.com/Skillmon/TeX-gDane wyjściowe obu fragmentów kodu wyglądają identycznie:
( zbyt leniwy, aby zaktualizować obraz, wyobraź sobie, że jest czerwony )
źródło
GLSL,
700629564545499 bajtówBawiłem się z Shadertoyem, więc wypróbowałem język cieniowania GLSL. Kod po prostu rasteryzuje okręgi i linie poprzez testowanie każdego fragmentu i przypisuje im wartość jednego lub zera. Rozmiar został zmniejszony z> 1000 bajtów przez intensywne użycie makr.
Program Shadertoy
źródło
&&
i||
być golfed do&
i|
na niektórych lub wszystkich części?|
/&
zamiast||
/&&
do booli, prawda? Dawno nic nie robiłem w C, więc nie jestem pewien. Wiem, że w większości przypadków działa w Javie / C # .NET. Ale dopiero teraz zauważam dodany link Shadertoy i wydaje się, że nie działa tam, jak już powiedziałeś. Ach tak. Dobra pierwsza odpowiedź btw! Witamy w CGCC.SVG (HTML5),
434410321 bajtówTeraz oparty na SVG @ LevelRiverSt.
źródło
<defs>
jest bezpieczne. Działa to dla mnie w Firefox, Chrome i Edge.<use>
!Przetwarzanie,
371368 bajtówNie byłem pewien, czy przetwarzanie powinno być liczone jako zrasteryzowane, czy nie na potrzeby tego wyzwania. Jeśli to się liczy jako rasteryzowane,
translate
iscale
jest konieczne, aby symbol czytelne i na ekranie dla danego rozmiaru okna. Ponieważ jednak wszystkie polecenia rysowania są wektoryzowane, działa w dowolnej skali; więc jeśli założymy, że rysowanie przy względnym początku około 200 jednostek jest w porządku, pierwsze 43 bajty można usunąć.Zakłada się, że kolor tła
204, 204, 204
to domyślny kolor tła podczas przetwarzania. Zakłada się takżerectMode
zCORNER
orazellipseMode
zCENTER
(domyślnych)Z początkowym
size(640, 640)
, powstały szkic wygląda następująco:Podwajając skalę, zapisałem 3 bajty, ponieważ
.5
s są eliminowane (chociaż kilka liczb przepływa od 1 cyfry do 2 cyfr).Konstrukcja jest podobna do rozwiązania TeX, rysując czarny, a następnie szary na górze, aby „usunąć” luki między kształtem.
Wyjaśnienie:
źródło
.5
!scale
zmianą kodu tylko dla części kodu, ale nie byłem pewien, gdzie najlepiej go umieścićGLSL,
319310 bajtówMożna to renderować w Shadertoy .
Możesz użyć symetrii na obrazie, aby narysować ją z mniejszą liczbą osobnych kształtów.
Oto nieco zawyżona wersja:
(dzięki @Kevin Cruijssen za usunięcie niepotrzebnych białych znaków)
źródło
H(y) sqrt
→H(y)sqrt
; wszystkie spacje w instrukcjach if:if (
→if(
; oraz te w ostatnim wyrażeniu if otaczającym AND:if (R>.10 && R<.135 && S<.095)c=1.;
→if(R>.10&&R<.135&&S<.095)c=1.;
.HTML / JS,
448 435 433387 bajtówZaoszczędzono wiele bajtów, używając wstępnie zminimalizowanej wersji SVG @ Neil
Zapisano 2 bajty dzięki @Shaggy
Skompresowana wersja tego pliku SVG z Wikimedia Commons.
Wypróbuj online! (po prostu wyświetla zdekompresowany ciąg)
Fragment demonstracyjny
Pokaż fragment kodu
źródło
Haskell ,
530491436435430420 bajtówWysyła plik PBM.
To była świetna zabawa!
(Musiałem przekonwertować to na PNG, aby przesłać do imgur)
Zasadniczo tworzymy własne funkcje grafiki wektorowej, które renderują się na obraz piksel po pikselu, wykrywając, czy piksel jest częścią kształtu. Kształt jest skonstruowany jako wiązka kół i linii (promieniujących od początku) utrzymywanych razem z podstawowymi operacjami ustawiania: zjednoczenie, przecięcie i nie. Okręgi składają się ze środka i promienia, a linie mają minimalny promień, szerokość i kąt w tej kolejności. Wykrywanie członkostwa w kole jest łatwe: po prostu odejmuję środkowe współrzędne i porównuję wielkość z promieniem. Linia jest nieco bardziej skomplikowana: obracam punkt przeciwnie do kąta, aby go przynieść (aby anulować obrót), a następnie sprawdzam tylko, czy współrzędne xiy mieszczą się w oczekiwanym zakresie. Minimalny promień zapewnia, aby większa szczelina na odległych końcach dużych kół nie zastępowała małych szczelin w pobliżu środka. Po tym ustawianie matematyki jest prostą kwestią logiczną.
EDYCJA: Wielkie dzięki @flawr za zdjęcie 39 bajtów!
EDIT2: Bardzo dziękuję @Christian Sievers za zdjęcie 55 bajtów! Dobry pomysł, aby przekształcić je w funkcje
EDIT3: Jeszcze raz dziękuję @Christian Sievers za odcięcie kolejnego bajtu!
EDIT4: Pobrał 7 bajtów dzięki @ H.PWiz i @Angs!
EDIT5: Właśnie zauważyłem błąd! Renderowałem linie dwa razy grubsze, niż powinny! Kosztowało mnie to 2 bajty, aby to naprawić (musiałem podzielić szerokość przez 2; mogłem skorygować stałe wartości, ale zmiana 1 na 0,5 również kosztowałaby 2).
EDIT6: Dzięki @Angs za zdjęcie kolejnych 10 bajtów!
źródło
[-90,-210,-330]
? I byłoby to możliwe, aby zmienić<=
się<
?Rubinowy , 278 bajtów
Wypróbuj online!
Generuje poniższy kod SVG, przy czym symbol stanowi 200% skali w PO.
Składa się z koła z tyłu i zębów na pierwszym planie. Ząb jest skalowany
-1,0,1
wX
osi i obracany o wielokrotności 120 stopni. Przypadki, w którychX
skalowanie wynosi zero, nie dają żadnych wyników, podczas gdy-1
i+1
. zapewnić dwie strony każdej pary zębów.Wykorzystuje się 2-jednostkową szeroką białą ramkę wokół ząbka, aby wyciąć tylne koło, używając atrybutów
stroke
istroke-width
. Aby kształt wewnętrzny był zgodny z OP, współrzędne są przesuwane o 1 jednostkę (o połowę szerokości ramki). Pamiętaj, że ścieżka celowo nie jest zamknięta, aby pominąć rysowanie końcowej linii granicy. Zapewnia to połączenie dwóch połówek każdej pary zębów.Z powodów golfowych narysowano 90 stopni wewnętrznego koła zamiast oczekiwanych 60. Oznacza to, że podstawy każdej pary zębów są częściowo zachodzące na siebie, ale nie wpływa to na wygląd kształtu wyjściowego.
źródło
PostScript ,
367359328271 bajtówKod (wersja skompresowana):
Kod (wersja nieskompresowana):
Wynik (jako animacja, aby zobaczyć, jak jest rysowany):
źródło
Python 3 z pygame,
327 314 287278 bajtów(Zastosował różne nieprzyjemne hacki, aby zaoszczędzić 13 bajtów; przede wszystkim nie przechowywał już koloru, ale obliczał go w locie za pomocą
-(r>25)
)(Przebudowano do działania, tracąc
sys
; zhakowano namath
rzecz stałych współrzędnych; małe poprawki; zapisano 27 bajtów)(Przepisz współrzędną stałe złożonych sztuczek matematycznych, aby uzyskać (co) sinus , oszczędzając 9 bajtów)
Funkcja, która pobiera pojedynczy argument liczby całkowitej reprezentujący połowę szerokości / wysokości wynikowego obrazu. Np.
f(500)
Utworzy okno o wymiarach 1000 x 1000 pikseli i narysuje tam symbol zagrożenia biologicznego.Wersja nieskrócona:
Kluczem do tego programu jest głównie wykorzystanie 3-punktowej symetrii symbolu i wyrażanie operacji rysowania tak rzadko, jak to możliwe. Sercem tego wszystkiego jest
circles
lista definicji kół, składająca się z:position
: jak daleko na zewnątrz od początku w pół podstawowych jednostkachradius
: promień koła w pół podstawowych jednostkachwidth
: szerokość obramowania koła (do wewnątrz od zewnętrznego koła, 0 = wypełnienie)color
: wykorzystując fakt, że pygame interpretuje0
jako czarny i-1
białyKażda operacja rysowania jest powtarzana trzykrotnie, obrócona o 120 °. Tępienie „pazurów” odbywa się za pomocą innego koła. Wewnętrzne „nacięcia linii” są specjalnie obudowane, ponieważ nie mogłem wymyślić bardziej skutecznego sposobu na ich wprowadzenie. „Podstawowej jednostki” zdefiniowane w specyfikacji jest podwojona tu więc nie trzeba używać
.5
wcircles
iint()
w każdym miejscu, aby zaspokoić Pygame.Wynik dla
python3 -c 'from biohazard import *; f(500)'
:źródło
sys
modułu, co skraca kod (patrz reguły ). Ponadto, ta sztuczka może być stosowany w celu uniknięcia konieczności importowaniamath
.math
, przełożyłem to na listę współrzędnych; w każdym razie było ich tylko 3. Nie jest wymagany (ko) sinus.Tcl / Tk - 557 bajtów
Ta wersja jest jednak nudna, ponieważ bez względu na wszystko dostajesz ten sam mały obraz. Jednak spełnia warunki OP dotyczące wyświetlania na ekranie. Oto nieskompresowana wersja z komentarzem i możliwością określenia dodanego rozmiaru w:
Przepraszamy, brak zdjęć (dzisiaj działa z mojego telefonu). Tworzy czarny symbol na pomarańczowym tle zagrożenia biologicznego.
źródło