Beberapa suka-suka-nakal berbasis teks tidak membiarkan Anda masuk ke dinding, dan memberi Anda langkah mundur jika Anda mencobanya. Mengapa melakukan itu ketika Anda bisa membuat pemain bergerak ke arah yang sah terdekat?
Tantangan
Tulis program fungsi yang, diberi arah dan kisi karakter 3 oleh 3, menampilkan kisi yang sama setelah pemain mengambil langkah.
Sebagai contoh,
9
#..
.@#
#.#
menjadi
#.@
..#
#.#
Memasukkan
Arah diberikan oleh satu digit dari 1 hingga 9, masing-masing sesuai dengan 8 arah mata angin dan diam. Ini berasal dari lokasi relatif angka pada keypad:
NW N NE .. \ | / ... 7 8 9 W- 4 5 6 -E ... 1 2 3 ../ | \ SW S SE
Namun, Anda juga dapat menggunakan angka 123, 456, 789 alih-alih 789, 456, 123. Dengan kata lain, Anda dapat menukar 2 baris atau angka atas dan bawah jika Anda memilihnya. Ini adalah satu-satunya 2 kombinasi indeks yang dapat diterima.Kisi-kisi 3 oleh 3 akan terdiri dari 3 karakter ASCII yang dapat dicetak yang mewakili lantai, dinding, dan pemain yang dapat dilewati. (Dalam kasus uji,
.
digunakan untuk lantai,#
dinding, dan@
pemain)- Anda dapat memilih karakter apa yang digunakan oleh program Anda, tetapi Anda harus menyatakannya dalam jawaban Anda dan karakter itu harus konsisten dalam berbagai uji coba.
- Karakter yang mewakili karakter akan selalu berada di tengah kotak 3 dengan 3, dan arahnya akan selalu antara 1 dan 9 (termasuk)
- Anda dapat menerima input dalam urutan apa pun
- Kisi 3 oleh 3 dapat dimasukkan sebagai array char, array string, string 9 panjang, atau alternatif lain yang masuk akal.
Keluaran
- Kembali dari fungsi, atau output ke StdOut atau alternatif terdekat
- Ruang tambahan dan baris baru diizinkan
- Anda harus menggunakan representasi karakter yang sama sebagai input
- Format yang sama diizinkan untuk input diizinkan untuk output
Bagaimana pemain bergerak
Jika arah yang ditentukan diblokir oleh dinding (misalnya jika contoh di atas memiliki arah 6), maka lihatlah 2 arah terdekat:
- Jika satu (dan hanya satu) arah gratis, gerakkan pemain ke arah itu.
- Jika tidak ada arah yang gratis, lihat 2 arah terdekat berikutnya (tidak termasuk arah 5). Jika Anda telah membungkus sepanjang jalan dan tidak menemukan arah terbuka (pemain dikelilingi oleh dinding), jangan gerakkan pemain
- Jika kedua arah terbuka, pilih satu untuk dipindahkan secara acak (meskipun tidak harus seragam).
Jika arah yang diberikan adalah 5, jangan gerakkan pemain
Uji kasus
( #
= dinding, .
= lantai, @
= pemain)
Memasukkan: 9 # .. . @ # #. # Keluaran: #. @ .. # #. # Memasukkan: 3 # .. . @ # #. # Keluaran: # .. .. # # @ # Memasukkan: 7 ##. # @ # .. # Keluaran: ## @ ##. #.# atau #.# .. # @. # Memasukkan: 5 ... . @. ... Keluaran: ... . @. ... Memasukkan: 2 ### # @ # ### Keluaran: ### # @ # ###
Mencetak gol
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
123;456;789
bukan 789;456;123
?
yuhjklbn
? MENINGGAL DUNIA.