Phù hợp với điệu nhảy Shantae


8

Trong trò chơi Shantae ban đầu , có những điệu nhảy biến đổi mà bạn phải nhập kịp thời bằng cách sử dụng D-Pad, A và B. Nếu bạn hoàn thành một chuỗi được xác định trước trong khi nhảy, bạn sẽ chuyển thành dạng tương ứng (hoặc dịch chuyển tức thời hoặc chữa lành) . Nhiệm vụ của bạn là xuất hiệu ứng tương ứng khi có đầu vào. Điều hấp dẫn là bạn có thể có những bước nhảy ngoại lai trong đầu vào, cả trước và sau, và thậm chí có thể không có một điệu nhảy nào trong đầu vào.

Những điệu nhảy

Sử dụng UDLRABcho các bước nhảy:

  • Con khỉ: DR
  • Con voi: DL
  • Nhện: DA
  • Harpy: DB
  • Tinkerbat: DUU
  • Chữa lành: DUA
  • Thị trấn mực: DULR
  • Thị trấn nước: DURLAB
  • Thị trấn Oasis: DURRBA
  • Đoàn xe Zombie: DULLBA
  • Thị trấn cướp: DUBLBR

Mã hóa

Đầu vào: một chuỗi các bước nhảy. Điều này có thể chứa các giá trị Lên, Xuống, Trái, Phải, B, A và Chờ. Sử dụng bất kỳ mã hóa thuận tiện.

Đầu ra: một giá trị tương ứng với điệu nhảy khớp đầu tiên trong chuỗi hoặc giá trị riêng biệt nếu không có kết quả khớp. Bạn có thể mã hóa điều này theo bất kỳ cách thuận tiện.

Ví dụ

Sử dụng .để chờ đợi:

  • DR → Khỉ
  • UUU.DLUAB → Voi
  • L.DDBALL → Giòn
  • LRLRDURURLABKhông khớp
  • DUBLBR → Thị trấn cướp
  • DURLBAKhông khớp
  • DDUDR → Khỉ
  • RLABKhông khớp
  • .DUUBBB → Tinkerbat
  • DADRDL → Nhện
  • .DURRBADR → Thị trấn Oasis
  • DURR.BAKhông khớp

Các quy tắc / ghi chú khác

  • Áp dụng quy tắc chuẩn về sơ hở và phương pháp IO
  • Mô tả mã hóa của bạn cho các bước nhảy và nhảy phù hợp.
  • Có thể có nhiều hơn một điệu nhảy trong đầu vào. Nếu đó là trường hợp, chỉ khớp với cái đầu tiên xuất hiện trong đầu vào.
  • Chờ đợi làm gián đoạn điệu nhảy.


Bây giờ testcase 4 kết thúc DURLAB, đó là Water Town
Skidsdev

@Skidsdev. Nắm bắt tốt. Tôi có nghĩa là để làm cho một trường hợp thử nghiệm không có ở đó.
Beefster

1
Bạn có thể mã hóa điều này theo bất kỳ cách thuận tiện nào : chúng tôi có thể trả lại chuỗi phù hợp không, ví dụ "DURRBA" cho Oasis Town?
Arnauld

1
Ngẫu nhiên: Từ lâu, chỉ sử dụng 'đầu vào' và 'chờ' (nghĩa là các mục nhập theo thời gian) các sòng bạc (ở một quốc gia mà tôi sẽ đề cập và bạn không thể đoán và đó không phải là quốc gia của tôi) (được kết nối với tôi chỉ bằng "internet") đã hack phần mềm máy đánh bạc của họ tại nguồn để người chơi có thể nhân nồi đầu vào của họ với một số lượng lớn. Sau đó, họ chơi, thắng hoặc thua và rút tiền với số tiền nhiều hơn số tiền họ nhập. Đó là trong khóa học do phát hiện và cố định. Tôi đã xác định phương pháp dựa trên một mô tả chung về những gì đang xảy ra nói chung - được cung cấp bởi một nhà điều tra bảo mật khó hiểu.
Russell McMahon

Câu trả lời:


3

JavaScript (ES6),  92 88 61  59 byte

Đã lưu 2 byte nhờ một đề xuất từ ​​@tsh

Mong UdLRABđợi cho các bước nhảy và .chờ đợi. Đầu ra không được xác định nếu không có kết quả khớp hoặc chuỗi vũ điệu phù hợp (ví dụ: dRđối với Khỉ hoặc dURLABđối với Thị trấn nước).

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

