Dalam kontes ini Anda harus menulis sebuah program, yang menerima gambar piksel hitam dan putih, dan mencoba mengubahnya, sehingga bentuk putih membentuk domain bintang , dengan sesedikit mungkin perubahan.
Perubahan yang diizinkan adalah mengubah piksel putih menjadi piksel hitam dan mengubah piksel hitam menjadi piksel putih.
Output harus lagi terdiri dari gambar yang sama tetapi kali ini dengan semua perubahan dan dengan tanda tengah. Pixel yang diubah dari putih ke hitam harus ditampilkan dalam warna biru, yang diubah dari hitam menjadi putih harus ditampilkan dalam warna kuning, dan setidaknya satu piksel tengah harus ditampilkan dalam warna merah. (Warna yang tepat terserah Anda.) Program harus melampaui gambar yang ditentukan serta jumlah total perubahan yang dibuat.
Definisi
Domain Bintang
Himpunan piksel putih gambar mewakili domain bintang jika (dan hanya jika) ada (setidaknya) satu piksel tengah . The pusat pixel adalah salah satu piksel putih yang dapat conneced oleh garis lurus untuk semua piksel putih lainnya seperti garis-satunya melintasi piksel putih. (Karena itu piksel tengah tidak selalu unik.)
Garis lurus antara dua piksel
Diberi dua piksel (awal dan akhir, keduanya berwarna merah pada ilustrasi di bawah), garis lurus antara dua piksel terdiri dari semua piksel, yang menyentuh garis (matematis, kuning pada ilustrasi di bawah) yang mengarah dari tengah yang pertama pixel ke tengah pixel terakhir. Sebuah piksel tidak menyentuh garis jika hanya menyentuhnya di sudut, jadi untuk piksel yang termasuk dalam garis piksel, garis (matematis, kuning) harus melewati piksel yang dimaksud dengan panjang yang tidak nol. (Jika hanya menyentuh titik sudut ini dianggap sebagai panjang nol). Perhatikan contoh-contoh berikut:
Contoh
Gambar pertama harus mewakili contoh 'input' testcase dan dua gambar lainnya mewakili dua kemungkinan output yang valid untuk contoh yang diberikan:
Area kuning (sebelumnya hitam) juga dihitung sebagai domain 'putih', sedangkan area biru (sebelumnya putih) dihitung sebagai bagian 'hitam' di luar domain, dan titik merah setiap kali mewakili satu kemungkinan piksel tengah.
Uji Kasus
Kasus uji berikut adalah png dengan ukuran masing-masing 256 x 256 piksel.
Mencetak gol
Silakan jalankan program Anda dengan case uji berikut dan sertakan output (gambar / jumlah perubahan) dalam jawaban Anda. Saya akan membuat leaderboard untuk setiap test case. Skor Anda akan menjadi jumlah dari setiap peringkat di leaderboard - semakin rendah skor semakin baik. Celah standar berlaku. Tidak diperbolehkan membuat program mengenali kasus uji tersebut dan menjalankan kasus khusus untuk mereka. (Tidak diperbolehkan untuk melakukan precompute dan menyimpan piksel tengah yang optimal untuk setiap kasus uji tersebut.) Program harus bekerja untuk gambar apa pun.
Papan peringkat
Name | Score | 1 - rk | 2 - rk | 3 - rk | 4 - rk | 5 - rk | 5 - rk | Total Changes
------------+-------+------------+------------+------------+------------+------------+------------+--------------
Maltysen | 11 | 28688 - 2 | 24208 - 2 | 24248 - 1 | 7103 - 2 | 11097 - 2 | 13019 - 2 | 108363
TheBestOne | 7 | 0 - 1 | 13698 - 1 | 24269 - 2 | 103 - 1 | 5344 - 1 | 4456 - 1 | 47867
Jawaban:
Java 8, 47.867 perubahan total.
Menggunakan rata-rata gambar sebagai titik tengah. Ini kemudian menarik semua sinar yang mungkin ke tengah dan memberinya radius terbaik untuk warna. Kemudian warna semua poin tidak valid hitam.
Hasil
Gambar 1 - 0 perubahan, Gambar 2 - 13.698 perubahan
Gambar 3 - 24.269 perubahan, Gambar 4 - 103 perubahan
Gambar 5 - 5.344 perubahan, Gambar 6 - 4.456 perubahan
Tanpa piksel yang tidak valid dihapus, 42.782 mengubah total
Piksel hijau adalah lapisan pertama piksel yang tidak valid.
Gambar 1 - 0 perubahan, Gambar 2- 9.889 perubahan
Gambar 3 - 24.268 perubahan, Gambar 4 - 103 perubahan
Gambar 5 - 4,471 perubahan, Gambar 6- 4,050 perubahan
Semua piksel putih di semua gambar dapat memiliki garis yang diambil dari piksel tengah jika garis tidak harus berasal / berakhir di tengah, melainkan bagian mana pun pada piksel.
args[0]
berisi nama file input.args[1]
berisi nama file output.Mencetak ke
stdout
sejumlah perubahan.sumber
Python - PIL -
216.228108.363 perubahan totalWhoo! Potong menjadi dua terima kasih ke @AJMansfield! Algoritma ini melompati semua yang mengkhawatirkan dengan menghitung garis dan optimasi dan apa yang tidak.
Itu hanya mengubah semua putih menjadi hitam kecuali satu. Jika tidak ada putih, itu membuat satu hitam menjadi putih.Itu memeriksa apakah ada lebih banyak putih atau hitam dan mengubah setiap satu dari jenis lain untuk itu kecuali satu. Jika tidak ada hitam itu menjadikan (0, 0) pusat.Hasil
Gambar 1 - 28688 perubahan, Gambar 2 - 24208 perubahan
Gambar 3 - 24248 perubahan, Gambar 4 - 7103 perubahan
Gambar 5 - 11097 perubahan, Gambar 6 - 13019 perubahan
Mengambil nama file dari raw_input dan menulis ke out.png dan mencetak sejumlah perubahan.
sumber