Tugas
Tulis sebuah program atau fungsi yang mengambil gambar lebar w
dan tinggi h
, dan dua bilangan bulat a <= w/2
dan b <= h/2
, dan menampilkan representasi seni gambar ascii, dengan dimensi a
x b
.
Seni ascii harus dihasilkan melalui langkah-langkah berikut (atau proses lain dengan output yang sama):
Mengubah ukuran
w
xh
gambar untuk2a
x2b
. Warna piksel(x, y)
dalam gambar yang diubah ukurannya harus sama dengan rata-rata warna semua piksel dari gambar asli di dalam persegi panjang dengan sudut-sudut berikut:(floor[x * w/2a], floor[y * h/2b]) (ceil[(x+1) * w/2a], ceil[(y+1) * h/2b])
Gambar yang diubah ukurannya harus dideaturasi dengan mengambil rata-rata komponen warna merah, hijau, dan biru, dan mengatur setiap komponen dengan rata-rata ini.
Karakter harus dikeluarkan untuk setiap blok 2x2 piksel, mengikuti aturan di bawah ini:
- Biarkan
e = 3 - floor[color/64]
, di mana warna merujuk ke komponen merah dari warna piksel kiri atas (dalam kisaran 0..255). Biarkanf
,,g
danh
lihat nilai ini, tetapi masing-masing untuk piksel kanan atas, kiri bawah, dan kanan bawah. - Membiarkan
z
menjadi rata-ratae
,f
,g
,h
. - Keluarkan karakter yang sesuai dengan yang berikut ini (putih mewakili piksel di mana
3 - floor[color/64]
nol, dan abu-abu mewakili bukan nol). - = Keluarkan spasi (
)
- atau = Keluaran
"
jikae (or f) >= 2
dan'
sebaliknya. - atau = Keluaran
,
jikag (or h) >= 2
dan.
sebaliknya. - atau = Output
-
- atau = Output
;
- = Keluaran
\
- = Keluaran
/
- = Keluaran
J
- = Keluaran
L
- = Keluaran
7
- = Keluaran
P
-
z = 1
: output*
.z = 2
: outputC
.z = 3
: output#
.
- Biarkan
Catatan lain: Semua rata-rata yang diambil dalam langkah-langkah di atas harus menggunakan pembagian integer (yaitu pembulatan ke 0).
Anda dapat menggunakan perpustakaan untuk membaca gambar, tetapi perpustakaan mungkin tidak digunakan untuk langkah-langkah mengubah ukuran dan desaturasi.
Memasukkan
Program Anda akan mengambil tiga bagian data:
- Sebuah gambar. Gambar ini mungkin dalam format apa pun pilihan Anda (mis. PNG, PPM)
- Lebar seni ascii (dalam jumlah karakter)
- Ketinggian seni ascii (dalam jumlah karakter)
Input dapat dibaca melalui STDIN, diteruskan sebagai argumen baris perintah, disimpan sebagai variabel, dll.
Keluaran
Program Anda akan menampilkan seni ascii yang dihasilkan dari gambar dan melalui proses yang dijelaskan di atas. Setiap baris harus memiliki lebar yang sama (lebar dilewatkan sebagai input), dan tidak ada spasi tambahan yang dapat ditambahkan atau dihapus. Baris terakhir mungkin memiliki baris tambahan, tetapi ini tidak wajib. Garis kosong (garis dengan spasi saja) tidak boleh dihilangkan.
Contohnya
Semua gambar diambil dari Wikipedia dan dirilis ke domain publik. Program Anda diharapkan bekerja untuk semua gambar dan input yang valid.
Lebar = 52, Tinggi = 25:
.-- *** - ----. - ********** L .-- .-- 7 ---- P- .J ****************. . ********* \. , ****************** L \ J ********** '. - ********************. J *********** L / J *********************; ./*************.L ; ************************ **************; 7; . ********************** '. *************** ;; * ; **********************; ***************; J *. *************************** P ******** '**; C ********************* C ******* P; *******. **; C ********************** J ***************; **; C *********************; ****************. **; ********************** '*************** P; ** J ********************* P *************** / *** . ********************** 7 ************* 'J **; ; ******************** C "'P *********** PJ ***' "7 ****************** C" '********** P. ** C; '* C *************'; ********* - J ** CP '* C ********** P 7 ** 7 ** P / - **** P - * CCCCC * P- '7 ******** P' '---' --- '
Lebar: 70, Tinggi: 3:
---------------------------. .---------------- J ***************************** P-J ***************** *** / J **; ---------- ********* P --------- '-------------------- - '
Lebar: 50, Tinggi: 25:
.J --- .J * P --- J * L--. J *** 'L -J *********** - J ****; **************** L ; ***** '.J ******************** J **** 7 ************************ P ** CC *; . ********* LJ *********** P- ** C * P 'J ********************** - 7 * C * L **********************; J * C **; **********************; JC ** C **. ; ; ******** CCC * C ** CCCC ** "7 ***** L. 7 ***** CCCCCC **** CC ** ' - *****. -J - ** C * C * CC ****** CC * ' ; ** CC ***; '** CCC ***** CCCC *; '- **** - - *** CCCCC *** - '------'
Lebar: 26, Tinggi: 17:
-, L J - ** L .C # J '; * PL, C # " .PP 7. JC7P ;; * J ;; , C'C; J; CC; L C "# * L 7-P; *; PC 7CL *** J * PC '# '7 # C * C # P'; P JC # C- J # CCC # L .JC # CJCC ## C; ; # - - #, CCC # CCCCCCCC ; * .- -.C; ; CCCCCCCCCCC ; **** J ** L; CCCCCCCCCCCC ; *******; 'CCCCCCCCCCCPP '*******' CCCCCCCCCCC ' '* P-7 *' "CCCCP '- '---
Ini kode-golf , jadi jawaban terpendek menang.
sumber
Jawaban:
JavaScript
752, 701Contoh:
Jeruk lemon:
Kentang:
Tux:
sumber
IDL 8.3,
588597588 byteSaya mendapatkan nilai yang sedikit berbeda dari Anda, saya tidak yakin mengapa ... Saya melakukan pembagian integer untuk semuanya. Tetapi jika tidak berfungsi dengan baik ... apakah hasil ini dapat diterima?Jauh lebih baik sekarang, meskipun masih belum identik untuk beberapa alasan.Kasus uji:
sumber