Anda mungkin pernah mendengar tentang "Logo Peretas", juga disebut "Peretas Emblem". Ini terlihat seperti ini:
Ini adalah pola dari simulasi matematika yang disebut Game of Life. Glider adalah pola Hidup paling sederhana yang bergerak, dan yang paling mudah dikenali dari semua pola Kehidupan.
Tantangan
Tantangannya cukup sederhana: Menampilkan logo peretas. Ini didefinisikan sebagai:
- Kisi 3x3 dengan batas, latar belakang putih, dan kisi abu-abu.
- Lima titik hitam diatur dalam pola glider GoL.
- Tidak ada lagi.
Aturan
- Titik hitam harus mengisi 40% - 80% dari masing-masing kotak-kotak.
- Anda akan menampilkan lambang dengan output grafis tetapi tanpa seni ASCII .
- Output harus minimal 30x30 piksel .
- Output hanya harus memiliki warna abu-abu, hitam dan putih .
- Setiap kotak-kotak dalam kotak akan memiliki ukuran yang sama. Kotak akan menjadi persegi 3x3 reguler .
- Anda tidak boleh menarik logo dari internet atau sistem file Anda.
- Program Anda akan menampilkan logo di layar / jendela kosong. Jika itu berakhir, ia harus melakukannya secara normal.
- Perhatikan bahwa "titik" tidak selalu berarti "lingkaran". "Titik" adalah bentuk geometris tunggal yang berpusat di tengah kotak-kotak dengan satu permukaan. Misalnya, sementara lingkaran atau persegi akan memenuhi syarat sebagai titik, dua segitiga atau kotak-kotak tidak akan.
Pemenang
Karena ini adalah kode-golf , jawaban terpendek di setiap bahasa menang!
Harap sertakan tangkapan layar dari output program Anda dalam jawaban Anda.
Jawaban:
Mathematica, 62 byte
Mathematica, 71 byte
sumber
Graphics@Disk[]
sebagai argumen.Rasterize@Grid[{{,●,},{,,●},{●,●,●}},Frame->All,FrameStyle->Gray]
. ● adalah karakter unicode dua byte. Karena tidak harus benar-benar menjadi lingkaran, mungkin beberapa karakter ASCII dapat bekerja untuk memenuhi persyaratan 40% -80%.Rasterize
atau serupa untuk memenuhi persyaratangraphical output but no ASCII art
sebagai simbol masih dapat dipilih dalam kotak sebagai karakter Unicode.CSS + HTML,
56 + 84 = 140 byte52 + 84 = 136 byteDisimpan 4 byte dengan memasukkan saran dari komentar.
Ini menggunakan karakter UTF-8
•
yang panjangnya 2 byte dan memanfaatkan keanggunan sintaks HTML.sumber
•
!line-height:.4;
, dan yang lain dengan menghilangkan penutupan}
GLSL (fragmen shader),
278235256 byteLihat dalam aksi: http://glslsandbox.com/e#40717.2
sumber
precision highp float;void main(){vec2 a=gl_FragCoord.xy/20.-.2;ivec2 b=ivec2(a);a-=vec2(b)+.5;gl_FragColor=vec4(vec3(a.x<-.5||a.y<-.5||a.x>.3||a.y>.3?.5:length(a+.1)<.4&&(b.x+b.y-3)*b.y==0?.0:1.)*float(b.x<3&&b.y<3),1.);}
Python 2 ,
169140 byteUkuran sebenarnya, 61 x 61, diplot dalam kanvas yang jauh lebih besar dari 300 x 400:
Menampilkan kotak piksel:
Titik-titik menggunakan 177 piksel dalam kisaran 40% -80% apakah mempertimbangkan 19 dengan 19 isian putih (144,4-288,8) atau 21 dengan 21 termasuk kedua perbatasan (176,4-352,8).
Catatan: program mengakhiri dan menutup jendela kanvas segera setelah gambar selesai, untuk memungkinkan penutupan jendela manual menambahkan baris
done()
.turtle
adalah paket Python yang dikembangkan untuk pemrograman grafis pengantar. Pena dimulai dix,y=0,0
tengah kanvas berukuran 300 x 400 piksel (secara default),up
mengangkat pena,goto
menggerakkan pena,shape
mengatur bentuk pena ke bentuk"square"
yang ditentukan ( adalah bentuk yang telah ditentukan sebelumnya dengan lebar piksel standar 21) ),color
mengatur warna, di mana dua parameter mengatur stroke (dengan default lebar 1) dan mengisi; satu byte disimpan dengan menggunakan(r,g,b)
opsi tuple untuk menggantikan"white"
dengan[1,1,1]
menggunakan daftar perkalian[1]*3
. Akhirnyadot
menggambar sebuah titik dengan lebar yang diberikan dalam piksel dan warna. Nilai lebar default dot terlalu kecil untuk memenuhi syarat, seperti yang9
saya buat menjadi estetika dan kualifikasi15
. Warna titik bisa jadi"black"
tetapi(r,g,b)
tuple yang dibongkar0,0,0
lebih pendek dua byte.Pena harus bergerak menjauh dari titik mana pun di ujung karena jika tidak, pena abu-abu menyembunyikan titik.
Grid dilalui menggunakan div (
/
) dan mod (%
) darii
mulai8
(i
diinisialisasi ke9
tetapi dikurangi pada awalwhile
loop) dan bekerja ke0
, mengimbangi hasil2,1,0
untuk-1,0,1
menggunakan(1-...)
dan scaling masing-masing hingga ukuran grid menggunakan faktor 20 (perhatikan bahwa20-i/3*20
sebenarnya byte kurang dari20*(1-i/3)
, sama berlaku untuk%
). Ini menghasilkan urutan [kiri-bawah, tengah-kiri, atas-kiri, bawah-tengah, tengah-tengah, atas-tengah, kanan-bawah, kanan-tengah, kanan-atas], dan memerlukanhasDot
evaluasi " " dari[1,0,0,1,0,1,1,1,0]
, yang302
begitu biner dapat diakses dengan memeriksai
th kekuatan dua komponen302
dengan menggunakan bitwise-and302&2**i
,.sumber
turtle
.Applesoft BASIC ,
479476516515483482 byte-32 dengan menggunakan nama variabel yang tidak dapat dibaca: P
-1 karena Apple memutuskan untuk menjadi ajaib dan biarkan saya menggunakan GOTO implisit / tidak ada
Berikut ini adalah program saya sendiri (sangat beatable) untuk contoh dari output yang tidak menggunakan lingkaran:
Keluaran:
sumber
Kode mesin IA-32,
8180 byteHexdump:
Ini adalah
fastcall
fungsi yang disebutdoit
yang mengembalikan gambar dalam format PGM dalam buffer yang disediakan. Pemakaian:Keluaran:
Saya menggunakan 256x256 resolusi karena
itu dinginitu mari saya membagi indeks pixel dalamecx
secara otomatis ke koordinaty
dich
danx
dicl
. Juga, format file PGM membutuhkan angka 255 di header gambar.Kotak bagian dalam adalah 54x54 (41% dari sel berdasarkan area).
Kode sumber (dapat dikompilasi oleh Visual Studio):
Pola sel
dapat diwakili oleh bitmap "dioptimalkan" dari 7 bit.
Bit diindeks oleh ekspresi
y * 2 + x
, di mana(x,y)
lokasi sel. Ekspresi ini memberikan indeks yang sama ke 2 pasang sel. Ini kebetulan kebetulan bahwa nilai bit di sana sama.sumber
42*42/85/85
hanya menghasilkan 24,4%.HTML & CSS, 155 byte
Ternyata HTML benar - benar memaafkan tentang kesalahan sintaksis.
1 byte disimpan berkat @Octopus · 1 byte disimpan berkat @Downgoat · 2 byte disimpan berkat @StephenS
2 byte disimpan berkat @Ryan · 3 byte disimpan berkat @styfle · 4 byte disimpan berkat @Ferrybig
13 byte disimpan berkat @SteveBennett
sumber
R (
130119113 byte)sumber
axes=F
untuk menggantixaxt="n",yaxt="n"
. Jika Anda menggandakan semua nilai koordinat, Anda menghemat 4 byte net (tetapi tidak bisa menggunakan1:3,2:3
trik).;box()
sebagaiaxes=F
juga menghilangkan frame. Juga, sebagaiaxes
adalahplot
parameter dan tidak diteruskan kepar
melalui...
sebagaixaxt
/yaxt
, bahkan tidak perlu dibilang sepenuhnya.c(1,7)
dengan variabel (l=c(1,7)
); (2) menggantiann
denganan
; (3) mengganti[xy]li
dengan[xy]li
; dan (4) menghapus kedua, argumen berlebihan untukgrid
:grid(3,lt=1)
. Bahkan, saya telah mengambil kebebasan mengedit ini dalam (sedang ditinjau).Python 2.7,
214311309 byteIni adalah upaya pertama saya di sini di kode golf, jadi saya yakin ini bisa diperbaiki. Saya ingin tidak menetapkan batasan, tetapi tampaknya matplotlib tidak dapat mendeteksi bahwa saya merencanakan lingkaran di mana saya melakukannya. Tanpa pengaturan xlim () dan ylim () hanya menampilkan dua lingkaran bawah.
Keluaran:
Sunting: Memperbaiki warna perbatasan dan menghapus angka centang. Saya harus mengatakan matplotlib sangat padat, dan tidak terlalu ramah dengan mengubah warna sumbu.
Dicukur 3 byte berkat @DJMcMayhem
Sunting: Lepaskan dua byte dengan mengatur kutu saya sebagai tuple di dalam fungsi set_ticks.
sumber
for s in'xy':exec"x.set_"+s+"ticks(a);"+s+"lim(-.5,2.5);"
. (Saya belum mengujinya, jadi saya tidak positif)Bash + ImageMagick,
233226 karakterOutput sampel:
Bash + ImageMagick, 215 karakter
Pemilik pertanyaan belum menjawab pertanyaan anti-aliasing dan beberapa solusi lain juga memiliki nuansa abu-abu tambahan yang ditambahkan oleh anti-aliasing, jadi untuk saat ini yang lebih pendek ini terlihat juga dapat diterima.
Output sampel:
sumber
Ruby,
144166164148144 bytesKeluaran:
Sunting: Sekarang memiliki gridlines abu-abu.
sumber
d=d+1
memiliki bentuk yang lebih pendek (d+=1
) dan di==1
sini setara dengan>0
. Juga pertimbangkan apa yang terjadi ketika Anda menetapkan c ke Fixnum bukan array :-)[]
seolah-olah array array (read-only, tapi tidak apa-apa di sini).g=[2,13,24]
keg=2,13,24
dan menggantieach
denganmap
.PNG,
105100 byte(yaitu file gambar ini)
Mempertimbangkan bahwa HTML dan bahasa non-pemrograman lainnya diperbolehkan , saya ingin tahu seberapa besar saya bisa bermain golf gambar yang dapat ditampilkan di browser, untuk dijadikan sebagai perbandingan dasar. Hasilnya dikompresi dengan alat open-source optipng (
-o7 -zm1-9 -strip all
) dan pngwolf . Saya juga bereksperimen dengan zopflipng , tetapi hasilnya lebih besar. Alat kompresi sumber tertutup lainnya mungkin dapat mengurangi beberapa byte lagi.Data gambar di base64:
Tampilkan cuplikan kode
Sunting Saya membuat titik-titik menyentuh bagian atas dan bawah sel, untuk menyebabkan lebih banyak pengulangan dalam pola piksel dan dengan demikian meningkatkan rasio kompresi. Tapi jangan khawatir, satu titik hanya mengisi (7 * 9) / (9 * 9) ≈ 78% dari selnya.
PNG non-standar, 88 byte
Seperti yang ditunjukkan oleh @anatolyg , ada beberapa potensi golf dengan menghapus bongkahan IEND (12 byte). Secara teknis, IEND diperlukan oleh standar . Namun, setiap potongan PNG menyertakan informasi ukuran dan checksum sendiri. Karena itu tidak mutlak perlu memiliki penanda akhir. Dan memang, semua browser yang saya uji dapat menampilkan gambar tanpa masalah.
Sayangnya (atau untungnya), gambar non-standar ini ditolak oleh imgur, jadi saya tidak bisa mengunggahnya. Ini adalah pengkodean base64:
Tampilkan cuplikan kode
sumber
PNG
bukan bahasa pemrograman.Oktaf ,
127124 byteDihapus 3 byte berkat Luis.
grid
sudah cukup (bukangrid on
).Output (setelah disimpan):
Perhatikan bahwa output menunjukkan garis kotak abu-abu di jendela plot. Mereka berubah menjadi hitam saat menyimpannya (untuk beberapa alasan).
Ya, itu panjang dan berantakan! Harus melalui banyak modifikasi untuk membuat ini mematuhi spesifikasi.
Penjelasan dan semoga golf datang ...
sumber
'square'
untuk membuatnya persegi pada semua platform.spy([0,1,0;0,0,1;1,1,1],'.k',80),set(gca,'XTick',.5:4,'XTickLabel','','YTick',.5:4,'YTickLabel',''),axis(.5+[0,3,0,3],'square'),grid on
.Memproses,
212198 bytePada dasarnya, kami menggunakan Pemrosesan sederhana untuk menggambar Latar Belakang putih, lalu mengatur transparansi persegi panjang yang digunakan untuk kisi dan menggambar goresannya dalam warna abu-abu. Kami melanjutkan dengan mendefinisikan persegi panjang, mengatur nilai fill lagi untuk mengisi lingkaran hitam dan mendefinisikan lingkaran lima.
Voa!
Anda bisa menambahkan
atau lebih untuk melihat warna pukulan lebih baik.
(Itu Golf-Code pertamaku, kuharap aku melakukan semuanya dengan benar.)
EDIT: Terima kasih kepada Kritixi Lithos! Menghapus baris baru, diubah menjadi int f = 25 dan digunakan -1 di latar belakang (float)
sumber
float f=25;
keint f=25;
dan dengan menggunakanbackground(-1)
alih-alihbackground(255);
Tikz,
193175170 byteBerikut ini hasilnya:
sumber
MATL ,
7469686462 byteCobalah di MATL Online! (Butuh beberapa detik.)
Output dari juru bahasa online:
sumber
Memproses, 134 byte
Terinspirasi oleh @Zep, inilah Pemrosesan satu-liner saya (dan juga kode golf pertama saya):
Terima kasih atas @Kritixi Lithos untuk tips briliannya untuk mencukur beberapa byte!
sumber
for(int i=0,x,y;...
sehingga Anda dapat menjatuhkan byteint
di badan loop. Selain itu,fill(255);
bisa menjadi adilfill(-1);
+20
pengaturan sementara nilai-nilaix
dany
, sehingga Anda dapat mengubahrect
kerect(x+5,y+5,30,30);
danellipse
keellipse(x+20,y+20,23,23);
dan menyimpan dua byte.LaTeX + Tikz, 155 byte
sumber
1/0
pembagian?x
dany
koordinat..5
menjadi adil1
.[step=2]
) untuk menghasilkan grid yang lebih besar. Menyederhanakan koordinat untuk menggambar lingkaran tidak akan menghemat byte yang cukup. (Anda mendapatkan 157 byte jika melakukannya)SmileBASIC, 125 byte
58081 (U + E2E1, yang ada di blok "Area Penggunaan Pribadi") adalah kode karakter untuk simbol lingkaran. Memasukkannya ke dalam string juga akan berhasil, tetapi karena dikodekan sebagai 3 byte di UTF-8, panjangnya akan sama (dan tidak ditampilkan dengan benar di sini).
sumber
C #, 333 byte
Versi Lengkap / Terformat:
Ide itu sederhana, kita membuat objek gambar dari gambar dan menggunakannya untuk membuat gambar menjadi putih semua. Kemudian lilitkan setiap persegi gambar menggambar persegi panjang pembatas. Jika itu adalah salah satu lokasi untuk sebuah titik, kami juga menggambarnya. Terakhir kita menyimpan gambar ke file dan membiarkan windows memutuskan bagaimana membukanya, dalam kasus saya itu terbuka dengan Windows Photo Viewer.
Menggunakan
Process
untuk menunjukkan gambar dan menyimpan ke file jauh lebih pendek daripada membuat formulir windows atau aplikasi WPF karena semua kelas yang berbeda dan bulu ekstra yang diperlukan untuk membuatnya.Keluaran:
sumber
PHP, 221 + 2 byte
Simpan ke file; panggilan di browser. Jika peramban Anda menampilkan omong kosong,
masukkan
header("Content-Type:image-png");
sebelumnyaimagepng($i);
.Titik-titik tidak bulat; itu karena proporsi yang kecil.
kerusakan
Saya pikir itu
0x4c4b40
memenuhi syarat sebagai abu-abu yang diperkirakan. Jika tidak, tambahkan empat byte.sumber
R 313 236 byte
Kode Revisi, sebagian besar berdasarkan komentar dari @ user2390246 menyimpan 77 byte. Sangat menghargai bantuannya.
Juga, ingin menambahkan info ke solusi R yang lebih pendek dengan @mschilli. Ini menunjukkan cara yang elegan untuk mengatasi masalah default grafis R.
Keluaran
Pergi ke nama file "r". Menghilangkan dan ekstensi menyelamatkan saya empat byte. Tapi kemudian saya harus mengedit ekstensi file kembali ke "bmp" untuk mendapatkannya untuk diunggah. Jadi mungkin saya seharusnya tidak mendapatkan kredit untuk empat byte itu.
Komentar
Saya berpikir dalam hati, "Grafik itu tidak lain adalah grafik sederhana dengan lima titik. Seharusnya masalah sederhana untuk diimplementasikan dalam bahasa dengan kemampuan grafik data yang kuat. Mari kita coba dalam R." Tapi kemudian saya harus menghabiskan pada urutan 80% dari byte hanya bekerja di sekitar standar grafis R.
Agak alat yang salah untuk pekerjaan itu ....
Saya tidak dapat menemukan cara yang kurang verbose untuk menjamin ukuran dan aspek rasio grafik daripada dengan memanggil konstruktor bmp dan kemudian dev.off (). Kombinasi tersebut menyumbang 25 byte. Jika sesi R Anda diatur dengan benar, Anda mungkin mendapatkan grafik yang terlihat lebih atau kurang benar tanpa menghabiskan byte itu, tetapi itu tidak dapat diandalkan atau konsisten.
sumber
b
sama sekali, cukup masukkan dua vektor yang tidak disebutkan namanya langsung ke dalamplot
fungsi. Gunakanc(l,3)
untukxaxp
danyaxp
. Anda bisa menggunakanF
untuk false, tidak perlu mendefinisikannya. Dan tentukan fungsi barua(x,...)
yang memanggilaxis(x)
tetapi memiliki nilai default untuk label, tck, dll, sehingga Anda tidak perlu menentukan semuanya dua kali.axes=F
daripadaxaxt='n',yaxt='n'
. Dan Anda lupa menggunakan.5
ketika mendefinisikanl
meskipun Anda memang menggunakan trik itu nanti..5
itu?.bmp
ekstensi file, Anda mungkin cukup beri nama file tersebutr
.TI-BASIC,
218140137 byteCatatan: jumlah byte ini sedikit meningkat. Program ini hanya menggunakan 85 token, tetapi disimpan dalam 137 byte. Juga, jika Anda menggunakan kalkulator non-warna, Anda dapat menyimpan 4 token lain karena Anda tidak harus menentukan warna (yang merupakan warna biru secara default), tetapi saya tidak tahu apakah layarnya cukup besar untuk tantangan ini karena saya tidak memilikinya.
prgmHACKER (138 byte, 86 token):
Untuk tampilan yang tepat, program ini mengharuskan Xmin = Ymin = 0, Xmax = Ymax = 3, Xscl = Yscl = 1. dX juga perlu diatur dengan benar, tetapi kalkulator melakukan itu untuk Anda ketika Anda mengatur variabel jendela lainnya. Saya tidak bisa melihat berapa banyak ruang yang digunakan variabel-variabel ini dalam RAM.
Selanjutnya, pengaturan format harus {RectGC, CoordOff, GridLine, GridColor: MEDGRAY, Axes: OFF, ExprOff, BorderColor: 1, Background: OFF} tetapi ini adalah nilai yang di-toggle dan tidak menggunakan ruang tambahan tergantung pada pengaturan.
sumber
{0,1,2,1,2}
dan{0,0,0,2,1}
kemudian menambahkan0.5
ke setiap item.L1
danL2
keL₁
danL₂
, karena Anda sudah menggunakannya. Saya pikir Anda dapat menghapus}
, danL₁(I)+.5→A
=>.5+L₁(I
danL₂(I)+.5→B
=>.5+L₂(I→B
.R,
119114111 byte(Terima kasih kepada @JayCe karena telah menyelamatkan saya 3 byte)
Tidak lebih pendek dari solusi R lainnya , tetapi pendekatan yang sama sekali berbeda:
Menggunakan tata letak di mana 4 plot pertama adalah sel-sel kosong, dan 5 lainnya yang memiliki titik-titik di dalamnya.
sumber
Excel VBA, 180 byte
Fungsi jendela langsung VBE anonim yang tidak mengambil input dan output ke objek lembar kerja default (
Sheet1
).Versi yang dikomentari
Keluaran
-6 byte untuk menggunakan
[{21,32,13,23,33}]
lebih dariSplit("21 32 13 23 33")
-2 byte untuk menggunakan
Mid(s,2)
lebih dariRight(s,1)
-3 byte untuk menggunakan
(s\10)
lebih dariLeft(s,1)
sumber
Oktaf
10794103 byteatau
kedua solusi adalah 103 byte.
sumber
line([x1,x2],y)
harus Anda lakukanline([x1,x2],[y,y])
Apple Swift (iOS - CoreGraphics / QuartzCore) - 832 Bytes
Saya menggambar bentuk seluruhnya menggunakan Quartz untuk perangkat Apple iOS. Sayangnya ini bukan bahasa mindful ukuran khusus sehingga hasilnya cukup besar, tapi ini sekecil yang saya bisa.
Versi yang lebih mudah dibaca untuk siapa saja yang tertarik:
Ini adalah output yang dihasilkan di Simulator iOS:
sumber
Ruby with Shoes, 118 karakter
Bit pengecekan yang dipinjam dari RJHunter 's komentar yang dibuat pada Mark Thomas ' s solusi Ruby .
Output sampel:
sumber
SVG + HTML,
146138135133 byteBerkat parser HTML yang lunak,
xmlns="http://www.w3.org/2000/svg"
deklarasi dapat dihilangkan, serta kutipan atribut dan tag penutup. Versi ini membahas beberapa masalah dari solusi HTML lainnya:Sunting Dicukur 8 byte dengan mengeksploitasi fakta bahwa subpath tidak perlu ditutup untuk diisi .
Sunting Menurut tata bahasa svg , tidak perlu memisahkan non-digit dengan koma (
.5,.5
). Saya juga mengabaikan isian eksplisit, sehingga saya dapat mengubah arah undian dari satu baris dari negatif ke positif, menghemat tanda hubung. Dan terakhir, saya menyesuaikan penghitungan untuk tidak menyertakan baris baru, maaf untuk kesalahan pemula ini.Sunting Belajar dari jawaban lain tentang codegolf, saya telah mengganti final
9 />
dengan9>
. Ini berfungsi baik di semua browser yang diuji.sumber
Python 3 + PyGame, 238 Bytes
Konstanta yang tampaknya sewenang-wenang berasal dari saya mencoba membuat gambar sebesar mungkin tanpa mengorbankan byte.
Dengan karakter yang tidak dicetak, 229 Bytes
Saya mengganti daftar dengan byte literal, yang menyimpan banyak karakter, tetapi karakter yang tidak dicetak tidak dapat ditampilkan dengan benar di sini. Saya mengganti karakter non-cetak dengan ekuivalen grafisnya U + 2400-U + 2421 untuk keperluan tampilan.
sumber