Tulis program yang menggunakan string atau file teks yang baris pertamanya memiliki formulir
width height
dan setiap baris berikutnya memiliki formulir
x y intensity red green blue
dimana:
width
danheight
mungkin bilangan bulat positif.x
dany
mungkin bilangan bulat apa saja.intensity
mungkin bilangan bulat non-negatif.red
,,green
danblue
dapat berupa bilangan bulat dari 0 hingga 255 inklusif.
Anda Program keharusan output truecolor gambar dalam format file gambar lossless umum yang dimensi width
oleh height
. Setiap x y intensity red green blue
garis mewakili bintang atau bola warna-warni yang harus digambar pada gambar. Mungkin ada sejumlah bintang untuk digambar, termasuk 0. Anda dapat menganggap string atau file memiliki baris tambahan.
Algoritma untuk menggambar gambar adalah sebagai berikut, meskipun Anda dapat mengimplementasikannya dengan cara apa pun yang Anda suka asalkan hasilnya identik:
Untuk setiap piksel ( X , Y ) dalam gambar (di mana X adalah 0 di tepi paling kiri dan lebar-1 di tepi paling kanan, dan Y adalah 0 di tepi atas dan tinggi-1 di tepi bawah), saluran warna C ϵ { merah , hijau , biru } (nilai yang disematkan antara 0 hingga 255) diberikan oleh persamaan:
Di mana fungsi dist adalah jarak Euclidean :
Atau jarak Manhattan :
Pilih fungsi jarak mana saja yang Anda inginkan, berdasarkan golf atau estetika.
Setiap baris dalam input selain yang pertama adalah elemen dari set Bintang . Jadi, misalnya, S x mewakili
x
nilai pada salah satu jalur input, dan S C mewakili baikred
,green
ataublue
, tergantung pada channel warna saat ini sedang dihitung.
Contohnya
Contoh A
Jika inputnya
400 150
-10 30 100 255 128 0
output seharusnya
jika Anda menggunakan jarak Euclidean, dan
jika Anda menggunakan jarak Manhattan.
Contoh B
Jika inputnya
200 200
100 100 10 255 255 255
20 20 40 255 0 0
180 20 40 255 255 0
180 180 40 0 255 0
20 180 40 0 0 255
output masing-masing untuk jarak Euclidean dan Manhattan seharusnya
dan .
Contoh C
Jika inputnya
400 400
123 231 10 206 119 85
358 316 27 170 47 99
95 317 3 202 42 78
251 269 17 142 150 153
43 120 3 145 75 61
109 376 6 230 231 52
331 78 21 31 81 126
150 330 21 8 142 23
69 155 11 142 251 199
218 335 7 183 248 241
204 237 13 112 253 34
342 89 18 140 11 123
output seharusnya
jika Anda menggunakan jarak Euclidean, dan
jika Anda menggunakan jarak Manhattan.
Contoh D
Jika inputnya
400 400
123 231 5 206 119 85
358 316 5 170 47 99
95 317 5 202 42 78
251 269 5 142 150 153
43 120 5 145 75 61
109 376 5 230 231 52
331 78 5 31 81 126
150 330 5 8 142 23
69 155 5 142 251 199
218 335 5 183 248 241
204 237 5 112 253 34
342 89 5 140 11 123
output seharusnya
jika Anda menggunakan jarak Euclidean, dan
jika Anda menggunakan jarak Manhattan.
Contoh E
Jika inputnya
100 1
maka outputnya harus selebar 100 pixel dengan tinggi gambar 1 pixel yang benar-benar hitam.
Catatan
- Ambil string input atau nama file teks yang berisi itu dari stdin atau baris perintah, atau Anda dapat menulis fungsi yang mengambil string.
- "Menghasilkan" gambar berarti:
- Menyimpannya ke file dengan nama pilihan Anda.
- Mencetak data file gambar mentah ke stdout.
- Menampilkan gambar, seperti dengan PIL 's
image.show()
.
- Saya tidak akan memeriksa bahwa gambar Anda pixel sempurna (Stack Exchange kehilangan kompresi gambar), tetapi saya akan sangat curiga jika saya secara visual dapat membedakannya.
- Anda dapat menggunakan perpustakaan grafik / gambar.
Kemenangan
Pengajuan terpendek dalam byte menang. Dalam hal ikatan, pengajuan yang paling awal menang.
Bonus Menyenangkan: Berikan input untuk gambar output yang benar-benar spektakuler.
sumber
Jawaban:
Pyth - 46 byte
Ini sangat menyenangkan! Saya akhirnya harus menggunakan fitur I / O gambar Pyth. Apakah jarak euclidean karena golfiness, meskipun manhattan hanyalah perubahan singkat.
Ini hanya loop melalui semua piksel dengan rumus meskipun itu mengembunkan loop piksel menjadi satu loop dan digunakan
divmod
karena Pyth hanya mendukung 3 peta bersarang dan perhitungan mengambil dua (satu untuk RGB dan satu untuk bintang-bintang).Menyimpan gambar sebagai
o.png
. Cukup lambat, lakukan 2 tes pertama dalam <2 mnt, tapi 2 tes lainnya hanya memakan waktu setengah jam.Ada bug diDigabung!.w
mana tidak ada yang memperhatikan karena tidak ada yang menggunakannya;) tetapi saya memasukkan permintaan tarik jadi gunakan garpu saya untuk menguji apakah tidak segera bergabung.Contoh Keluaran
Contoh A
Contoh B
Contoh C
Contoh D
sumber
JavaScript
394344Sunting: banyak kode yang disingkat dengan menerapkan saran mengagumkan wolfhammer .
Uji
Catatan: Tunggu beberapa detik agar cuplikan di bawah ini ditampilkan (butuh ~ 4 detik pada mesin saya).
Tampilkan cuplikan kode
Anda juga dapat menjalankannya di JSFiddle .
Bonus: Gerhana Biru
Anda juga dapat menjalankannya di JSFiddle .
Deskripsi
Ini adalah implementasi kanvas JavaScript + HTML5 langsung: sebuah fungsi yang mengambil argumen string (tanpa spasi / baris baru) dan menampilkan output dalam DOM. Ini menggunakan jarak Euclidean.
Ini kode yang bisa dibaca:
sumber
Java - 627 byte
Java memang salah satu bahasa golf terbaik :)
Dengan menggunakan input di bawah ini, Anda dapat membuat model tata surya kita yang agak realistis (ukuran beberapa planet salah, tetapi jarak di antara mereka harus akurat). Saya mencoba memberikan cincin kepada saturnus, tetapi tidak berhasil ... Sumber
Gambar Full HD , yang tidak terlihat hebat ... Senang jika seseorang dapat memperbaikinya!
sumber
Bash,
147145 byteImageMagick digunakan untuk memanipulasi gambar. Jarak Euclidean digunakan.
sumber
$w\x$h
.o=o.png
.Python 3, 189 byte
Saya tidak tahu siapa pun tentang pegolf ahli, tapi begini saja.
stdin
dan masuk kestdout
dalam format PPM .python3 codegolf_stars_golfed.py < starfield.txt > starfield.pnm
Pertama, jarak Manhattan:
Dan kedua, jarak Euclidean:
Saya bisa menghemat empat byte dengan menggunakan pembagian integer alih-alih
int()
, dan pada kenyataannya itulah yang tampaknya dilakukan gambar asli - Anda hanya dapat melihat beberapa pergoresan di pinggiran gelap cahaya bintang yang tidak ada di bagian yang benar-benar benar. kode. Namun, kode ini mengikuti deskripsi, bukan gambar.Versi yang tidak serigala, dan golf asli saya sebelum banyak optimisasi yang ditunjukkan orang lain atau yang saya temui, ada di inti ini .
EDIT: Saya menyimpan 7 byte dengan memindahkan
for x
danfor y
masuk ke fungsi tunggalprint
(atauo
), tetapi ini menghasilkan file PNM dengan garis yang sangat panjang, yang mungkin atau mungkin tidak menyebabkan beberapa masalah.EDIT 2: Maltysen menyelamatkan saya 20 byte lagi. Terima kasih!
EDIT lagi: Sekarang hanya ada satu
print
,o
alias adalah kewajiban, bukan tabungan. 4 byte lagi.Sunting lagi: Sp3000 menyelamatkan saya 2 byte lebih. Sementara itu, aliasing
map
untukm
tidak menyimpan apa-apa, sehingga dalam kepentingan pembacaan (!) Saya sudah diperluas lagi. Sekarang putaran 2 8 byte yang bagus.Sunting yang terakhir (?): Sekarang dengan dukungan jarak Euclidean - dan dengan menyalahgunakan bilangan kompleks, saya melakukannya dengan jumlah byte yang persis sama!
EDIT, reboot Hollywood: Saran Sp3000 berikutnya menjatuhkan 5 byte.
EDIT, yang bodoh bernama sekuel: 6 byte dipangkas off, berkat saran Maltysen dibuat bahwa saya tidak memahami sampai Sp3000 mengulanginya ... kemudian lagi 8 byte dari
%
penyalahgunaan. Dan berbicara dalam obrolan membuat fenomenal2126 byte. Saya rendah hati.sumber
EOF
s yang dapat Anda gunakaniter()
dengan nilai sentinel: docs.python.org/2/library/functions.html#iter sebagaiiter(raw_input,'')
, juga letakkanw,h,S
di baris yang sama dengan perpanjangan membongkar.EOFError
(dan jadi saya perlutry
blok), karena tidak ada baris kosong di file input dan saya tidak yakin tantangannya memungkinkan saya untuk menambahkan satu. Atau apakah saya melewatkan sesuatu?stdin
itu bukan iterator.C ++, 272 byte
Membutuhkan kompiler C ++ 11 yang lunak (GCC 4.9.2 hanya sedikit tidak disukai), dan png ++ library, yang dibutuhkan sendiri
libpng
. Jarak Manhattan digunakan. Mengambil input aktifstdin
, output ke file bernama "a" di direktori saat ini dalam format PNG.Contoh D:
sumber
PCG
gambar :) (MeskipunPPCG
adalah singkatan pilihan saya;))Python 2,
240232228 byteMenggunakan jarak Manhattan. Ini mungkin akan lebih pendek di Python 3, tapi saya mengacaukan paket Python saya baru-baru ini dan saya mengalami kesulitan menginstal ulang Pillow. PPM mungkin akan lebih pendek, tapi saya suka PIL.
Untuk bersenang-senang, saya mencoba menerapkan algoritme seperti pada ruang warna L * a * b * , berpikir itu akan memberikan campuran warna yang lebih baik (terutama dalam contoh B). Sayangnya, algoritme Calvin memungkinkan saluran melewati nilai maksimalnya, yang membuat gambar tampak sedikit kurang dahsyat daripada yang saya harapkan ...
sumber
Mathematica, 146 byte
Fungsi murni mengambil string. Untuk menjalankannya dalam jumlah waktu yang wajar, ganti
1
in1+#~ManhattanDistance...
dengan1.
; ini memaksa perhitungan numerik alih-alih simbol.Tidak Disatukan:
sumber
Python 2,
287251 byteVersi golf dari kode asli yang saya gunakan untuk menghasilkan gambar. Mungkin bisa bermain golf sedikit lebih banyak (oleh pegolf yang lebih baik daripada saya). Ini adalah fungsi yang mengambil string input penuh. Pengolahan citra dilakukan dengan PIL 's image Modul . Menggunakan jarak Manhattan.
Menggunakan jarak Euclidean adalah 5 byte lebih panjang (256 byte):
Berikut ini adalah rangkaian uji lengkap yang menjalankan contoh A hingga E dari pertanyaan, untuk kedua metrik jarak:
Mereka semua terlihat tidak bisa dibedakan. Yang lebih besar mungkin membutuhkan beberapa detik untuk dijalankan.
sumber
for x in r(I[0]):...for y in r(I[1]):
dengan mengubahnyafor x in r(I[0]*I[1]):
. Anda kemudian dapat mengambil setiap level indentasi turun menjadi 1, dan gantix
denganx/I[1]
dany
dengany%I[1]
.from PIL import Image
kefrom PIL import*
C, 247 byte
Tidak akan menang, tapi saya suka golf di C. Tidak ada perpustakaan gambar eksternal yang digunakan, output ke stdout dalam format PPM. Mengambil input pada stdin. Menggunakan jarak Manhattan untuk bermain golf.
Berikut varian jarak Euclidean (257 byte):
sumber
CJam, 86 byte
Meskipun ini mungkin terlihat agak panjang untuk bahasa golf, saya percaya bahwa dari solusi yang diposting sejauh ini, ini adalah yang terpendek yang tidak menggunakan fungsi output gambar. Ini menghasilkan file PPM dalam bentuk ASCII. Gambar di bawah ini dikonversi dari PPM ke PNG menggunakan GIMP.
Saya tidak merekomendasikan untuk menjalankan kode dalam juru bahasa CJam online. Setidaknya tidak untuk gambar ukuran penuh. Peramban saya terkunci, kemungkinan besar karena penggunaan memori. Ini melengkapi gambar 400x400 di kisaran kedua dengan versi offline.
Penjelasan:
sumber
C # 718 byte
Saya menyadari bahwa c # sangat buruk untuk bermain golf, tapi ini usaha saya 718 byte
Jika ada yang punya saran untuk mempersingkatnya, silakan beri tahu saya.
sumber
Python, 259 byte
Akhirnya selesai! Golf kode pertama yang saya coba, memutuskan untuk menggunakan Python dan pergi dengan jarak Manhattan. Shoutout to Maltysen karena membantu saya dengan iterator, mengurangi ukuran total menjadi hampir setengah!
sumber
k[0]
dank[1]
dalam perhitungan.CJam, 70 byte
Jarak Euclidean, keluaran ASCII PPM. Cobalah online
Seharusnya dimungkinkan untuk memeras beberapa byte lagi, tetapi saya tidak ingin menghabiskan terlalu banyak waktu.
sumber