Setiap programmer tahu bahwa persegi panjang □
benar-benar menyenangkan. Untuk memperburuk kesenangan ini, diagram lucu dan kabur ini dapat diubah menjadi kelompok kurung terjalin.
Tantangan ini adalah kebalikan dari saya sebelumnya .
Katakanlah Anda memiliki sekelompok persegi panjang yang saling terkait seperti:
+------------+
| |
+--+-+ +----+-+
| | | | | |
| | | +---+--+ | |
| | | | | | | |
+--+-+ | +-+--+-+-+-+
| | | | | | | |
| | | | | | | |
| | | | | | | | +-+
| +-+-+--+ | | | | |
| | | | | | +-+-+-+
+-----+-+----+ | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Catatan tambahan:
- Tidak ada dua
+
s yang akan berdekatan - Tidak ada dua persegi panjang yang akan berbagi tepi atau sudut
- Hanya akan ada paling banyak satu tepi vertikal di setiap kolom
Langkah pertama adalah melihat ujung paling kiri dari setiap persegi panjang. Tetapkan salah satu dari empat jenis braket ({[<
. Saya memilih [
.
+------------+
| |
[--+-] +----+-+
[ | ] | | |
[ | ] +---+--+ | |
[ | ] | | | | |
[--+-] | +-+--+-+-+-+
| | | | | | | |
| | | | | | | |
| | | | | | | | +-+
| +-+-+--+ | | | | |
| | | | | | +-+-+-+
+-----+-+----+ | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Sekarang lihat kotak paling kiri kedua. Karena tumpang tindih [
persegi panjang, itu harus dari jenis yang berbeda. Saya memilih (
.
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] +---+--+ ) |
[ ( ] | | | ) |
[--(-] | +-+--+-)-+-+
( | | | | ) | |
( | | | | ) | |
( | | | | ) | | +-+
( +-+-+--+ ) | | | |
( | | ) | | +-+-+-+
(-----+-+----) | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Kotak paling kiri berikutnya tidak bersinggungan dengan kotak sebelumnya, tetapi bersarang di kotak sebelumnya. Saya memilih untuk menetapkannya (
lagi. Biasanya merupakan dugaan yang baik untuk menetapkan sebuah persegi panjang dengan tipe yang sama dengan apa yang bersarang di dalamnya jika memungkinkan, tetapi kadang-kadang diperlukan backtracking.
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] (---+--) ) |
[ ( ] ( | ) ) |
[--(-] ( +-+--)-)-+-+
( ( | | ) ) | |
( ( | | ) ) | |
( ( | | ) ) | | +-+
( (-+-+--) ) | | | |
( | | ) | | +-+-+-+
(-----+-+----) | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Persegi panjang berikutnya ini dapat ditugaskan [
lagi.
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] (---+--) ) |
[ ( ] ( | ) ) |
[--(-] ( [-+--)-)-+-]
( ( [ | ) ) | ]
( ( [ | ) ) | ]
( ( [ | ) ) | ] +-+
( (-[-+--) ) | ] | |
( [ | ) | ] +-+-+-+
(-----[-+----) | ] | | | |
[ | | ] | +-+ |
[ +------+ ] | |
[ ] | |
[----------] +-----+
Persegi panjang berikutnya ini agak menyenangkan. Itu memotong a (
dan [
persegi panjang, jadi saya bisa menyebutnya {
persegi panjang (atau <
tapi tidak ada yang suka itu).
(------------)
( )
[--(-] {----)-}
[ ( ] { ) }
[ ( ] (---{--) ) }
[ ( ] ( { ) ) }
[--(-] ( [-{--)-)-}-]
( ( [ { ) ) } ]
( ( [ { ) ) } ]
( ( [ { ) ) } ] +-+
( (-[-{--) ) } ] | |
( [ { ) } ] +-+-+-+
(-----[-{----) } ] | | | |
[ { } ] | +-+ |
[ {------} ] | |
[ ] | |
[----------] +-----+
Dua persegi panjang terakhir tidak terlalu buruk. Mereka bisa dari dua jenis yang berbeda.
(------------)
( )
[--(-] {----)-}
[ ( ] { ) }
[ ( ] (---{--) ) }
[ ( ] ( { ) ) }
[--(-] ( [-{--)-)-}-]
( ( [ { ) ) } ]
( ( [ { ) ) } ]
( ( [ { ) ) } ] {-}
( (-[-{--) ) } ] { }
( [ { ) } ] <-{-}->
(-----[-{----) } ] < { } >
[ { } ] < {-} >
[ {------} ] < >
[ ] < >
[----------] <----->
Membacanya dari segi empat, saya mengerti [(]([{))}]<{}>
. Ini akan menjadi salah satu kemungkinan output untuk input di atas. Berikut daftar banyak opsi yang mungkin, tidak lengkap:
[(]([{))}]<{}>
<(>(<{))}>{()}
{<}[{(]>)}[<>]
any of the 4! permutations of ([{<, you get the idea...
Memasukkan
ASCII-art empat persegi panjang, dengan asumsi bahwa mereka tidak ambigu (lihat catatan di atas) dan dapat dengan benar dikonversi menjadi string kurung. Anda dapat mengasumsikan tidak ada spasi tambahan atau empuk ke persegi panjang, dengan baris tambahan opsional. Tidak akan ada spasi putih terkemuka.
Keluaran
Salah satu string braket yang valid yang mematuhi batasan persimpangan persegi panjang. Selain garis tambahan opsional, tidak boleh ada karakter lain selain tanda kurung. Aturan utamanya adalah, jika dua kotak berpotongan, maka mereka harus diberi jenis braket yang berbeda.
Tujuan
Ini adalah kode-golf, (kurangnya) kuantitas melebihi kualitas.
+
untuk sudut kiri atas, dan kemudian (tepat di bawah) +
sudut kiri bawah itu?