Hãy thử trực tuyến!

hoặc dùng thử với đầu ra nâng cao


R|L|A|B-> [RLAB]?
tsh

@tsh Trên thực tế, d([A-R]|U...)rõ ràng là tốt vì bất kỳ mã hóa thuận tiện cũng có thể được sử dụng cho đầu vào. Cảm ơn!
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}

Hãy thử trực tuyến!

-11 byte nhờ câu trả lời của Arnauld khiến tôi nhận ra đầu ra có thể được đơn giản hóa
-8 byte nhờ flawr trong trò chuyện giúp tôi kiểm tra mảng golf trống
-12 byte nhờ Shaggy

Đưa đầu vào dưới dạng một chuỗi có định dạng giống như các trường hợp thử nghiệm OP.

Xuất ra chuỗi nhảy phù hợp trừ đi phần dẫn Dcho một trận đấu hoặc undefinedkhông có kết quả khớp nào.

Số nguyên tương ứng với chỉ mục của trận đấu trong mảng này (được lập chỉ mục 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

Có lẽ là phòng để chơi golf, đặc biệt là trong việc nén các bước nhảy.

Giải trình

Cách tiếp cận chung

Lặp lại qua chuỗi đầu vào, loại bỏ ký tự đầu tiên mỗi lần và kiểm tra xem chuỗi kết quả có bắt đầu bằng chuỗi nhảy hợp lệ không.

Toàn bộ điều này chỉ là một vòng lặp for bên trong một vòng lặp for, tôi sẽ chia nó thành 3 phần:
- Điều kiện
- Vòng lặp bên trong
- Bài đăng bên ngoài

Tình trạng

Đây là điều kiện kết thúc cho vòng lặp bên ngoài, IE trong khi điều này là đúng, tiếp tục lặp.
Khá đơn giản:

d

dlà một chuỗi, trong JS chuỗi rỗng là falsey " dkhông trống".

Vòng trong

Đây là thứ xảy ra mỗi vòng lặp:

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

Vì vậy, trước tiên, chúng tôi xác định một mảng với:

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

Điều này tạo ra một mảng của tất cả các chuỗi bước nhảy, thiếu Dphần đầu của mỗi chuỗi (Tất cả đều bắt đầu bằng D). Chúng tôi sẽ gọi mảng này x
Có thể có tiềm năng chơi golf đáng kể ở đây.

Sau đó chúng tôi lặp lại qua từng mục trong x(được lưu trữ z) và chạy như sau:

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

Điều này sử dụng d.searchđể trả về chỉ mục trong chuỗi 'D'+z. Nếu và chỉ khi d bắt đầu bằng 'D'+z, điều này sẽ trở lại 0, đó là một giá trị falsey trong JS.
Như vậy, !d.searchsẽ chỉ đúng khi chuỗi bắt đầu bằng 'D'+z.

Lưu ý: Đây là lý do tại sao chúng tôi bỏ qua D s x, vì nó giúp chúng tôi tiết kiệm 10 byte (1 cho mỗi lần nhảy) và chỉ tốn một byte duy nhất trong tìm kiếm này

Sau đó, nếu tìm kiếm phù hợp, chúng tôi trở lại z . Đây là điệu nhảy chúng tôi tìm thấy, không có sự dẫn dắt D.

Nếu không, chúng tôi tiếp tục lặp.

Bài viết bên ngoài

Đây là thứ xảy ra ở cuối mỗi lần lặp của vòng lặp bên ngoài:

d=d.slice(1)

Chỉ cần xóa ký tự đầu tiên khỏi d

Không có trận đấu

Nếu dtrở nên trống rỗng và không có kết quả khớp nào được tìm thấy, kết thúc chức năng được đạt tới. Điều này hoàn toàn trả về undefinedtheo hành vi JavaScript tiêu chuẩn


@Shaggy Tôi chỉ substr -> slicetự mình thực hiện thay đổi và tôi quên rằng đó dlà một chuỗi, không phải là một mảng. Chuỗi rỗng là falsey: P Và nắm bắt tốt về niềng răng, tôi đã quên mất toàn bộ điều 1 tuyên bố con
Skidsdev

@Shaggy ah tốt đẹp! Tôi giả sử d.searchsẽ trả về 0 nếu chuỗi tìm kiếm bắt đầu d, tất nhiên đó là giá trị
falsey

Vâng. Nó giống như indexOfnhưng nó hỗ trợ RegEx, không liên quan ở đây.
Xù xì

Và tất nhiên nó cũng ngắn hơn 1 byte;)
Skidsdev


