Gambarlah simbol Biohazard dalam warna sewenang-wenang pada latar belakang yang berwarna jelas. Proporsi spesifik diterbitkan dalam edisi 27 Juni 1974 dari Daftar Federal Pemerintah AS.
Detail
Sebagai output, menulis ke file (format raster dan vektor diizinkan) atau ditampilkan di layar keduanya diperbolehkan.
Anda dapat menggambar hanya perbatasan atau bentuk yang diisi.
Jika Anda menggunakan gambar raster, Anda harus mengambil parameter (atau dua) sebagai input yang memungkinkan Anda menyesuaikan resolusi output (mis. Lebar / tinggi).
Latar belakang setidaknya harus memiliki ukuran kotak pembatas simbol tetapi mungkin lebih besar.
Mengeluarkan simbol unicode ☣ tidak cukup .
- Rasio tepat dari jarak yang digunakan diberikan dalam diagram berikut (yang aslinya dari sini ):
Saya juga mencoba membuat diagram tambahan dengan ukuran yang sama yang mudah-mudahan sedikit lebih mudah dibaca:
(Terinspirasi oleh pos di 99% tidak terlihat )
Jawaban:
T-SQL,
442 441 426 355 349344 byteMenyimpan 70+ byte dengan menggunakan
REPLACE()
kata kunci panjang dan mengeksekusi sebagai SQL dinamis. Lihat kode pasca-penggantian pada tangkapan layar di bawah ini.Saya menggandakan nilai koordinat dari ilustrasi sampel dan naik 9 unit, untuk mengurangi jumlah desimal yang ditampilkan.
Ini dilakukan di SQL 2017, menggunakan fitur geo-spasial yang diperkenalkan dalam SQL 2008. Banyak fungsi geometri bawaan yang berguna, termasuk
STBuffer
, yang memberi saya cara sederhana untuk mendefinisikan lingkaran ukuran berbeda di sekitar titik.Visual output, dengan kode beranotasi:
Untuk gambar T-SQL lainnya, lihat Easter Bunny saya .
Untuk aplikasi yang lebih praktis dari teknologi ini dalam SQL, baca artikel ini atau tonton video ini . SE bahkan memiliki situs terkait, gis.stackexchange.com .
Suntingan:
STDifference
aSTUnion
dari objek, bukan masing-masing secara individual.REPLACE()
kata kunci berulang, kemudian jalankan sebagai SQL dinamis. Kembalikan Edit 2, untuk meninggalkan lebih banyak penggantianSTDifference
.5
untuk digunakan sebagai pengganti karakter'#'
, menghemat 2 byte lebih banyak pada tanda kutip.)
keSTDifference
string pengganti; terima kasih, @Nicholas!sumber
Tex + Tikz, 232 byte
43 byte disimpan dengan beralih ke tex. Terima kasih kepada Phelype Oleinik
Beberapa byte disimpan berkat Skillmon
Dengan jeda baris dan tanpa
\def
:Penjelasan
Ini sedikit ketinggalan jaman saya akan memperbaikinya ketika saya bisa mencari cara untuk membuat gambar tidak terlalu besar
Di sini saya akan menjelaskan bagaimana jawaban yang tidak dikompres menyelesaikan masalah. Saya mungkin akan menjelaskan bagaimana kompresi bekerja. Pertama-tama kita menggambar lingkaran hitam besar:
Lalu kami menggambar beberapa garis putih:
Lalu kami menggambar lingkaran putih:
Lalu kami menambahkan lingkaran putih tengah:
Lalu kami menambahkan annulus hitam:
Kemudian kami menghapus bagian annulus hitam
sumber
\1
alih-alih\x
, karena Anda dapat menggunakannya\def\f{\foreach\1in{90,210,330}}
.C, 8010 byte
Jauh di belakang, sebelum SVG atau EMF, Anda harus berurusan dengan raster, dan jika Anda ingin sesuatu untuk memuat segera, katakan sebelum O / S siap, seperti layar startup Windows, Anda harus menggunakan RLE, atau run-length -kode Monster ini menghasilkan file PBM menggunakan RLE sebagai datanya. Bangun seperti biasa dan jalankan seperti ini
./biohazard > biohazard.pbm
.Jika Anda menyertakan semua kerangka kerja yang diperlukan untuk menghasilkan, misalnya mesin SVG dalam HTML, perpustakaan Java, dll. Ini kemungkinan akan menjadi solusi mandiri terkecil , karena
puts
merupakan satu-satunya fungsi eksternal, dan biasanya salah satu yang terkecilstdio.h
fungsi.Mengenai detail ini:
Saya menafsirkan "harus" berbeda dari "harus", misalnya seperti dalam RFC 2119 , jadi saya tidak memasukkan penskalaan, karena untuk kode ini hanya layak untuk melakukan kelipatan dari yang asli, misalnya
./biohazard 2
dan yang akan memperkenalkanatoi
,printf
dan lainnya komplikasi yang akan mengurangi fokus utama pengajuan.sumber
putchar()
atau serupa.TeX + Ti k Z,
234230226 byteAwalnya 5 byte lebih panjang dari jawaban Sriotchilism O'Zaic , tetapi yang ini harus benar. Ini mirip dengan jawabannya tetapi menyimpan beberapa byte lebih lanjut di sana-sini, perlu satu
\draw[line width=8]
lagi (dalam kode di bawah ini dilakukan oleh\28](~30)to(~55);
, itu 17 byte ditambahkan hanya untuk ini) untuk mendapatkan tips dari simbol yang benar, maka 5 byte lebih panjang kode keseluruhan.Dan terima kasih kepada Sriotchilism O'Zaic Saya membaca kembali beberapa pertanyaan dan menyadari saya dapat mengubah warna menjadi merah, sehingga menghemat beberapa byte lagi:
TeX-g + Ti k Z, 195 Bytes
Hanya jika seseorang peduli, berikut ini menggunakan kode dialek golf berbasis TeX yang sedang saya kerjakan (jangan anggap kodenya stabil). Jumlah byte termasuk karakter EOL dan karakter EOF, karena mereka secara semantik digunakan (EOL membatasi argumen loop). Dialeknya cukup kecil sampai sekarang dan hanya menampilkan singkatan untuk definisi dan sintaks for-loop, namun tidak secara khusus ditulis untuk jawaban ini, jadi tidak boleh melanggar aturan main kode. Repositori untuk
-g.tex
-package / file: https://github.com/Skillmon/TeX-gOutput dari kedua cuplikan kode terlihat identik:
( terlalu malas untuk memperbarui gambar, bayangkan saja itu merah )
sumber
GLSL,
700629564545499 byteSaya bermain-main dengan Shadertoy, jadi saya mencoba bahasa shading GLSL. Kode hanya merasterisasi lingkaran dan garis dengan menguji setiap fragmen, dan memberikan nilai satu atau nol. Ukurannya dikurangi dari> 1000 byte dengan penggunaan makro yang berat.
Program Shadertoy
sumber
&&
dan||
golf ke&
dan|
di beberapa atau semua bagian?|
/&
bukan||
/&&
untuk bools, bukan? Belum melakukan apa pun dalam C dalam waktu yang lama, jadi tidak yakin. Saya tahu ini berfungsi di Java / C # .NET dalam banyak kasus. Tapi saya baru sekarang melihat tautan Shadertoy yang Anda tambahkan, dan sepertinya tidak berfungsi di sana seperti yang sudah Anda nyatakan. Baiklah Jawaban pertama yang bagus btw! Selamat datang di CGCC.SVG (HTML5),
434410321 byteSekarang berdasarkan pada SVG @ LevelRiverSt.
sumber
<defs>
itu aman. Ini berfungsi untuk saya di Firefox, Chrome dan Edge.<use>
juga!Memproses,
371368 byteSaya tidak yakin apakah Pemrosesan harus dihitung sebagai raster atau tidak untuk tujuan tantangan ini. Jika dihitung sebagai raster, maka
translate
danscale
perlu untuk membuat simbol terbaca dan di layar untuk ukuran jendela tertentu. Tapi, karena semua perintah menggambar adalah vektor, itu berfungsi pada skala tertentu; jadi jika kita asumsikan menggambar pada asal relatif menjadi sekitar 200 unit lebar baik-baik saja, 43 byte pertama dapat dijatuhkan.Ini mengasumsikan warna latar belakang
204, 204, 204
, yang merupakan warna latar belakang standar dalam pemrosesan. Ini juga mengasumsikan arectMode
dariCORNER
danellipseMode
dariCENTER
(default)Dengan inisial
size(640, 640)
, sketsa yang dihasilkan terlihat seperti ini:Dengan menggandakan skala, saya menyimpan 3 byte, karena
.5
s dihilangkan (meskipun beberapa angka mengalir dari 1 digit ke 2 digit).Konstruksi ini mirip dengan solusi TeX, menggambar hitam dan kemudian abu-abu di atas untuk "menghapus" celah di antara bentuk.
Penjelasan:
sumber
.5
!scale
untuk mengubahnya hanya untuk sebagian dari kode, tetapi tidak yakin di mana harus meletakkannyaGLSL,
319310 byteIni dapat diberikan pada Shadertoy .
Anda dapat menggunakan simetri pada gambar untuk menggambarnya dengan jumlah kecil dari bentuk yang terpisah.
Berikut ini adalah versi yang agak meningkat:
(terima kasih kepada @Kevin Cruijssen karena telah menghapus spasi kosong yang tidak perlu)
sumber
H(y) sqrt
→H(y)sqrt
; semua ruang pada pernyataan if Anda:if (
→if(
; dan yang ada di if-statement terakhir Anda seputar AND:if (R>.10 && R<.135 && S<.095)c=1.;
→if(R>.10&&R<.135&&S<.095)c=1.;
.HTML / JS,
448 435 433387 byteMenyimpan banyak byte dengan menggunakan versi yang sudah diperkecil dari @ Neil dari SVG
Saved 2 byte berkat @Shaggy
Versi terkompresi dari file SVG ini dari Wikimedia Commons.
Cobalah online! (hanya menampilkan string yang terkompresi)
Cuplikan demo
Tampilkan cuplikan kode
sumber
Haskell ,
530491436435430420 byteMenghasilkan file PBM.
Ini sangat menyenangkan!
(Saya harus mengonversikan ini ke PNG untuk mengunggah ke imgur)
Pada dasarnya kami membuat fungsi grafis vektor kami sendiri yang merender gambar piksel demi piksel dengan mendeteksi apakah piksel tersebut merupakan bagian dari bentuk. Bentuknya dikonstruksikan sebagai sekelompok lingkaran dan garis (memancar dari asalnya) yang disatukan dengan operasi himpunan dasar: penyatuan, persimpangan, dan bukan. Lingkaran terdiri dari pusat dan jari-jarinya, dan garis-garis memiliki jari-jari minimum, lebar, dan sudut dalam urutan itu. Mendeteksi keanggotaan dalam lingkaran itu mudah: Saya hanya mengurangi koordinat pusat dan membandingkan besarnya dengan jari-jari. Garisnya sedikit lebih rumit: Saya memutar titik dengan kebalikan sudut untuk membawanya (untuk membatalkan rotasi) maka saya hanya memeriksa apakah koordinat x dan y berada dalam kisaran yang diharapkan. Jari-jari minimum adalah untuk memastikan celah yang lebih besar di ujung jauh dari lingkaran besar tidak mengesampingkan celah kecil di dekat pusat. Setelah itu, masalah sederhana dari logika boolean adalah mengatur matematika.
Sunting: Terima kasih banyak kepada @ flawr karena telah melepas 39 byte!
EDIT2: Terima kasih banyak kepada @Christian Sievers karena telah melepas 55 byte! Ide bagus membuatnya menjadi fungsi
EDIT3: Sekali lagi terima kasih kepada @Christian Sievers karena telah memotong byte lain!
EDIT4: Lepaskan 7 byte berkat @ H.Piz dan @Angs!
EDIT5: Baru saja melihat bug! Saya membuat garis dua kali lebih tebal dari yang seharusnya! Biaya saya 2 byte untuk memperbaikinya (harus membagi lebar dengan 2; bisa menyesuaikan nilai-nilai konstan tetapi mengubah 1 menjadi 0,5 juga akan menelan biaya 2).
EDIT6: Terima kasih @Angs karena melepas 10 byte lagi!
sumber
[-90,-210,-330]
? Dan mungkinkah untuk mengubah<=
ke<
?Ruby , 278 byte
Cobalah online!
Hasilkan kode SVG di bawah ini, dengan simbol berada pada 200% dari skala di OP.
Terdiri dari lingkaran di belakang, dan cabang di latar depan. Cabang ini diskalakan
-1,0,1
diX
poros dan diputar melalui kelipatan 120 derajat. Kasus-kasus di manaX
penskalaan adalah nol tidak menghasilkan output, sedangkan-1
dan+1
. berikan dua sisi setiap pasang garpu.Gunakan terbuat dari perbatasan putih lebar 2 unit di sekitar cabang untuk memotong lingkaran belakang, menggunakan atribut
stroke
danstroke-width
. Agar bentuk internal menjadi per OP, koordinat dipindahkan oleh 1 unit (setengah lebar perbatasan.) Perhatikan bahwa jalur sengaja tidak ditutup, untuk menekan gambar garis akhir perbatasan. Ini memastikan dua bagian dari setiap pasangan bergabung bersama.90 derajat lingkaran dalam ditarik daripada 60 yang diharapkan, karena alasan bermain golf. Ini berarti ada beberapa tumpang tindih antara pangkalan masing-masing pasangan garpu, tetapi ini tidak mempengaruhi penampilan bentuk keluaran.
sumber
PostScript ,
367359328271 byteKode (versi terkompresi):
Kode (versi tidak terkompresi):
Hasil (sebagai animasi untuk melihat cara menggambar):
sumber
Python 3 dengan pygame,
327 314 287278 byte(Menerapkan berbagai peretasan jahat untuk menghemat 13 byte; terutama tidak lagi menyimpan warnanya tetapi menghitungnya dengan cepat
-(r>25)
)(Refactored berfungsi, kehilangan
sys
; diretasmath
demi konstanta koordinat; tweak kecil; disimpan 27 byte)(Koordinat penulisan ulang konstan ke trik matematika yang rumit untuk mendapatkan (co) sinus , menghemat 9 byte)
Fungsi yang mengambil argumen integer tunggal mewakili setengah lebar / tinggi gambar yang dihasilkan. Misalnya
f(500)
akan membuat jendela 1000x1000 piksel, dan menggambar simbol biohazard di sana.Versi tidak dipendekkan:
Kunci dari program ini adalah kebanyakan mengeksploitasi simetri titik 3-arah dari simbol, dan mengekspresikan operasi menggambar sesedikit mungkin. Inti dari semuanya adalah
circles
, yang merupakan daftar definisi lingkaran, yang terdiri dari:position
: seberapa jauh ke luar dari asal dalam setengah unit dasarradius
: jari-jari lingkaran dalam setengah unit dasarwidth
: lebar batas lingkaran (ke dalam dari lingkaran luar, 0 = isi)color
: mengeksploitasi fakta bahwa pygame mengartikan0
sebagai hitam dan-1
putihSetiap operasi menggambar diulang tiga kali, diputar 120 °. Menumpulkan "cakar" dilakukan dengan lingkaran lain. "Pemotongan garis" di dalam dibuat khusus karena saya tidak bisa memikirkan cara yang lebih efisien untuk memasukkannya ke sana. "Unit dasar" yang didefinisikan dalam spesifikasi digandakan di sini jadi saya tidak perlu menggunakan dan
.5
di semua tempat untuk memenuhi pygame.circles
int()
Hasil untuk
python3 -c 'from biohazard import *; f(500)'
:sumber
sys
modul, yang mempersingkat kode (lihat aturan ). Juga, trik ini dapat diterapkan untuk menghindari kebutuhan impormath
.math
, saya refactored itu ke daftar koordinat; itu hanya 3 dari mereka. Tidak perlu (co) sinus.Tcl / Tk - 557 byte
Namun, versi itu membosankan, karena Anda mendapatkan gambar berukuran kecil yang sama apa pun yang terjadi. Namun, itu memenuhi persyaratan OP untuk menampilkan di layar. Ini adalah versi yang tidak dikompresi dengan komentar dan kemampuan untuk menentukan ukuran yang ditambahkan:
Maaf, tidak ada gambar (matikan telepon saya hari ini). Menghasilkan simbol hitam pada latar belakang oranye biohazard.
sumber