Dalam permainan Shantae asli , ada tarian transformasi yang harus Anda masukkan waktu menggunakan D-Pad, A, dan B. Jika Anda menyelesaikan urutan yang telah ditentukan saat menari, Anda akan berubah menjadi bentuk yang sesuai (atau teleportasi atau pulihkan) . Tugas Anda adalah untuk menampilkan efek yang sesuai ketika diberi input. Tangkapannya adalah Anda mungkin mendapatkan gerakan tarian asing di input, baik sebelum dan sesudah, dan bahkan mungkin tidak ada tarian di input.
Tarian
Menggunakan UDLRAB
untuk gerakan tarian:
- Monyet:
DR
- Gajah:
DL
- Spider:
DA
- Perampas:
DB
- Tinkerbat:
DUU
- Menyembuhkan:
DUA
- Scuttle Town:
DULR
- Kota Air:
DURLAB
- Kota Oasis:
DURRBA
- Caravan Zombie:
DULLBA
- Bandit Town:
DUBLBR
Coding
Input: urutan gerakan tarian. Ini dapat berisi nilai-nilai Atas, Bawah, Kiri, Kanan, B, A, dan Tunggu. Gunakan penyandian yang nyaman.
Output: nilai yang sesuai dengan tarian pencocokan pertama dalam urutan atau nilai yang berbeda jika tidak ada kecocokan. Anda dapat menyandikan ini dengan cara apa pun yang nyaman.
Contohnya
Menggunakan .
untuk menunggu:
DR
→ MonyetUUU.DLUAB
→ GajahL.DDBALL
→ HarpyLRLRDURURLAB
→ Tidak cocokDUBLBR
→ Kota BanditDURLBA
→ Tidak cocokDDUDR
→ MonyetRLAB
→ Tidak cocok.DUUBBB
→ TinkerbatDADRDL
→ Laba-laba.DURRBADR
→ Kota OasisDURR.BA
→ Tidak cocok
Aturan / Catatan Lainnya
- Aturan standar tentang celah dan metode IO berlaku
- Jelaskan penyandian Anda untuk gerakan menari dan tarian yang serasi.
- Mungkin ada lebih dari satu tarian di input. Jika demikian, cocokkan hanya yang pertama yang muncul di input.
- Menunggu mengganggu tarian.
sumber
DURLAB
, yaitu Water TownJawaban:
JavaScript (ES6),
92 88 6159 byteDisimpan 2 byte berkat saran dari @tsh
Berharap
UdLRAB
untuk tarian bergerak dan.
menunggu. Keluaran tidak terdefinisi jika tidak ada yang cocok, atau urutan tarian yang cocok (misalnyadR
untuk Monkey ataudURLAB
untuk Kota Air).Cobalah online!
atau Cobalah dengan peningkatan output
sumber
R|L|A|B
->[RLAB]
?d([A-R]|U...)
tampaknya baik-baik saja karena penyandian yang nyaman dapat digunakan untuk input juga. Terima kasih!JavaScript (Node.js) ,
179164153148137115 byteCobalah online!
-11 byte terima kasih atas jawaban Arnauld yang membuat saya menyadari bahwa output dapat disederhanakan
-8 byte terima kasih kepada flawr dalam obrolan membantu saya cek kosong array golf
-12 byte terima kasih kepada Shaggy
Mengambil input sebagai string dalam format yang sama dengan kasus uji OP.
Menghasilkan string dansa yang cocok minus yang memimpin
D
untuk pertandingan, atauundefined
tanpa pertandingan.Integer terkait dengan indeks kecocokan dalam larik ini (diindeks 0):
Mungkin ruang untuk bermain golf, terutama dalam mengompresi set gerakan tarian.
Penjelasan
Pendekatan umum
Iterasi melalui string input, hapus karakter pertama setiap kali dan periksa apakah string yang dihasilkan dimulai dengan string dance yang valid.
Semuanya hanya untuk loop di dalam untuk loop, saya akan memecahnya menjadi 3 bagian:
- Kondisi
- Loop Dalam
- Outer Post
Kondisi
Ini adalah kondisi terminasi untuk loop luar, yaitu IE sementara ini benar, terus looping.
Cukup sederhana:
d
adalah string, dalam string kosong JS falsey "d
tidak kosong".Loop Dalam
Ini adalah hal-hal yang terjadi pada setiap loop:
Jadi pertama-tama kita mendefinisikan sebuah array dengan:
Ini menciptakan sebuah array dari semua string gerakan tarian, kehilangan
D
di awal masing-masing (Mereka semua mulai denganD
). Kami akan memanggil arrayx
ini. Mungkin ada potensi golf yang signifikan di sini.
Kami kemudian mengulangi setiap item dalam
x
(disimpan dalamz
), dan menjalankan yang berikut:Ini digunakan
d.search
untuk mengembalikan indeks dalam string'D'+z
. Jika dan hanya jikad
dimulai dengan'D'+z
, ini akan kembali0
, yang merupakan nilai falsey di JS.Dengan demikian,
!d.search
akan hanya menjadi kenyataan ketika string dimulai dengan'D'+z
.Catatan: Inilah sebabnya kami menghilangkan nilai
D
sx
, karena menghemat 10 byte (1 per tarian), dan hanya dikenakan biaya satu byte dalam pencarian iniKemudian, jika pencarian cocok, kami kembali
z
. Ini adalah tarian yang kami temukan, tanpa pemimpinD
.Jika tidak, kami terus mengulang.
Pos Luar
Ini adalah hal-hal yang terjadi pada akhir setiap iterasi dari loop luar:
Hapus saja karakter pertama dari
d
Tidak cocok
Jika
d
menjadi kosong dan tidak ada kecocokan yang ditemukan, akhir fungsi tercapai. Ini secara implisit mengembalikanundefined
sesuai perilaku JavaScript standarsumber
substr -> slice
perubahan sendiri, dan saya selalu lupa itud
adalah string, bukan array. String kosong adalah falsey: P Dan tangkapan yang bagus pada kawat gigi, saya lupa tentang hal pernyataan 1 anak keseluruhand.search
akan mengembalikan 0 jika string pencarian berada di awald
, yang tentu saja merupakan nilaiindexOf
tetapi mendukung RegEx, yang tidak relevan di sini.Retina ,
53434237 byteCobalah online!
Sedikit menyimpang dari input dan output standar untuk memanfaatkan masing
;:
-DU
masing. Inspirasi dari tsh , menghemat 5 byte.Cocokkan tarian pertama dan tampilkan, setelah melihat jawaban Arnauld . Disimpan 10 byte berkat Neil menyarankan menggunakan tahap daftar
L
dan membatasi output untuk pertandingan pertama. Disimpan satu byte berkat tsh memperpendek regex.Header dan footer hanya memungkinkan untuk beberapa input dan membuat output dapat dibaca masing-masing.
sumber
1!
alih-alih0L
, tetapi dalam kasus itu footer tidak akan berfungsi (1M!
akan bekerja bahkan dengan footer).L
.R|L|A|B
->[RLAB]
?D[RLAB]|DU(...)
sebaliknya?Perl 5
-p
, 47 byteCobalah online!
Mengembalikan kode tarian (diizinkan sesuai komentar @ Arnauld) atau kosong jika tidak cocok.
sumber
Arang , 48 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Split string terkompresi
RDLDADBDUUDUADULRDURLABDURRBADULLBADUBLBR
(yang berisi semua tarian kecuali untuk memimpinD
) aktifD
, dan kemudian awaliD
kembali ke setiap entri.Untuk setiap tarian, gabungkan ke input dan temukan posisi pertama dari tarian dalam penggabungan, ditambah juga luangkan waktu tarian tersebut. Untuk tarian yang tidak ditemukan ini berarti bahwa hasilnya akan menjadi panjang dari string input
-1
.Ambil hasil minimum, yaitu posisi dan panjang tarian yang muncul pertama kali.
Ekstrak tarian itu dari senar asli.
sumber
Jelly ,
3328 byteCobalah online!
Dibawa sebagai input daftar bilangan bulat yang mewakili gerakan:
Mengembalikan bilangan bulat yang dibungkus untuk jawabannya, atau daftar semua bilangan bulat ini tanpa kecocokan:
TIO link menyertakan kode di footer untuk menerjemahkannya kembali ke string dalam pertanyaan, tetapi tidak diperlukan agar program berfungsi menggunakan bilangan bulat yang ditentukan di sini.
sumber
05AB1E , 104 byte
Cobalah online!
Saya menulis keburukan ini tanpa menyadari bahwa saya dapat menggunakan angka untuk memindahkan nama ...
sumber
sfk ,
11991 byteCobalah online!
Memberikan tarian pertama yang hadir sebagai urutan gerakan.
(
xex
hanya editor aliran, dan dalam hal ini_<pattern>_
adalah teks pencarian)sumber
05AB1E ,
2827 byteDisimpan 1 byte berkat Grimy
Cobalah online!
Menghasilkan pertandingan (mis.
10
Untuk Monyet) atau-1
tanpa pertandinganPenjelasan
sumber
¦
, tetapi saya tidak berpikir untuk menyusun ulang setelah saya mengubah arti angka-angka :)