TL; DR: Diberikan array karakter dan robot dalam posisi awal array, tulis sebuah algoritma daripada membaca string dengan gerakan (
F
untuk "maju",R
untuk "putar 90 derajat ke kanan" danL
untuk "putar 90 derajat kiri ") dan hitung posisi akhir robot. Lebih detail dalam teks lengkap.
Kami memiliki di rumah alat yang dapat diprogram sangat sederhana untuk anak-anak: kendaraan kecil dengan tombol untuk membuat kendaraan maju, belok kiri 90 derajat atau belok kanan 90 derajat. Sesuatu yang mirip dengan ini:
Kami juga memiliki tikar busa dengan huruf-huruf seperti ini:
Tujuan dari semua ini adalah untuk mengajarkan anak-anak baik alfabet dan dasar-dasar pemrograman, sekaligus.
Tantangan
Misalkan kita telah mengatur tikar busa kita secara acak seperti ini:
+---+---+---+---+---+---+---+
| E | R | L | B | I | X | N |
+---+---+---+---+---+---+---+
| O | A | Q | Y | C | T | G |
+---+---+---+---+---+---+---+
| F | W | H | P | D | Z | S |
+---+---+---+---+---+---+---+
| K | V | U | M | J |
+---+---+---+---+---+
| |
+---+
Misalkan kita telah memodifikasi kendaraan sehingga ketika kita memprogram perintah "maju", kendaraan berjalan persis berukuran satu kotak di matras. Jadi, jika kendaraan berada di U
alun - alun dan pergi ke utara, ia berhenti persis di P
alun - alun.
Semua instruksi diberikan kepada kendaraan sebelum mulai bergerak, dan itu adalah:
F
: Kendaraan berjalan maju ke alun-alun berikutnya.R
: Kendaraan berbelok 90 derajat tepat di tempatnya (tidak ada gerakan lebih lanjut).L
: Kendaraan membelok 90 derajat ke kiri pada tempatnya (tidak ada gerakan lebih lanjut).
Setelah instruksi diberikan, Anda dapat menekan tombol "GO" dan mengirim kendaraan ke posisi tertentu karena akan mengikuti setiap instruksi dalam urutan yang diberikan. Jadi, Anda dapat memberi tahu anak itu untuk memasukkan instruksi yang diperlukan agar kendaraan tersebut pergi ke surat yang diberikan.
Anda harus menulis program / fungsi terpendek yang memproses a string
(parameter input) dengan seperangkat instruksi dan menghitung huruf kendaraan berhenti (output string
).
Detail:
- Kendaraan selalu mulai di alun-alun kosong di bagian bawah, dan menghadap ke utara (menuju
U
alun - alun). - Input string akan hanya berisi huruf
F
,R
,L
danG
(untuk tombol "go"). Anda dapat menggunakan huruf kecil untuk matras dan instruksinya, jika Anda mau. - Algoritma harus mematuhi setiap instruksi dalam string sebelum yang pertama
G
(setiap instruksi setelah itu diabaikan karena kendaraan sudah mulai bergerak). - Jika kendaraan keluar dari mat pada saat tertentu (bahkan jika string input belum sepenuhnya diproses), algoritme harus mengembalikan string
Out of mat
. - Jika tidak, algoritme harus mengembalikan surat yang telah dihentikan kendaraan. Titik awal dihitung sebagai
char (atau string kosong).
Contoh:
Input: FFG
Output: P
Input: FRFRFG
Output: Out of mat
Input: RRFFG
Output: Out of mat
Input: FFFRFFLFG
Output: X
Input: FFFRFFLF
Output: <-- Nothing or a whitespace (the robot has not started moving)
Input: FFFRRFFFG
Output: <-- Nothing or a whitespace (the robot has returned to the starting point)
Input: RRRRRLFFFLFFRFRFGFFRRGRFF
Output: L (Everything after the first G is ignored)
Ini kode-golf , jadi semoga program terpendek untuk setiap bahasa menang!
sumber
@
posisi awal dan spasi di mat, sehingga konfigurasi ini akan menjadiERLBIXN\nOAQYCTG\nFWHPDZS\n KVUMJ \n @
(dengan jarak yang berbeda, SE mengacaukannya)Jawaban:
JavaScript (ES6),
194176169163 byteMenyimpan beberapa byte berkat @Luke dan @Arnauld.
Tidak Disatukan:
sumber
false
dengan!1
every
metode menanganinya.(s,p=35,d=3,t='ERLBIXN1OAQYCTG1FWHPDZS11KVUMJ11111 11')=>[...s].every(i=>i=='L'?d--:i=='R'?d++:i=='F'?+t[p+=[1,8,-1,-8][d%4]]||!t[p]?p=1/0:1:0)?'':t[p]||'Out of mat'
[1,8,-1,-8]
array, terima kasih!Python 2 , 235 byte
Cobalah online!
sumber
Python 3 ,
226231241 byteSunting kedua; harus bekerja sekarang. Sekali lagi, banyak optimasi yang harus dilakukan.
Cobalah online!
sumber
Bahasa Wolfram / Mathematica, 300 Bytes
Tidak Disatukan:
sumber