Atas saran Ms. Pac-Man yang khawatir tentang kelebihan berat badannya, Pac-Man telah memutuskan untuk melacak asupan Pac-Dot hariannya. Bantu dia menghitung jumlah Pac-Dots pada jalur tertentu di labirin!
Labirin
Untuk membantu Anda membangun penyandian labirin sendiri, Anda bisa mendapatkan beberapa data mentah di sini .
Perjalanan Pac-Man
Dalam konteks tantangan ini, aturan berikut ini berlaku:
- Pertama, kabar baiknya: hantu tidak ada di sana.
- Pac-Man selalu memulai balapannya pada posisi yang ditunjukkan pada gambar di atas, menuju ke Timur. Tidak ada Pac-Dot di posisi awal.
- Selama dia mengikuti jalan yang lurus, dia terus maju ke kotak berikutnya.
- Ketika dia menemukan belokan 90 ° tanpa jalur lain yang tersedia (kotak oranye di peta), dia secara otomatis dan sistematis mengambil belokan.
- Ketika ia menemukan persimpangan di mana beberapa jalur tersedia (kotak hijau di peta), ia dapat melanjutkan ke arah yang sama - jika ada - atau memilih arah lain (termasuk melakukan putar balik).
- Ketika Pac-Man melewati salah satu pintu keluar di sisi kiri tengah atau kanan tengah labirin, ia segera muncul kembali di sisi yang berlawanan.
- Pac-Man makan semua Pac-Dots di jalan yang dia ikuti. Setelah Pac-Dot dimakan, ia dikeluarkan dari labirin.
Tantangan
Memasukkan
Anda akan diberi string yang menggambarkan perilaku Pac-Man di persimpangan yang akan dijangkau. String ini akan dibuat dari karakter berikut:
L
: lakukan belokan 90 ° ke kiriR
: lakukan belokan 90 ° ke kananF
: maju (tidak ada perubahan arah)B
: mundur (putar balik)
Ketika semua karakter telah diproses, Pac-Man berhenti di persimpangan berikutnya yang dia temui.
Keluaran
Anda harus mencetak atau menampilkan jumlah Pac-Dots yang dimakan di sepanjang jalur input.
Aturan
- Anda dapat menulis program atau fungsi lengkap.
- Anda dapat mengambil input dalam huruf besar atau kecil, baik sebagai string atau array karakter. Anda juga dapat menggunakan karakter lain (tetapi hanya satu karakter per arah) atau bilangan bulat di
[0 .. 9]
. Jika Anda melakukannya, harap jelaskan dalam jawaban Anda. - Anda dapat mengasumsikan bahwa input selalu valid. (JsFiddle di bawah ini akan mendeteksi kesalahan, tetapi Anda tidak seharusnya melakukannya.)
- Ini adalah kode-golf, jadi kode terpendek dalam byte menang.
- Celah standar dilarang.
Petunjuk
Mungkin tidak diperlukan atau optimal untuk menyimpan bentuk labirin yang tepat.
Uji kasus dan demo
Kasing uji berikut - atau masukan lainnya - dapat diuji di jsFiddle ini .
1. Input : ""
Output : 1
Comment: Pac-Man just advances to the first junction, eats the Pac-Dot on it and stops.
2. Input : "L"
Output : 7
3. Input : "FFR"
Output : 13
4. Input : "LFLR"
Output : 17
Comment: Pac-Man will exit on the middle right side and re-appear on the left side.
5. Input : "BBBB"
Output : 2
6. Input : "BRRFFFL"
Output : 15
7. Input : "LFFRLFFFFRF"
Output : 50
8. Input : "BRFRLRFRLFR"
Output : 54
Comment: Pac-Man will exit on the middle left side and re-appear on the right side.
9. Input : "FFLRLFFLLLLFFBFLFLRRRLRRFRFLRLFFFLFLLLLFRRFBRLLLFBLFFLBFRLLR"
Output : 244
Comment: All cleared!
sumber
Jawaban:
Pyth,
356345 + 1 = 346 byteKode ini mengandung beberapa unsintables, jadi di sini adalah
xxd
hexdump yang dapat dibalik.Membutuhkan
-M
bendera untuk menonaktifkan memoisasi. Sayangnya, ini tidak dapat dilakukan di setiap pelaksana online yang saya kenal.Berikut adalah versi ASCII yang
dapatdicetak yang dapatdibaca:Penjelasan
Ini sangat banyak pekerjaan yang sedang berlangsung, jadi saya belum akan memposting penjelasan lengkap.
Pada dasarnya, program ini mewakili papan sebagai grafik (agak aneh) menggunakan lima tabel pencarian: 2 untuk konektivitas, 1 untuk arah persimpangan, dan 2 untuk jumlah titik. Ini dibangun oleh skrip Python 200-baris yang saya habiskan terlalu banyak waktu. Kemudian program hanya berjalan melalui input dan menghitung titik-titik, memperbarui tabel titik menjadi nol saat titik-titik dikumpulkan.
MELAKUKAN:
sumber
k, 264 byte
Hex dump:
Data biner pada akhirnya mengkodekan dua array:
a
terdiri dari pasangan byte, masing-masing mewakili (64 * arah) + junctionIdb
adalah jumlah titik Pacman antara setiap pasangan persimpangan dia
Program membaca file sumbernya sendiri (
p.k
) dan menerjemahkan data.Input berasal dari stdin dan menggunakan 0x00,0x01,0x02,0x03 (alias NUL, SOH, STX, ETX - empat kode ASCII pertama) alih-alih FLBR.
Saya menggunakan implementasi k saya sendiri yang terbatas, kembung, macet, dan lambat dibandingkan dengan yang asli . Saya menguji dengan program berikut:
sumber