Hari ini, kami akan membuat peta untuk RPG roguelike!
Contoh Peta:
##########
#### F#
#### ##
## C#C#
# ## #
# C #E #
#### # #
# #
#P #
##########
#
adalah dinding, P
adalah lokasi awal pemain, F
adalah hasil akhir yang harus dicapai, C
adalah koin yang dapat dikumpulkan, danE
adalah musuh yang bisa diperangi.
Spesifikasi peta:
- Tinggi dan Lebar harus antara 10 dan 39, inklusif. Tinggi tidak harus sama dengan lebar.
- Perbatasan peta harus diisi dengan dinding.
P
harus ditempatkan di sudut kiri bawah.F
harus ditempatkan di sudut kanan atas.- Harus ada antara 1 dan 3 musuh.
- Seharusnya ada antara 2 dan 4 koin.
- Harus ada sejumlah dinding di tengah. Harus ada jalan untuk mendapatkan dari
P
ke SetiapC
,E
, danF
, mengingat bahwa pemain tidak bisa bergerak secara diagonal. - Setiap kombinasi yang memungkinkan harus memiliki peluang untuk terjadi.
Aturan
- Program byte paling sedikit menang.
- Program Anda seharusnya tidak mengambil input apa pun.
- Program Anda mungkin tidak keluar dengan kesalahan (output non-fatal
STDERR
tidak apa-apa, tapi kami tidak bisa mendapatkan crash seperti kehancuran setelah pembuatan peta!) - New trailing newline diizinkan dan trailing space diizinkan.
- Tidak ada output lain yang diizinkan.
code-golf
ascii-art
path-finding
maze
Pavel
sumber
sumber
Jawaban:
Perl, 293 byte
-9 byte terima kasih kepada @Dom Hastings
Tambahkan
-E
bendera untuk menjalankannya:Namun, ini membutuhkan waktu lama untuk dijalankan, jadi saya sarankan menggunakan versi ini sebagai gantinya:
Cobalah online!
Penjelasan
Butuh waktu lama untuk dijalankan, karena daftar dari mana kita secara acak memilih karakter untuk diletakkan di papan tulis (
@a
) berisi 1.369 spasi putih dan#
, dan hanya 4 koin dan 3 musuh. Jadi jika ukuran lebar dan tinggi kecil, ada banyak ruang dan#
dibandingkan dengan koin dan musuh, jadi sangat mungkin bahwa peta acak tidak akan valid. Itu sebabnya "dioptimalkan" versi lebih cepat: daftar dari mana kita memilih karakter hanya sedikit lebih besar dari peta (daftar adalah@a=((C)x4,(E)x3,("#")x($v=rand $=*$%),($")x($=*$%-$v))
: nomor acak$v
dari#
(rendah dengan ukuran peta), dansize of the map - $v
spasi putih).sumber
$"
adalah variabel Perl yang sah, tetapi penyorotan sintaksis tidak mengetahuinya, itu sebabnya ia terlihat seperti itu. Oke, saya akan menghapus komentar tentang ruang yang tidak dapat dijangkau.PHP,
422417415309373369364361 byteberoperasi pada string tanpa linebreak; menggali jalur acak di antara ekstra. Jalankan dengan
-r
.Catatan: Jalur dibuat dengan berjalan dalam arah acak. Pilihan arah untuk setiap langkah sebagian besar akan menghasilkan peta yang terbuka lebar; dan contoh peta sangat tidak mungkin muncul; tapi memang begitu mungkin.
kerusakan
sumber
<?php .... ?>
E
s.C # (Visual C # Interactive Compiler) , 730 byte
Cobalah online!
Tidak Disatukan:
Sunting: disimpan 8 byte, membuatnya sedikit kurang efisien dengan mengunci loop tes yang dapat diakses pemain hingga 99 iterasi. Saya tahu itu tidak akan pernah benar-benar bersaing dengan jawaban lain di sini, tapi saya bersenang-senang!
sumber