Memasukkan
Input Anda dalam tantangan ini adalah daftar pasangan integer. Mereka mewakili sudut barat daya kotak unit di pesawat, dan daftar mewakili penyatuan mereka sebagai bagian dari pesawat. Misalnya, daftarnya
[(0,0),(1,0),(0,1),(1,1),(2,1),(1,2),(2,2)]
mewakili set berwarna merah dalam gambar ini:
Keluaran
Output Yor adalah daftar quadruple integer, yang mewakili himpunan bagian persegi panjang dari pesawat. Secara lebih eksplisit, sebuah quadruple (x,y,w,h)
menandakan persegi panjang lebar w > 0
dan tinggi h > 0
yang sudut barat dayanya berada (x,y)
. Persegi panjang harus membentuk penutup wilayah input yang tepat, dalam arti bahwa masing-masing unit kuadrat adalah subset dari beberapa persegi panjang, masing-masing persegi panjang adalah subset dari wilayah tersebut, dan dua persegi panjang mungkin tumpang tindih hanya pada batasnya. Untuk melarang solusi sepele, penutup harus tidak mengandung dua persegi panjang yang dapat digabung menjadi persegi panjang yang lebih besar.
Misalnya, daftarnya
[(0,0,2,1),(0,1,3,1),(1,2,2,1)]
mewakili perlindungan hukum
dari wilayah di atas, sedangkan penutup diberikan oleh
[(0,0,2,2),(2,1,1,1),(1,2,1,1),(2,2,1,1)]
adalah ilegal, karena kuadrat 1-by-1 yang berdekatan dapat digabungkan:
Aturan
Anda dapat memberikan program atau fungsi lengkap. Pemformatan input dan output yang akurat tidak penting, masuk akal. Hitungan byte terpendek menang, dan celah standar tidak diizinkan. Anda disarankan untuk memberikan penjelasan tentang algoritma Anda, dan beberapa contoh hasil.
Uji Kasus
Wilayah berbentuk U:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(2,0),(2,1),(3,0),(3,1),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5)]
Segitiga besar:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(0,9),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(2,0),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(3,0),(3,1),(3,2),(3,3),(3,4),(3,5),(3,6),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(5,0),(5,1),(5,2),(5,3),(5,4),(6,0),(6,1),(6,2),(6,3),(7,0),(7,1),(7,2),(8,0),(8,1),(9,0)]
Kotak dengan lubang:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(1,9),(2,0),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(2,8),(2,9),(3,0),(3,1),(3,2),(3,4),(3,5),(3,6),(3,7),(3,8),(3,9),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(4,6),(4,7),(4,8),(4,9),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5),(5,7),(5,8),(5,9),(6,1),(6,2),(6,3),(6,5),(6,6),(6,7),(6,8),(6,9),(7,0),(7,1),(7,2),(7,3),(7,4),(7,5),(7,6),(7,7),(7,8),(7,9),(8,0),(8,1),(8,2),(8,3),(8,4),(8,5),(8,6),(8,7),(8,8),(8,9),(9,0),(9,1),(9,2),(9,3),(9,4),(9,5),(9,6),(9,7),(9,8),(9,9)]
Wilayah yang terputus:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(1,0),(1,1),(1,2),(1,3),(1,4),(1,6),(1,7),(1,8),(1,9),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(2,8),(2,9),(4,0),(4,1),(4,2),(4,4),(4,5),(4,6),(4,7),(4,8),(4,9),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5),(5,6),(5,7),(5,8),(5,9),(6,0),(6,1),(6,2),(6,4),(6,5),(6,6),(6,7),(6,8),(6,9),(8,0),(8,1),(8,2),(8,3),(8,4),(8,5),(8,6),(8,7),(8,8),(8,9),(9,0),(9,1),(9,2),(9,3),(9,7),(9,8),(9,9),(10,0),(10,1),(10,2),(10,3),(10,4),(10,5),(10,6),(10,7),(10,8),(10,9)]
Penguji
Gunakan ini program Python 2 untuk memverifikasi solusi Anda. Dibutuhkan dari STDIN daftar tupel (input) dan daftar empat kali lipat (output Anda), dipisahkan oleh koma.
Saya juga menulis ini program Python 2 untuk menghasilkan gambar, dan Anda dapat menggunakannya juga. Dibutuhkan dari STDIN daftar tupel atau empat kali lipat, dan menghasilkan file bernama out.png
. Ini membutuhkan perpustakaan PIL. Anda dapat mengubah ukuran sel kisi dan lebar garis sandang juga, jika Anda mau.