Slimes adalah musuh berbentuk kubus di Minecraft yang membobol beberapa versi yang lebih kecil dari dirinya ketika terbunuh. Untuk keperluan tantangan ini, kami akan menggambarkannya sebagai gambar 8 × 8 piksel dengan 3 warna:
Warna RGB yang tepat adalah:
0, 0, 0
untuk mata dan mulut110, 170, 90
untuk pusat, hijau gelap116, 196, 96
untuk bagian luar, hijau muda
Tantangan
Tulis sebuah program atau fungsi yang mengambil dalam bilangan bulat positif N dan menghasilkan gambar ukuran N slimes dikemas ke dalam persegi panjang. Dari kiri ke kanan, gambar harus mengikuti pola memiliki:
- Tumpukan 2 (N-1) 8 × 8 slimes.
- Tumpukan 2 (N-2) 16 × 16 slimes.
- Tumpukan 2 (N-3) 32 × 32 slimes.
- Demikian seterusnya hingga stack hanya berisi satu slime.
Gambar slime yang lebih besar dari versi 8 × 8 ( ) dihasilkan oleh upampling tetangga terdekat (yaitu hanya menggandakan semua piksel). Perhatikan bahwa Anda harus menggunakan desain lendir yang tepat dan warna yang diberikan di sini.
Gambar akhir akan berisi 2 N -1 slimes dan lebar 2 (N + 3) -8 piksel dan tinggi 2 (N + 2) piksel.
Gambar dapat berupa output dalam format file gambar apa pun, disimpan ke file atau dicetak / dikembalikan sebagai aliran data mentah, atau langsung ditampilkan selama runtime.
Kode terpendek dalam byte menang.
Contohnya
Program Anda harus menghasilkan hasil yang tepat ini.
N = 1:
N = 2:
N = 3:
N = 4:
N = 5:
N = 6:
N yang lebih besar seharusnya bekerja dengan baik.
sumber
Jawaban:
MATL ,
777674 byteKode berfungsi dalam komit ini , yang lebih awal dari tantangan.
Anda dapat mencobanya di MATL online . Penerjemah ini masih eksperimental. Jika tidak berhasil, coba segarkan halaman dan tekan "Run" lagi.
Berikut ini contoh yang dijalankan dalam penerjemah offline:
Penjelasan
sumber
11
dan berfungsi. Untuk11
hasilnya adalah gambar 8192 × 16376. Untuk12
itu akan menjadi 16384 × 32760 (536 megapiksel), membutuhkan lebih dari 4 GB RAM, yang lebih dari yang bisa ditangani laptop saya.Dyalog APL,
118113 byte('P3',⌽∘⍴,255,∊)(3↑(116 196 96)(110 170 90))[⊃,/i{⊃⍪/⍵⍴⊂⍺⌿⍺/8 8⍴∊22923813097005 926134669613412⊤¨⍨⊂32⍴3}¨⌽i←2*⍳⎕]
asumsi
⎕IO=0
Dari kanan ke kiri:
i←2*⍳⎕
kekuatan 1 2 4 ... 2 n-1i{ }¨⌽i
beralih pada kekuatan (dengan⍺
) dan kekuatan terbalik (⍵
)⊤¨⍨⊂32⍴3
decode masing-masing angka di sebelah kiri sebagai 32 digit ternary8 8⍴∊
ratakan dan bentuk kembali menjadi 8 × 8⍺⌿⍺/
meniru setiap baris dan kolom⍺
kali⍵⍴⊂
ambil⍵
salinan⊃⍪/
dan menumpuknya secara vertikal⊃,/
gabungkan semua hasil secara horizontal3↑(116 196 96)(110 170 90)
warna;3↑
memperpanjang mereka dengan(0 0 0)
[ ]
indeks warna dengan masing-masing elemen matriks; hasilnya adalah matriks RGB('P3',⌽∘⍴,255,∊)
adalah "kereta" - fungsi yang mengembalikan'P3'
diikuti oleh bentuk argumen yang dibalik255
,, dan argumen diratakan.sumber
⎕IO←0
dan hanya menyatakan sebagai syarat, di luar jumlah byte. Banyak sistem APL menggunakannya sebagai default. (Termasuk LOL milikmu)JavaScript (ES7), 326
327byteVersi ES6 Tidak Serigala
Cobalah sendiri.
Satu-satunya perbedaan antara versi ES7 dan ES6 adalah menggunakan
**
bukanMath.pow()
. Anda juga dapat melihat, bagaimana Anda dapat menjalankan fungsi - dalam contoh ini dengann=4
.Hasil
Suntingan
;
Ini sangat lambat dan mungkin membutuhkan waktu untuk angka yang lebih besar 10.
sumber
C, 220 byte
Saya menambahkan baris baru yang tidak berguna untuk dibaca, skor tanpa baris baru ini.
Menentukan fungsi
f(n)
yang menampilkan gambar PPM biasa di stdout.sumber
Mathematica,
267255254225212 byteDisimpan
2942 byte berkat Martin EnderSaran golf diterima, terutama untuk membangun array 8 oleh 8 (oleh 3)
s
. Sayangnya, tidak ada "ArrayResize
" analog untukImageResize
, jadi array perlu dikonversi ke gambar (Image
) sebelum mengubah ukuran, dan kemudian kembali ke array (ImageData
) untuk melakukanJoin
ing.Tidak Terkumpul:
sumber
b=0g
. Untuk menghasilkannyas
mungkin lebih pendek untuk mengkodekan nilai piksel sebagai angka dasar-3 tetapi saya harus mencoba untuk memastikannya. Sementara itu, Anda dapat menyimpan byte dengan tidak mendefinisikanb
,g
,f
,e
,t
sampai Anda membutuhkan mereka, dans
tidak membutuhkan nama sama sekali dan juga tidakc
. Untuk2^(j-1)8
bisa kamu gunakan4*2^j
. Menerapkan semua itu, saya berakhir pada 225 byte: pastebin.com/YnkUwvwVImage
,ImageResize
,ImageData
hal. Bit ini meledakkan array dengan faktor 2: di#&@@{##&@@{#,#}&//@x}
manax
array. Jadi jika Anda menyimpan grid 8x8 awal dalam sebuah variabelx
, dan kemudian lakukanx=#&@@{##&@@{#,#}&//@x}
setelah setiap penggunaan, Anda dapat membuat ubin berturut-turut dengan mudah.#&[##&[#,#]&//@x]
##~Join~2
dan b)f={g,a=##&[G,G,G],a,g}
dan kemudian mengganti setiap kejadian lebih lanjutG,G,G
dengana
juga.Python 2.7:
424412405376357 BytesSaya agak baru dalam bermain golf .... ini dia
ungolfed dan panjang diuji ..
sunting1: dihapus
sys.argv[1]
demiraw_input()
menyimpan pernyataan impor tambahansunting2: impor PIL singkat: dihapus
from Image
ditambahkanPIL.
edit3: Terima kasih @ Sherlock9 untuk enkode heks templat slime
sunting4: tidak perlu def fungsi dan digunakan
input()
sebagai gantinyaraw_input()
sumber
'0000100001111110111211100111111102211220022112200111111000001000'
(array Anda mundur) dikonversi dari basis 3 ke basis 160x2df0777ca228b9c18447a6fb
. Dengan nomor itu, gunakan kode seperti ini[0x2df0777ca228b9c18447a6fb//3**i%3 for i in range(64)]
untuk mendapatkan bilangan bulat Anda dalam urutan yang benar.[0x2df0777ca228b9c18447a6fb/3**i%3for i in range(64)]
mungkin lebih baik.0x2df0777ca228b9c18447a6fb
. Ini sederhana. Sebagai contoh yang lebih sederhana, untuk mendapatkan0
digit ke-301221100
, cukup bagi dengan 30
kali, lalu ambil digit terakhir (menggunakan mod 3) untuk mendapatkan0
. Untuk mengambil digit ke-2, bagi dengan 32
kali, lalu mod 3 untuk mendapatkan1
. Pemahaman daftar hanya dibagi 364
kali untuk mendapatkan array penuh Anda kembali. Jika Anda memiliki pertanyaan lagi, kami dapat mendiskusikannya di obrolan PPCG .R,
378356346334 byteMenyimpan sebagai file png. Diindentasi, dengan umpan garis:
N = 2: N = 3: N = 4:
Beberapa penjelasan:
Inilah matriks yang sedang diplot (0 mewakili hijau muda, 1 hijau tua dan 2 hitam; matriks dimiringkan karena kolom adalah sumbu y dan baris sumbu x):
Setiap panggilan untuk
image
memplot matriks itu (dengan masing-masing bilangan bulat sesuai dengan warna). Untuk N = 4, di sini adalah L (matriks tata letak, setiap nomor unik mewakili satu plot tunggal), w (lebar kolom matriks) dan h (ketinggian baris matriks):sumber