Program Anda harus mengambil string multi-baris, seperti ini:
#############
# #
# p #
# #
#############
p
adalah pemain dan #
merupakan blok.
Sekarang di bawah itu di terminal harus menjadi garis input yang mengatakan:
How do you want to move?
Jika pemain mengetik l
dia harus berjalan meninggalkan ketika tidak ada blok, lain, ketika ada blok, dia tidak bisa melewati dan tidak bergerak tentu saja, sekarang output di terminal harus diperbarui ( dan output sebelumnya dihapus / ditimpa):
#############
# #
# p #
# #
#############
Ia dapat mengetik l
untuk kiri, r
kanan, u
atas dan d
bawah.
Input akan selalu multiline, tetapi tidak akan selalu diisi dengan spasi menjadi persegi panjang yang sempurna. Selain itu, hash dapat berada di mana saja di string, dan tidak akan selalu terhubung satu sama lain. Sebagai contoh:
## ##
# #
## p
#
adalah penjara yang valid. (perhatikan kurangnya spasi tambahan pada setiap baris)
Jika pemain keluar dari string, dia tidak harus ditampilkan. Tetapi jika dia kembali lagi nanti, dia harus ditampilkan lagi.
Dan batas-batas "di luar" string adalah length(longest_line)
dengan number_of_lines
persegi panjang, jadi bahkan jika satu baris tidak diisi dengan spasi di sebelah kanan, lokasi itu tidak dianggap di luar batas. Contoh menggunakan penjara bawah tanah sebelumnya:
## ##
# #p
##
#
Baris kedua tidak memiliki ruang di mana p sekarang, tetapi itu tidak masalah.
Akhirnya, program Anda harus mengulang selamanya mengambil input.
Uji kasus
Uji kasus 1:
####
# p#
#
####
How do you want to move?
d
####
# #
# p
####
Uji kasus 2:
####
p#
#
####
How do you want to move?
l
####
p #
#
####
How do you want to move?
d
####
#
p #
####
How do you want to move?
l
####
#
p #
####
How do you want to move?
l
####
#
#
####
How do you want to move?
r
####
#
p #
####
Tentu saja, ini tidak lengkap. Kode Anda harus berulang selamanya dan menghapus layar antara setiap output .
Output Anda diperbolehkan untuk meminta input sebagai How do you want to move?\n<input>
atau How do you want to move?<input>
(yaitu Anda tidak perlu input pada baris kosong), dan Anda tidak perlu baris kosong antara baris terakhir dari ruang bawah tanah dan prompt. (Namun mereka tidak bisa berada di jalur yang sama)
Celah standar tidak diizinkan! Ini adalah kode-golf, jadi kode terpendek dalam byte menang!
l
,r
,u
, ataud
) bisa apa saja, bukan hanya "Bagaimana Anda ingin pindah"? Itu tidak benar-benar mempengaruhi jawaban kecuali untuk golfyness.Jawaban:
MATLAB,
268247246 byteMungkin tidak kompetitif, tapi itu menyenangkan. Versi golf:
Versi yang dapat dibaca:
The
try
blok untuk mencegah fungsi dari menerjang di luar kesalahan batas. Saya yakin mereka berdua berlebihan, tetapi saya tidak bisa menurunkannya lebih baik dari itu.Perlu dicatat bahwa MATLAB akan memperluas array ke bawah dan ke kanan, tetapi pemain akan menghilang ketika pindah ke area 'yang belum dijelajahi' untuk pertama kalinya. Misalnya, jika Anda bergerak di luar batas saat ini ruang bawah tanah ke kanan dengan satu ruang, Anda akan menghilang, tetapi giliran berikutnya MATLAB akan memperluas array untuk memasukkan kolom baru (atau baris, jika Anda bergerak ke bawah).
'#'==d(y,x)
menghemat satu byte dibandingkan dengand(y,x)=='#'
, karena Anda tidak memerlukan ruang antaraif
dan'#'
sumber
Kopi-skrip: 580 Bytes
Saya telah memeras semua yang saya bisa dari algoritma khusus ini dan otak saya yang lelah. Saya butuh liburan.
sumber