Gambar ini dibuat dengan melapisi 7 persegi panjang dengan warna berbeda di atas satu sama lain:
Persegi hitam dan merah marun tidak terhalang , yaitu, tidak ada persegi panjang lain di atas mereka.
Tulis sebuah program yang mengambil gambar seperti ini dan menghapus persegi panjang tunggal yang terhalang, menghasilkan gambar yang dihasilkan.
Contoh
Jika Anda menjalankan program Anda pada gambar di atas dan terus menjalankannya kembali pada output, itu mungkin berkembang seperti ini.
Jalankan 1 - Hitam dihilangkan (bisa jadi merah marun):
Jalankan 2 - Maroon dihapus (satu-satunya pilihan):
Jalankan 3 - Kuning dihapus (satu-satunya pilihan):
Jalankan 4 - Biru dihapus (bisa jadi hijau):
Run 5 - Hijau dihapus (satu-satunya pilihan):
Run 6 - Brown dihapus (satu-satunya pilihan):
Jalankan 7 - Merah dihapus (hanya pilihan):
Setiap proses tambahan harus menghasilkan gambar putih yang sama.
Semoga Stack Exchange tidak dengan salah mengkompres gambar-gambar ini.
Gambar akan selalu memiliki latar belakang putih dan setiap persegi panjang akan menjadi warna RGB unik yang bukan putih.
Anda dapat mengasumsikan bahwa gambar selalu dapat diartikan sebagai satu set persegi panjang yang tumpang tindih. Khususnya, Anda dapat mengasumsikan bahwa, untuk warna tertentu, piksel dengan warna yang paling dekat dengan bagian atas gambar adalah bagian dari tepi atas persegi panjang warna itu. Hal yang sama berlaku untuk tepi bawah, kiri, dan kanan.
Jadi, misalnya, dalam gambar ini, tepi atas dari persegi panjang merah akan tepat di bawah tepi bawah persegi panjang kuning, karena persegi panjang oranye menutupi tepi atas merah tua:
Pada gambar ini, persegi panjang merah dapat dihapus terlebih dahulu (bersama dengan hitam / merah marun / oranye / abu-abu):
Ketika urutan persegi panjang lebih rendah ambigu, Anda bisa memberi mereka urutan apa pun.
Misalnya, gambar kiri di sini bisa menjadi tengah atau kanan:
Keluaran seharusnya tidak memiliki tumpang tindih paradoks (sehingga membuatnya dengan algoritma pelukis harus dimungkinkan). Jadi dalam gambar ini ( terima kasih user23013 ), itu harus berwarna hijau di bawah persegi panjang oranye:
detil tambahan
- Gambar dan persegi panjang mungkin memiliki dimensi apa saja.
- Persegi panjang dapat menyentuh batas gambar.
- Mungkin ada hingga 256 3 - 1 persegi panjang.
- Jika input seluruhnya putih, output juga harus.
- Anda dapat menggunakan perpustakaan gambar.
- Input harus berupa nama file gambar atau data gambar mentah. Itu bisa berasal dari stdin atau baris perintah.
- Output dapat ditulis ke file gambar yang sama atau yang lain, memuntahkan mentah ke stdout, atau hanya ditampilkan.
- Setiap format file gambar truecolor lossless umum diperbolehkan.
Kiriman dengan byte paling sedikit menang.
sumber
Jawaban:
CJam, 241 byte
(dengan baris baru dihapus.)
Ini menggunakan format file ppm. Contoh penggunaan (menggunakan ImageMagick):
Yah, ini terlalu panjang dan terlalu lambat ... Berjalan sekitar satu menit sebagai contoh.
Saya mengubah ukuran kasus pengujian (dan menambahkan beberapa lainnya) untuk membuat pengujian lebih mudah.
Tampaknya informasi ruang warna hilang sehingga warnanya sedikit berbeda.
sumber
Python,
690651610606594569 byteScript membaca nama gambar dari stdin.
Ini mendeteksi tepi setiap persegi panjang, mengurutkannya dengan jumlah warna berbeda yang dikandungnya (persegi panjang tanpa hambatan hanya berisi 1 warna, dan kemudian muncul di akhir daftar)
Daftar ini digunakan untuk menggambar ulang suatu gambar. Urutan menggambar ulang diputuskan dengan memilih permutasi daftar yang akan menghasilkan gambar output yang memiliki perbedaan pixel paling sedikit dengan input.
sumber
Java - 1483 byte
Saya bukan pegolf kode yang hebat, biarkan itu menjadi jelas; jadi verbositas itu bukan sepenuhnya kesalahan Java ;-) Namun, ini sepertinya tantangan yang sangat menyenangkan. Saya sudah memecahkannya dengan cara yang - saya pikir - sedikit membosankan dan bertele-tele, tapi hei. Ini bekerja, itu (relatif) cepat dan, terutama, itu menyenangkan!
Idenya adalah sebagai berikut: Periksa setiap piksel mulai dari sudut kiri atas sampai ke kanan bawah. Apakah ini piksel putih? Mengabaikan. Apakah ini berwarna? Keren, mari kita catat dan coba tentukan batasannya (kiri atas, kanan atas, kiri bawah, kanan bawah).
Setelah selesai, periksa area masing-masing persegi panjang. Apakah itu mengandung warna yang berbeda dari warna persegi panjang? Kemudian cari tahu apa persegi panjang milik warna itu dan perbarui indeks z persegi panjang yang tumpang tindih dengan 1.
Dan akhirnya, gambar semua persegi panjang sambil memperhitungkan z-index. Ini benar-benar berfungsi seperti z-index yang Anda tahu dari CSS dan hal-hal 3D lainnya. Segi empat dengan indeks-z terendah diambil pertama, indeks-z tertinggi terakhir.
Kode lengkap yang sedikit - dan itu meremehkan ;-) - ditulis lebih jelas, dapat ditemukan di sini: http://pastebin.com/UjxUUXRp
Juga, sekarang saya melihat penyerahan diet, saya bisa membuat beberapa bagian lebih mudah. Tidak perlu menemukan kotak yang warnanya tumpang tindih dengan kotak lain. Aku memang bisa menghitung jumlah warna 'menyerbu'.
sumber