Shantae Dance Matching

8

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 UDLRABuntuk 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 → Monyet
  • UUU.DLUAB → Gajah
  • L.DDBALL → Harpy
  • LRLRDURURLABTidak cocok
  • DUBLBR → Kota Bandit
  • DURLBATidak cocok
  • DDUDR → Monyet
  • RLABTidak cocok
  • .DUUBBB → Tinkerbat
  • DADRDL → Laba-laba
  • .DURRBADR → Kota Oasis
  • DURR.BATidak 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.
Beefster
sumber
1
Terkait
Beefster
Sekarang testcase 4 berakhir DURLAB, yaitu Water Town
Skidsdev
@ Skidsdev. Tangkapan yang bagus. Saya bermaksud membuat kasus ujian tidak cocok di sana.
Beefster
1
Anda dapat menyandikan ini dengan cara yang mudah : bisakah kami mengembalikan urutan yang cocok, misalnya "DURRBA" untuk Kota Oasis?
Arnauld
1
Acak: Dulu, hanya menggunakan 'masukan' dan 'tunggu' (yaitu entri koin berjangka waktu) kasino (di negara yang tidak akan saya sebutkan dan yang tidak mungkin Anda tebak dan yang bukan negara saya) (terhubung ke saya hanya dengan "internet") perangkat lunak mesin slot mereka diretas pada sumber sehingga pemain dapat melipatgandakan pot input mereka dengan jumlah yang lebih besar. Mereka kemudian bermain, menang atau kalah dan diuangkan dengan jauh lebih banyak dari yang mereka miliki. Itu pada waktunya ditemukan dan diperbaiki. Saya mengidentifikasi metode berdasarkan pada deskripsi umum tentang apa yang terjadi secara keseluruhan - dipasok oleh penyelidik keamanan yang bingung.
Russell McMahon

Jawaban:

3

JavaScript (ES6),  92 88 61  59 byte

Disimpan 2 byte berkat saran dari @tsh

Berharap UdLRABuntuk tarian bergerak dan .menunggu. Keluaran tidak terdefinisi jika tidak ada yang cocok, atau urutan tarian yang cocok (misalnya dRuntuk Monkey atau dURLABuntuk Kota Air).

s=>(/d([A-R]|U(U|A|LR|RLAB|RRBA|LLBA|BLBR))/.exec(s)||0)[0]

Cobalah online!

atau Cobalah dengan peningkatan output

Arnauld
sumber
R|L|A|B-> [RLAB]?
tsh
@ tsh Sebenarnya, d([A-R]|U...)tampaknya baik-baik saja karena penyandian yang nyaman dapat digunakan untuk input juga. Terima kasih!
Arnauld
2

JavaScript (Node.js) , 179 164 153 148 137 115 byte

d=>{for(;d;d=d.slice(1))for(z of "R.L.A.B.UU.UA.ULR.URLAB.URRBA.ULLBA.UBLBR".split`.`)if(!d.search('D'+z))return z}

Cobalah 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 Duntuk pertandingan, atauundefined tanpa pertandingan.

Integer terkait dengan indeks kecocokan dalam larik ini (diindeks 0):

0  - Monkey: DR
1  - Elephant: DL
2  - Spider: DA
3  - Harpy: DB
4  - Tinkerbat: DUU
5  - Heal: DUA
6  - Scuttle Town: DULR
7  - Water Town: DURLAB
8  - Oasis Town: DURRBA
9  - Zombie Caravan: DULLBA
10 - Bandit Town: DUBLBR

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

dadalah string, dalam string kosong JS falsey " dtidak kosong".

Loop Dalam

Ini adalah hal-hal yang terjadi pada setiap loop:

for(z of "R.L.A.B.UU.UA.ULR.URLAB.URRBA.ULLBA.UBLBR".split`.`)

Jadi pertama-tama kita mendefinisikan sebuah array dengan:

"R.L.A.B.UU.UA.ULR.URLAB.URRBA.ULLBA.UBLBR".split`.`

Ini menciptakan sebuah array dari semua string gerakan tarian, kehilangan Ddi awal masing-masing (Mereka semua mulai dengan D). Kami akan memanggil array x
ini. Mungkin ada potensi golf yang signifikan di sini.

Kami kemudian mengulangi setiap item dalam x(disimpan dalam z), dan menjalankan yang berikut:

if(!d.search('D'+z))return z

Ini digunakan d.searchuntuk mengembalikan indeks dalam string 'D'+z. Jika dan hanya jika d dimulai dengan 'D'+z, ini akan kembali 0, yang merupakan nilai falsey di JS.
Dengan demikian, !d.searchakan hanya menjadi kenyataan ketika string dimulai dengan 'D'+z.

Catatan: Inilah sebabnya kami menghilangkan nilai Ds x, karena menghemat 10 byte (1 per tarian), dan hanya dikenakan biaya satu byte dalam pencarian ini

Kemudian, jika pencarian cocok, kami kembali z. Ini adalah tarian yang kami temukan, tanpa pemimpin D.

Jika tidak, kami terus mengulang.

Pos Luar

Ini adalah hal-hal yang terjadi pada akhir setiap iterasi dari loop luar:

d=d.slice(1)

Hapus saja karakter pertama dari d

Tidak cocok

Jika dmenjadi kosong dan tidak ada kecocokan yang ditemukan, akhir fungsi tercapai. Ini secara implisit mengembalikan undefinedsesuai perilaku JavaScript standar

