Tugas ini adalah bagian dari Push Puzzle Pemrograman Premier Periodik Pertama .
Anda mendapatkan hierarki item dalam format berikut:
2
Hat
1
Gloves
yang perlu dimasukkan ke dalam kotak, seperti:
.------------.
| Hat |
| .--------. |
| | Gloves | |
| '--------' |
'------------'
Dalam format input angka mulai kotak dengan item sebanyak yang ditentukan angka. Kotak pertama memiliki dua item di dalamnya (Topi dan kotak yang berisi Sarung Tangan), yang kedua hanya berisi satu barang - sarung tangan.
Seperti yang bisa dilihat, kotak bisa hidup di dalam kotak juga. Dan mereka selalu bulat ... semacam (sudut runcing adalah bahaya luka dan kami tidak ingin itu).
Di bawah ini ada detail jahat bagi mereka yang ingin memanfaatkan setiap sedikit kelonggaran memberikan spesifikasi. Pikiran Anda, tidak membaca spesifikasi bukan alasan untuk mengirimkan solusi yang salah. Ada skrip uji dan beberapa uji kasus di bagian paling akhir.
Spesifikasi
Kotak dibangun dari karakter berikut:
|
(U + 007C) digunakan untuk membangun tepi vertikal.-
(U + 002D) digunakan untuk membangun tepi horizontal.'
(U + 0027) adalah sudut-sudut bawah bulat..
(U + 002E) adalah sudut atas bulat.
Karenanya sebuah kotak terlihat seperti ini:
.--. | | '--'
Perhatikan bahwa sementara Unicode juga memiliki sudut bulat dan karakter menggambar kotak yang tepat, tugas ini hanya ada di ASCII. Seperti halnya saya mencintai Unicode, saya menyadari bahwa ada bahasa dan lingkungan di luar sana yang tidak tiba pada dekade kedua hingga terakhir.
Kotak dapat berisi urutan item yang berupa teks atau item lainnya. Masing-masing item dalam kotak dirender dari atas ke bawah. Urutan A, B, C dengan demikian menerjemahkan sebagai berikut:
.---. | A | | B | | C | '---'
Ini tentu saja berlaku untuk kotak bersarang juga, yang merupakan item seperti teks. Jadi urutan A, B, Kotak (C, Kotak (D, E)), F akan merender sebagai berikut:
.-----------. | A | | B | | .-------. | | | C | | | | .---. | | | | | D | | | | | | E | | | | | '---' | | | '-------' | | F | '-----------'
Kotak menyesuaikan ukurannya dengan konten dan kotak bersarang selalu melampaui ukuran induknya. Selalu ada spasi sebelum dan sesudah konten, sehingga baik teks maupun kotak bersarang tidak terlalu dekat dengan tepi kotak luar. Singkatnya, yang berikut ini salah:
.---. |Box| '---'
Dan yang berikut ini benar:
.-----. | Box | '-----'
Terlihat jauh lebih baik, juga :-)
Item teks (lihat Input di bawah) harus direproduksi dengan tepat.
Selalu ada satu kotak tingkat atas (lih. XML). Namun, satu kotak dapat berisi beberapa kotak lainnya.
Memasukkan
Input diberikan pada input standar; untuk pengujian yang lebih mudah, kemungkinan dialihkan dari file.
Input diberikan berdasarkan garis, dengan setiap baris mewakili item teks untuk dimasukkan ke dalam kotak saat ini atau membuka kotak baru.
Setiap baris diakhiri oleh satu baris.
Item teks ditandai oleh garis yang tidak terdiri dari angka (lihat di bawah). Teks menggunakan karakter alfabet, spasi, dan tanda baca (
.,-'"?!()
). Teks tidak akan memulai atau berakhir dengan spasi dan akan selalu memiliki setidaknya satu karakter.Sebuah kotak dimulai dengan satu baris dengan angka di dalamnya. Nomor tersebut memberitahu ukuran kotak, yaitu jumlah item berikut yang dimasukkan ke dalamnya:
2 A B
menghasilkan kotak dengan dua item teks:
.---. | A | | B | '---'
Sebuah kotak akan selalu mengandung setidaknya satu item.
Akhir kotak tidak ditandai secara eksplisit dengan garis; sebagai gantinya kotak ditutup secara implisit setelah jumlah item yang ditentukan dimasukkan ke dalamnya.
Sebuah kotak selalu hanya satu item, terlepas dari berapa banyak item di dalamnya. Misalnya
3 A 4 a b c d B
akan menghasilkan kotak dengan tiga item, yang kedua adalah kotak lain dengan empat item.
Bersarang juga tidak memengaruhi fakta bahwa sebuah kotak hanyalah satu item.
Batas
Level bersarang maksimum adalah lima . Yaitu ada paling banyak lima kotak di dalam satu sama lain. Ini termasuk yang paling luar.
Maksimal sepuluh item per kotak.
Item teks memiliki panjang maksimal 100 karakter.
Keluaran
- Output adalah kotak yang diberikan termasuk semua item yang mengandung dan bersarang sesuai dengan aturan yang diuraikan di atas.
- Keluaran harus diberikan pada keluaran standar dan harus sama persis. Tidak ada spasi putih terdepan atau tambahan yang dibolehkan.
- Setiap baris harus diakhiri dengan satu baris, termasuk yang terakhir.
Kondisi menang
- Kode terpendek menang (yaitu mendapat jawaban yang diterima).
Masukan sampel 1
3
This is some text!
Oh, more text?
Just text for now, as this is a trivial example.
Output sampel 1
.--------------------------------------------------.
| This is some text! |
| Oh, more text? |
| Just text for now, as this is a trivial example. |
'--------------------------------------------------'
Masukan sampel 2
4
Extreme
nesting
3
of
boxes
4
might
lead
to
2
interesting
1
visuals.
Indeed!
Output sampel 2
.--------------------------.
| Extreme |
| nesting |
| .----------------------. |
| | of | |
| | boxes | |
| | .------------------. | |
| | | might | | |
| | | lead | | |
| | | to | | |
| | | .--------------. | | |
| | | | interesting | | | |
| | | | .----------. | | | |
| | | | | visuals. | | | | |
| | | | '----------' | | | |
| | | '--------------' | | |
| | '------------------' | |
| '----------------------' |
| Indeed! |
'--------------------------'
Masukan sampel 3
1
1
1
1
1
Extreme nesting Part Two
Keluaran sampel 3
.------------------------------------------.
| .--------------------------------------. |
| | .----------------------------------. | |
| | | .------------------------------. | | |
| | | | .--------------------------. | | | |
| | | | | Extreme nesting Part Two | | | | |
| | | | '--------------------------' | | | |
| | | '------------------------------' | | |
| | '----------------------------------' | |
| '--------------------------------------' |
'------------------------------------------'
Masukan sampel 4
3
Foo
2
Bar
Baz
2
Gak
1
Another foo?
Keluaran sampel 4
.----------------------.
| Foo |
| .------------------. |
| | Bar | |
| | Baz | |
| '------------------' |
| .------------------. |
| | Gak | |
| | .--------------. | |
| | | Another foo? | | |
| | '--------------' | |
| '------------------' |
'----------------------'
Skrip Tes
Karena mendapatkan perincian yang tepat terkadang sulit pada saat kami ( Ventero dan saya) telah menyiapkan skrip pengujian, Anda dapat menjalankan solusi dengan memeriksa apakah benar. Ini tersedia sebagai skrip PowerShell dan skrip bash . Doa adalah: <test-script> <program invocation>
.
PEMBARUAN: Skrip pengujian telah diperbarui; ada sejumlah kasus uji yang tidak memenuhi batas yang saya tentukan. Skrip uji PowerShell tidak menggunakan perbandingan case-sensitive untuk memeriksa hasilnya. Saya harap semuanya baik-baik saja sekarang. Jumlah kasus uji dikurangi menjadi 156, meskipun yang terakhir sekarang cukup ... besar.
UPDATE 2: Saya mengunggah generator case-test saya . Ditulis dalam C # , menargetkan runtime .NET 2. Ini berjalan pada Mono. Ini dapat membantu orang untuk menguji implementasi mereka. Sebagai kasus terburuk yang pasti diberikan batasan dalam tugas yang dapat Anda coba:
nb.exe 1 10 10 5 100 100 | my invocation
yang hanya akan menghasilkan kotak hingga tingkat terdalam dan memanfaatkan jumlah item maksimum per kotak dan panjang maksimum item teks. Saya tidak memasukkan test case ini ke dalam skrip uji, karena ini cukup besar dan hasilnya lebih besar.
UPDATE 3: Saya memperbarui skrip uji PowerShell yang cenderung melempar kesalahan tergantung pada bagaimana ujung baris ada di skrip dan baris apa yang berakhir dengan solusi yang dicetak. Sekarang harus agnostik untuk keduanya. Maaf lagi atas kebingungannya.