pengantar
Keponakan saya ingin membuat lintasan balap mobil. Dia memiliki bagian kayu yang pas untuk membentuk lintasan. Setiap bagian berbentuk persegi dan berisi bentuk yang berbeda. Saya akan menggunakan karakter gambar pipa untuk menggambarkan:
│
: jalan yang menuju vertikal─
: jalan yang menuju horizontal┌
┐
└
┘
: jalan yang berbelok ke suatu arah┼
: Jembatan dengan underpass
Anehnya, tidak ada potongan persimpangan.
Berikut adalah contoh kemungkinan trek balap mobil:
┌─┐
│ │┌─┐
│ └┼─┘
└──┘
Aturan untuk lintasan mobil balap yang valid adalah sebagai berikut:
- Tidak mungkin ada jalan yang menuju ke mana-mana.
- Itu harus membentuk loop (dan semua bagian harus menjadi bagian dari loop yang sama).
- Di jembatan / underpass, Anda tidak dapat berbelok (jadi Anda harus langsung melewatinya).
Sayangnya, trek balap mobil potongan keponakan saya dan saya terbatas. Tapi kami pasti ingin menggunakan semuanya di trek. Tulis sebuah program yang, berisi daftar barang apa saja yang ada di inventaris kami, menampilkan trek mobil balap yang menggunakan semua bagian itu.
Deskripsi Input
Kami ingin input masuk melalui STDIN, argumen baris perintah, membaca file, atau fungsi input pengguna (seperti raw_input
atau prompt
). Input adalah bilangan bulat positif koma yang dipisahkan dalam formulir
│,─,┌,┐,└,┘,┼
di mana masing-masing mewakili jumlah bagian tertentu yang kita miliki. Jadi misalnya input:
1,1,1,1,1,1,1
akan berarti bahwa kami memiliki satu dari setiap bagian.
Deskripsi Output
Keluarkan trek mobil balap menggunakan karakter gambar pipa yang tercantum di atas. Lintasan mobil balap harus menggunakan persis jumlah setiap bagian yang ditentukan dalam input - tidak lebih, dan tidak kurang. Akan ada setidaknya satu lintasan mobil balap yang valid untuk setiap input.
Contoh Input dan Output
Memasukkan: 3,5,2,2,2,2,1
Output yang mungkin:
┌─┐
│ │┌─┐
│ └┼─┘
└──┘
Memasukkan: 0,0,1,4,4,1,3
Output yang mungkin:
┌┐
└┼┐
└┼┐
└┼┐
└┘
Jawaban:
Ruby 664
671 677 687 701(678 bytes)Ini bukan program terpendek yang bisa saya buat, tapi saya mengorbankan beberapa kecepatan untuk eksekusi.
Anda dapat bereksperimen dengan program di sini . Perhatikan bahwa ideone memiliki batas waktu eksekusi, jadi untuk input yang terdiri lebih dari sekitar 12 buah, program mungkin akan kehabisan waktu.
Ada juga test suite untuk program ini. Perhatikan bahwa dua tes terakhir dinonaktifkan pada ideone, karena batas waktu yang disebutkan di atas. Untuk mengaktifkan tes ini, hapus
x_
awalan dari namanya.Program menemukan solusi menggunakan pencarian Kedalaman-pertama; itu menempatkan potongan satu per satu dan menyimpan jejak yang longgar. Pencarian berhenti ketika tidak ada lagi ujung yang longgar (tidak terhubung) dan semua bagian telah ditempatkan.
Ini adalah program yang tidak dipisahkan:
sumber