Atau mungkin itu bukan labirin, tapi tetap saja.
Aturan:
Masukan adalah string dua baris, yang terdiri dari
*
,1
,x
danX
. Tali itu adalah labirin untuk dilalui. Garis memiliki panjang yang sama .Anda bisa mengambil input sebagai string dengan
,
(koma) atau pemisah yang nyaman antara dua baris ini. Atau Anda bisa menggunakan kedua baris sebagai argumen terpisah untuk fungsi Anda.Output adalah jumlah langkah yang harus Anda ambil untuk keluar dari string (langkah terakhir adalah langkah yang membuat Anda keluar dari string).
Anda mulai di sudut kiri atas (garis yang lebih tinggi), sebelum simbol pertama.
Untuk setiap langkah, Anda bergerak maju dengan satu simbol (dari n ke (n + 1) th posisi ). Kemudian, tergantung pada karakter yang Anda injak, hasilnya berbeda. Inilah yang dilakukan oleh masing-masing char:
*
- tidak ada. Anda cukup menginjaknya secara normal.x
- setelah Anda menginjaknya, alihkan garis, tetapi tetap pada jarak horizontal yang sama dari awal. Misalnya, Anda menginjak posisi ketiga dari garis yang lebih tinggi, dan bertemu dengan huruf kecil dix
sini. Kemudian Anda langsung pindah ke garis bawah, tetapi kembali di posisi ketiga.X
- pindah jalur dan pergi ke posisi berikutnya. Contohnya sama di sana, tetapi Anda juga pindah dari posisi ketiga ke posisi keempat (jadi Anda berada di baris kedua di posisi maju).1
- hanya bergerak maju dengan posisi lain.
Setelah setiap karakter melakukan tugasnya, itu diganti dengan spasi dan tidak lagi "berfungsi".
Contohnya ikuti.
Masukan :
x *
Seperti yang dikatakan sebelumnya, Anda mulai sebelum simbol pertama dari baris pertama. Langkah pertama menggerakkan Anda menggunakan huruf
x
dan surat ini mengalihkan Anda ke baris kedua. Surat itux
tidak lagi berfungsi sebagaix
, tetapi diganti dengan*
. Ini akan lebih relevan dalam contoh-contoh terakhir. Anda sekarang berada di tanda bintang di garis bawah, dan itu tidak melakukan apa pun bagi Anda.Langkah kedua adalah menggerakkan Anda ke depan dan Anda keluar dari string, sehingga labirin selesai, dan butuh 2 langkah.
Keluaran
2
.Masukan :
xX* x1*
Langkah 1 : Anda bergerak
x
, yang menggerakkan Anda padax
baris bawah. Di sinilah aturan yang mengatakan bahwa karakter yang digunakan diganti dengan tanda bintang. Kemudian Anda kembali ke baris pertama, tetapi tidak lagi dix
sana, karena telah digunakan dan menjadi tanda bintang. Jadi, Anda bergerak dengan aman di asterisk ini dan langkahnya selesai (Anda sekarang berada di posisi pertama dari baris pertama).Langkah ke-2 : Anda pindah
X
, itu mendorong Anda ke garis bawah dan kemudian mendorong Anda ke depan. Anda sekarang berada di posisi ketiga dari baris kedua (tanda bintang), tidak pernah mengunjungi posisi kedua (yang berisi1
).Langkah 3 : Anda bergerak maju, keluar dari string.
Output :
3
.
Kasus uji:
Memasukkan:
*1* xxx
Output:
3
. (karena1
membuat Anda melompat di posisi ketiga). Di sana Anda tidak pernah mengunjungi baris kedua, tetapi diperlukan bagian dari input.Memasukkan:
*X*1*x x*1xx*
Output:
4
.Memasukkan:
1x1x ***X
Output:
3
.Memasukkan:
1*x1xxx1*x x*x1*11X1x
Output:
6
.Memasukkan:
xXXXxxx111* **xxx11*xxx
Output:
6
.
sumber
"\n\n"
adalah string dua baris ...1
, ketika Anda mulai sebelum baris 1, maka Anda bergerak maju satu langkah, dan kemudian Anda menyelesaikan labirin ...Jawaban:
Siput, 34 byte
Diperluas:
Untuk jalur yang mengambil langkah N, program menemukan satu kecocokan yang berhasil untuk setiap traversal dari 0 langkah, 1 langkah, ..., N - 1 langkah.
sumber
Haskell,
686665 byteFungsi
#
mengambil kedua garis sebagai parameter terpisah. Contoh penggunaan:"1x1x" # "***X"
->3
.Kita hanya harus menghitung bintang yang
*
kita injak plus 1 untuk pergi.Sunting: @feersum menyimpan satu byte. Terima kasih!
sumber
a>'a'
bukana=='x'
?JavaScript (ES6), 119
Kurang golf
Uji
sumber
TSQL (sqlserver 2012+), 276 byte
Golf:
Tidak Disatukan:
Biola
sumber
JavaScript, 211 byte
Saya sedang berpikir untuk membuat versi yang menunjukkan setiap langkah dimainkan satu sama lain, ditampilkan di halaman web.
Digunakan lebih banyak byte daripada yang saya harapkan ketika mengganti
x
dengan*
karena JS tidak dapat diubahStrings
. Saran untuk meningkatkan dihargai, terutama dengan bagian pengganti.sumber