Skidsdev
sumber
@ Shaggy Saya baru saja membuat substr -> sliceperubahan sendiri, dan saya selalu lupa itu dadalah string, bukan array. String kosong adalah falsey: P Dan tangkapan yang bagus pada kawat gigi, saya lupa tentang hal pernyataan 1 anak keseluruhan
Skidsdev
@ Shaggy ah bagus! Saya berasumsi d.searchakan mengembalikan 0 jika string pencarian berada di awal d, yang tentu saja merupakan nilai
falsey
Ya. Agak seperti indexOftetapi mendukung RegEx, yang tidak relevan di sini.
Shaggy
Dan tentu saja juga 1 byte lebih pendek;)
Skidsdev
82 byte
Shaggy
2

Retina ,53 43 42 37 byte

0L`;\w|;:(:|A|LR|RLAB|RRBA|LLBA|BLBR)

Cobalah online!

Sedikit menyimpang dari input dan output standar untuk memanfaatkan masing ;:- DUmasing. Inspirasi dari tsh , menghemat 5 byte.

Cocokkan tarian pertama dan tampilkan, setelah melihat jawaban Arnauld . Disimpan 10 byte berkat Neil menyarankan menggunakan tahap daftar Ldan 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.

FryAmTheEggman
sumber
43 byte . Dapat diterjemahkan ke Retina 0.8.2 dengan menggunakan 1!alih-alih 0L, tetapi dalam kasus itu footer tidak akan berfungsi ( 1M!akan bekerja bahkan dengan footer).
Neil
@Neil Terima kasih untuk golfnya, saya selalu lupa L.
FryAmTheEggman
Mungkin R|L|A|B-> [RLAB]?
tsh
@ terima kasih! Itu adalah peninggalan dari pendekatan saya sebelumnya dan saya tidak pernah memeriksanya.
FryAmTheEggman
Satu langkah lagi, bagaimana dengan D[RLAB]|DU(...)sebaliknya?
tsh
1

Perl 5 -p , 47 byte

/D([RLAB]|U(U|A|LR|LLBA|RLAB|RRBA|BLBR))/;$_=$&

Cobalah online!

Mengembalikan kode tarian (diizinkan sesuai komentar @ Arnauld) atau kosong jika tidak cocok.

Xcali
sumber
1

Arang , 48 byte

≔⌊E⁺D⪪”{➙∧⪫⁻Y⟧¹⊟AOP9GKπ⁸Pa↷VB”D⟦⌕⁺θιιLι⟧η✂θ§η⁰Ση

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

⁺D⪪”{➙∧⪫⁻Y⟧¹⊟AOP9GKπ⁸Pa↷VB”D

Split string terkompresi RDLDADBDUUDUADULRDURLABDURRBADULLBADUBLBR(yang berisi semua tarian kecuali untuk memimpin D) aktif D, dan kemudian awali Dkembali ke setiap entri.

E...⟦⌕⁺θιιLι⟧

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.

Neil
sumber
1

Jelly , 33 28 byte

“¡ịḟ½NỵC\HỤĊȷṗ~’b6ṣ0;€0ɓUwⱮM

Cobalah online!

Dibawa sebagai input daftar bilangan bulat yang mewakili gerakan:

0 D
1 U
2 R
3 B
4 L
5 A
6 .

Mengembalikan bilangan bulat yang dibungkus untuk jawabannya, atau daftar semua bilangan bulat ini tanpa kecocokan:

1 Monkey
2 Harpy
3 Elephant
4 Spider
5 Tinkerbat
6 Heal
7 ScuttleTown
8 OasisTown
9 WaterTown
10 BanditTown
11 ZombieCaravan
1,2,3,4,5,6,7,8,9,10,11 NoMatch

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.

Nick Kennedy
sumber
0

05AB1E , 104 byte

'dð.•—Áå•«•¼L?D/8¢Am.Z¼ž•6BSèJ#«å.•g³ç¼…¬ÿ¬Õ‚YÙ•“ÆÚàæɾ ÿ“#.•664Îè¡HĆ∍•¸«“scuttle„©Ê´ bandit“#ð“‰à“«««sÏ

Cobalah online!


Saya menulis keburukan ini tanpa menyadari bahwa saya dapat menggunakan angka untuk memindahkan nama ...

Guci Gurita Ajaib
sumber
0

sfk , 119 91 byte

xex -i -firsthit
_DR_
_DL_
_DA_
_DB_
_DUU_
_DUA_
_DULR_
_DURLAB_
_DURRBA_
_DULLBA_
_DUBLBR_

Cobalah online!

Memberikan tarian pertama yang hadir sebagai urutan gerakan.

( xexhanya editor aliran, dan dalam hal ini _<pattern>_adalah teks pencarian)

Suram
sumber
0

05AB1E , 28 27 byte

Disimpan 1 byte berkat Grimy

Œ.Δ•1Λ*#$ß‘«∍@…9\÷•6B1¡1ìQZ

Cobalah online!

Menghasilkan pertandingan (mis. 10Untuk Monyet) atau -1tanpa pertandingan

1 = D
0 = R
2 = L
3 = A
4 = B
5 = U
6 = .

Penjelasan

Œ.Δ                           # Find the first substring of the input
                         Q    # that is equal to
                          Z   # any element in
   •1Λ*#$ß‘«∍@…9\÷•           # 29058694378496950170872579685936
                   6B         # converted to base-6
                     1¡       # split on 1's
                       1ì     # with a 1 prepended to each
Emigna
sumber
@ Grimy: Terima kasih! Saya memiliki versi sebelumnya (lebih lama) di mana saya tidak memerlukannya ¦, tetapi saya tidak berpikir untuk menyusun ulang setelah saya mengubah arti angka-angka :)
Emigna