Ini musim dingin, dan waktu tahun telah datang untuk mulai menjadi dingin (dan untuk jilbab warna-warni yang aneh untuk mulai muncul ... segera). Mari kita menulis beberapa kode untuk membuat gambar avatar dan gambar lain yang membeku, agar sesuai dengan temanya!
Memasukkan
Input untuk pengajuan tantangan ini harus berupa gambar (gambar untuk dibekukan) dan angka (ambang, yang akan dijelaskan nanti).
Anda dapat memasukkan gambar dengan cara apa pun bahasa Anda mendukungnya (jalur file atau URL sebagai argumen, mengambilnya dari clipboard, menyeret dan menjatuhkan gambar, dll.) Dan dalam format apa pun yang tercantum di sini yang mengekspresikan warna dalam RGB (Anda dapat mendukung / membutuhkan RGBA sebagai gantinya jika Anda inginkan, tetapi ini bukan keharusan).
Anda dapat memasukkan nomor dengan cara apa pun yang Anda inginkan (argumen baris perintah, STDIN, dialog input, dll.), Dengan pengecualian hardcoding ke dalam program Anda (mis. n=10
). Jika Anda menggunakan jalur file / URL untuk gambar, itu harus dimasukkan dengan cara ini juga.
Keluaran
Program harus memproses gambar sesuai dengan deskripsi di bawah ini dan kemudian menampilkannya dengan cara apa pun yang Anda inginkan (ke file, menunjukkannya di layar, meletakkannya di clipboard, dll.).
Deskripsi
Pengajuan harus memproses gambar dengan tiga langkah berikut. n
mengacu pada nomor yang diterima program Anda sebagai input bersama dengan gambar.
Oleskan blur radius
n
ke gambar masukan dengan mengganti R setiap pixel ini, G, dan nilai-nilai B dengan rata-rata R, G, dan nilai-nilai B dari semua piksel dalam jarak Manhattan darin
piksel, mengabaikan semua out-of-batas koordinat. (Yaitu semua piksel dengan jumlah selisih X dan selisih Y kurang dari atau sama dengann
.)(catatan: Saya menggunakan blur Gaussian untuk gambar di atas karena ada fungsi bawaan yang nyaman untuk itu, sehingga gambar Anda mungkin terlihat sedikit berbeda.)
Atur setiap piksel ke piksel acak dalam jarak
n/2
piksel ("jarak" didefinisikan dengan cara yang sama seperti pada langkah sebelumnya).Ini harus dilakukan dengan mengulang gambar dan mengatur setiap piksel ke piksel acak dalam rentang ini, sehingga beberapa piksel mungkin hilang seluruhnya dan beberapa mungkin akan diduplikasi.
Semua perubahan harus berlaku secara bersamaan. Dengan kata lain, gunakan nilai-nilai lama piksel (setelah langkah 1 tetapi sebelum langkah ini), bukan nilai baru setelah mengaturnya ke piksel acak.
Lipat gandakan nilai "biru" RGB dari setiap piksel dengan 1,5, membatasi pada 255 (atau apa pun nilai maksimum untuk pita piksel) dan membulatkan ke bawah.
Aturan
Anda dapat menggunakan pustaka gambar / fungsi terkait pemrosesan gambar yang ada dalam bahasa Anda; namun, Anda tidak dapat menggunakan fungsi apa pun yang melakukan salah satu dari tiga tugas utama yang disebutkan dalam deskripsi. Misalnya, Anda tidak dapat menggunakan
blur
fungsi, tetapigetPixel
fungsi itu baik-baik saja.Ini adalah kode-golf , jadi kode terpendek dalam byte menang!
sumber
dx <= n && dy <= n
adalah representasi jarak Manhattan yang akurat, bukan?Jawaban:
Python 2 - 326
339 358Mengambil input dari pengguna. File pertama, lalu
n
.Ini mungkin bisa bermain golf lebih banyak: P Terima kasih kepada @ SP3000 untuk ide golf!
Input sampel: (Windows)
Sunting : Bug diperbaiki di mana biru sedang diperbanyak (Martin dengan n = 20 bukan lagi sungai; _;)
Martin dengan n = 2:
Martin dengan n = 10:
Martin dengan n = 20:
sumber
Python 2 - 617 Bytes
EDIT: bermain golf beberapa, sepertinya FryAmTheEggMan telah mengalahkan saya :)
sumber
Java - 1009 byte
eh, saya pikir saya bisa melakukan lebih baik dari ini ...
Martin dengan n = 5:
n = 20:
Saya dengan 10:
sumber
k&0xFF00
? Selain itu, tidak bisa Anda gunakan255
di tempat0xFF
?C, 429 (391 + 38 untuk mendefinisikan flag)
Format input:
pam
file tanpa komentar atau spasi kosong di header, konten diteruskan melalui STDIN.n
diperlukan argumen (bisa berupa apa saja).Format output:
pam
file dalam STDOUT.Untuk mengkompilasi:
-Wl,--stack,33554432
meningkatkan ukuran tumpukan; ini dapat diubah atau dihapus, tergantung pada ukuran gambar yang sedang diproses (program membutuhkan ukuran tumpukan lebih besar dari dua kali jumlah piksel kali 4).-funsigned-char
memiliki penggunaan gccunsigned char
alih-alihsigned char
untukchar
. Standar C memungkinkan untuk salah satu dari opsi ini, dan opsi ini hanya diperlukan di sini karena penggunaan gccsigned char
secara default.Untuk menjalankan (n = 5):
Catatan: Jika kompilasi pada Windows,
stdio.h
,fcntl.h
danio.h
harus disertakan, dan kode ditambahkan ke awal berikutmain()
agar program untuk membaca / menulis ke STDIN / STDOUT sebagai biner, tidak teks, sungai (ini tidak relevan di Linux, tapi Penggunaan Windows\r\n
alih-alih\n
untuk stream teks).Versi yang dikomentari
Martin dengan n = 10:
Martin dengan n = 20:
Martin dengan n = 100:
sumber
R, 440 karakter
Dengan jeda baris untuk keterbacaan:
Input sampel:
f(2,"avatar.png")
Hasil dengan n = 2
... dengan n = 10
... dengan n = 20
sumber