Tantangan ini didasarkan pada game Layerz.
Diberikan, pada stdin atau sebagai argumen fungsi, array sel 2D persegi panjang di mana setiap sel berisi salah satu kosong (Anda dapat memilih untuk menggunakan 0s daripada kosong tanpa penalti), 1, 2, 3, atau 4 ; temukan cara untuk membaginya menjadi wilayah yang valid (seperti yang didefinisikan di bawah) sehingga setiap sel yang tidak kosong dikandung oleh tepat satu wilayah. Kemudian, keluarkan solusi yang ditemukan dalam format apa pun yang masuk akal. Jika tidak ada solusi, baik berhenti tanpa menghasilkan output atau output nilai falsey tunggal kemudian berhenti.
Salah satu dari yang berikut ini merupakan wilayah yang valid:
- Sel tunggal yang mengandung 1
- Sel yang mengandung 2 dan persis salah satu tetangganya yang tidak kosong
- Sel yang mengandung 3 dan tepat dua tetangganya yang tidak kosong ortogonal
- Sebuah sel yang mengandung 4 dan tepatnya tiga tetangganya yang tidak kosong ortogonal
Ini adalah kode-golf , jadi jawaban tersingkat yang valid, dalam byte, menang.
Beberapa test case:
1. Yang agak sepele:
Dan ini solusinya, dengan masing-masing daerah dengan warna yang berbeda:
2. Yang lebih menarik
Yang ini memiliki lebih dari satu solusi, tetapi inilah salah satunya:
3. Yang lebih kecil, berisi yang kosong, yang tidak memiliki solusi (tergantung pada apakah Anda menggunakan salah satu dari keduanya untuk "menangkap" ketiganya, atau tiga untuk mengambil dua dari keduanya, Anda mungkin pergi dengan sepasang dua-dua atau dua yang tidak berdekatan (dan karena itu tidak dapat dikelompokkan) sendiri:
Karena kisi ini tidak memiliki solusi, program Anda harus berhenti tanpa menghasilkan keluaran apa pun ketika diberi kisi ini.
4. Yang ini (dengan 2 sel teratas bergeser ke kiri) memang memiliki solusi:
Larutan:
(Kanan bawah 2 digunakan untuk "menangkap" 3)
5. Karena kami membutuhkan test case dengan merangkak:
Satu solusi:
4
s jika itu adalah input yang valid.