Berikut adalah diagram penjara yang menggunakan karakter ASCII:
+------------------------------+
| |
| X X |
| |
| D
D |
| |
| |
| X X X |
| |
+------------------------------+
Dinding terbuat dari karakter pipa |
, tanda hubung -
, dan pilar +
untuk sudut dan persimpangan. Ada juga dua pintu yang ditandai D
(yang akan selalu ada di dinding kiri dan kanan). Penjara dipenuhi dengan orang-orang menakutkan yang ditandai X
.
Tujuannya adalah untuk membangun tembok untuk memenuhi hal-hal berikut:
- Setiap orang berada di sel isolasi;
- Ada koridor yang membentang di antara dua pintu;
- Setiap sel berisi tepat satu pintu, yang terhubung langsung ke koridor utama;
- Semua ruang di penjara digunakan oleh sel dan koridor;
- Setiap sel berisi seseorang (yaitu, tidak ada sel kosong).
Koridor adalah jalur tunggal, tidak bercabang, dan selalu lebar satu karakter. Inilah solusi untuk penjara di atas:
+---------+--------------------+
| | |
| X | X |
| | +--------+
+------D--+-----D-----+ D
D +---D--+
+----D--------+---D-----+ |
| | | |
| X | X |X |
| | | |
+-------------+---------+------+
Anda dapat mengasumsikan bahwa setiap penjara input akan selalu memiliki output yang valid. Berikut adalah beberapa penjara input, bersama dengan kemungkinan keluaran:
+------------------------------+
|X X X X X X X X X X X X X X X |
| |
D D
| |
| X |
+------------------------------+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+
|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X |
+D+D+D+D+D+D+D+D+D+D+D+D+D+D+D-+
D D
+----------------------D-------+
| X |
+------------------------------+
+-----------+
|X |
| |
| |
|X X|
| |
| X|
| |
D D
+-----------+
+-+-------+-+
|X| D |
| D +---+ | |
+-+ | | |
|X| | +---+X|
| | | | +-+
| D | | X|
+-+ | +-D---+
D | D
+---+-------+
+----------------+
|X X X X|
| |
D |
| |
|X X X |
| |
| |
| |
| X X D
| |
| |
+----------------+
+---+---+----+---+
|X | X | X | X|
+--D+--D+---D+--D+
D |
+---+---+------+ |
|X | X | X | |
+--D+--D+---D--+ |
| |
| +-----+------+-+
| | X | X | D
| +----D+---D--+ |
| |
+----------------+
Jawaban:
Python 2 ,
2986288129492135207520711996 byteCobalah online!
Itu golf turun secara signifikan; namun mungkin masih ada ruang untuk perbaikan. Namun, sepotong kode ini menyelesaikan semua kasus uji. Tidak berjalan sangat efisien; untuk penjara besar, arsitek dapat meluangkan waktu untuk mencari tahu.
Menggunakan algoritma penelusuran jalan sederhana untuk menghubungkan kedua pintu dan tahanan ke koridor. Kemudian itu merangkum semua tahanan dan dinding mereka dan mendorong dinding tersebut di ruang kosong sampai semuanya terisi. Sebagai langkah terakhir, penampilan seni ASCII diimplementasikan.
Butuh beberapa jam untuk menulis. Saya harap ini juga bekerja di penjara lain selain kasus uji. (Anda tidak dapat menguji semuanya, bukan?)
sumber
P
). Ini bukan format IO yang diizinkan. Anda harus menggunakan salah satuinput()
atau mendefinisikan suatu fungsi.C,
37323642 byteSaya pasti bisa bermain golf ini sedikit lebih jauh, tetapi ini adalah awal yang cukup bagus. Awalnya saya tidak tahu bahwa pendekatan saya memiliki nama, jadi berteriaklah ke @TehPers karena memberi saya nama untuk diteliti. Saya benar-benar menikmati tantangan yang ditawarkan pertanyaan ini. :)
-63 byte dari saran @ Jonathan. Saya juga diganti
char
dengantypedef char R
dan diganti semua karakter literal yang lebih kecil dari 100 dengan nilai ASCII mereka untuk total 90 bytesPenjelasan cepat tentang kode saya.
Untuk menggunakan program ini, berikan peta sebagai string dengan karakter baris baru atau dengan setiap level yang dipisahkan oleh spasi seperti pada contoh berikut.
kode
sumber
free(t);free(u);
di akhir program Anda. Juga,'\0'
sama dengan0
, menyimpan 3 byte lagi.typedef int Q;
dan mengganti semua kemunculanint
denganQ
, Anda bisa menyimpan 44 byte lagi.