2

Võng mạc ,53 43 42 37 byte

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

Hãy thử trực tuyến!

Hơi lệch từ đầu vào tiêu chuẩn và đầu ra để sử dụng ;:như DUtương ứng. Cảm hứng từ tsh , tiết kiệm 5 byte.

Kết hợp điệu nhảy đầu tiên và xuất ra nó, sau khi thấy câu trả lời của Arnauld . Đã lưu 10 byte nhờ Neil gợi ý sử dụng giai đoạn danh sách Lvà giới hạn đầu ra cho trận đấu đầu tiên. Đã lưu một byte nhờ tsh rút ngắn regex.

Đầu trang và chân trang chỉ cho phép nhiều đầu vào và làm cho đầu ra có thể đọc được, tương ứng.


43 byte . Có thể được dịch sang Retina 0.8.2 bằng cách sử dụng 1!thay vì 0L, nhưng trong trường hợp đó, chân trang sẽ không hoạt động ( 1M!sẽ hoạt động ngay cả với chân trang).
Neil

@Neil Cảm ơn golf, tôi luôn quên về L.
FryAmTheEggman

Có lẽ R|L|A|B-> [RLAB]?
tsh

@tsh Cảm ơn! Đó là một sự tiếp quản từ cách tiếp cận trước đây của tôi và tôi chưa bao giờ kiểm tra nó.
FryAmTheEggman

Một bước nữa, D[RLAB]|DU(...)thay vào đó là gì?
tsh

1

Perl 5 -p , 47 byte

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

Hãy thử trực tuyến!

Trả về mã của điệu nhảy (được cho phép theo nhận xét của @ Arnauld) hoặc để trống nếu không khớp.


1

Than , 48 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

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

Tách chuỗi nén RDLDADBDUUDUADULRDURLABDURRBADULLBADUBLBR(chứa tất cả các điệu nhảy ngoại trừ hàng đầu D) trên D, sau đó đặt tiền tố Dtrở lại cho mỗi mục.

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

Đối với mỗi điệu nhảy, nối nó với đầu vào và tìm vị trí đầu tiên của điệu nhảy trong phần nối, cộng với độ dài của điệu nhảy. Đối với các điệu nhảy không tìm thấy, điều này có nghĩa là kết quả sẽ là độ dài của chuỗi đầu vào thay vì -1.

≔⌊...η

Lấy tối thiểu những kết quả đó, tức là vị trí và độ dài của điệu nhảy xuất hiện đầu tiên.

✂θ§η⁰Ση

Trích xuất điệu nhảy đó từ chuỗi gốc.


1

Thạch , 33 28 byte

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

Hãy thử trực tuyến!

Đưa vào danh sách các số nguyên biểu thị các bước di chuyển:

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

Trả về một số nguyên được bao bọc cho câu trả lời hoặc danh sách tất cả các số nguyên này không khớp:

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

Liên kết TIO bao gồm mã trong phần chân trang để dịch các chuỗi này trở lại các chuỗi trong câu hỏi, nhưng không cần thiết để chương trình hoạt động bằng cách sử dụng các số nguyên được chỉ định ở đây.


0

05AB1E , 104 byte

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

Hãy thử trực tuyến!


Tôi đã viết điều quái dị này mà không nhận ra tôi có thể sử dụng số cho việc di chuyển tên ...


0

sfk , 119 91 byte

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

Hãy thử trực tuyến!

Đưa ra điệu nhảy đầu tiên như một chuỗi các động tác.

( xexchỉ là một trình chỉnh sửa luồng và trong trường hợp _<pattern>_này là văn bản tìm kiếm)


0

05AB1E , 28 27 byte

Đã lưu 1 byte nhờ Grimy

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

Hãy thử trực tuyến!

Xuất kết quả khớp (tức là 10cho Khỉ) hoặc -1không khớp

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

Giải trình

Œ.Δ                           # 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


@Grimy: Cảm ơn! Tôi đã có một phiên bản trước (dài hơn) mà tôi không cần ¦, nhưng tôi không nghĩ đến việc sắp xếp lại sau khi tôi thay đổi ý nghĩa của các con số :)
Emigna

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.