シャンテダンスマッチング


8

元Shantaeゲーム、変換を使用して、踊りながら、所定のシーケンスを完了する場合は、対応する形式に変換(またはテレポートまたは治癒)であろうD-パッド、A、及びBを使用して時間内に入力し、使用していることが踊りれます。あなたの仕事は、入力が与えられたときに対応する効果を出力することです。キャッチは、入力の前後で無関係なダンスの動きが発生する可能性があり、入力にダンスさえない場合があることです。

ダンス

UDLRABダンスの動きに使用:

  • モンキー: DR
  • 象: DL
  • クモ: DA
  • ハーピー: DB
  • Tinkerbat: DUU
  • 治癒: DUA
  • スカットルタウン: DULR
  • ウォータータウン: DURLAB
  • オアシスタウン: DURRBA
  • ゾンビキャラバン: DULLBA
  • バンディットタウン: DUBLBR

コーディング

入力:一連のダンスの動き。これには、上、下、左、右、B、A、および待機の値を含めることができます。便利なエンコーディングを使用します。

出力:シーケンスで最初に一致するダンスに対応する値、または一致しない場合は異なる値。これは便利な方法でエンコードできます。

.待機に使用:

  • DR →サル
  • UUU.DLUAB →象
  • L.DDBALL →ハーピー
  • LRLRDURURLAB一致しません
  • DUBLBR →バンディットタウン
  • DURLBA一致しません
  • DDUDR →サル
  • RLAB一致しません
  • .DUUBBB →ティンカーバット
  • DADRDL →クモ
  • .DURRBADR →オアシスタウン
  • DURR.BA一致しません

その他のルール/注意事項

  • 抜け穴とIOメソッドに関する標準規則が適用されます
  • ダンスの動きと一致するダンスのエンコーディングを説明してください。
  • 入力に複数のダンスがある場合があります。その場合は、入力に表示される最初のものにのみ一致します。
  • 待っているとダンスが中断されます。


テストケース4 DURLAB
はで終わります。つまり、

@Skidsdev。良いキャッチ。私はそこに不一致のテストケースを作るつもりでした。
Beefster

1
これは便利な方法でエンコードできます。たとえば、オアシスタウンの「DURRBA」など、一致するシーケンスを返すことができますか?
アルノー

1
ランダム:ずっと前に、「入力」と「待機」(つまり時限コイン入力)のみを使用して(私が言及しない国で、あなたが推測する可能性が低く、私の国ではない)カジノ(に接続されている)私は "インターネット"によってのみ)スロットマシンソフトウェアをソースでハッキングして、プレイヤーが入力ポットに大きな数字を掛けることができるようにしました。その後、彼らはプレーし、勝ちまたは負け、インプットよりもはるかに多くをキャッシュアウトしました。それはやがて発見されて修正されました。私は、全体的に何が起こっているかの一般的な説明に基づいて方法を特定しました-困惑したセキュリティ調査員によって提供されました。
ラッセルマクマホン

回答:


3

JavaScript(ES6)、 92 88 61  59バイト

@tshからの提案により2バイトを節約

UdLRABダンスの動きと.待つことを期待しています。一致がない場合は未定義、または一致するダンスのシーケンス(例:dRモンキーまたはdURLABウォータータウン)を出力します。

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

オンラインでお試しください!

または拡張出力で試してください


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

@tsh実際にd([A-R]|U...)は、入力にも便利なエンコーディングを使用できるため、明らかに問題ありません。ありがとう!
アーノールド

2

JavaScript(Node.js)179 164 153 148 137 115バイト

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}

オンラインでお試しください!

Arnauldの回答のおかげで-11バイトで出力が簡略化できることを理解できました
-8バイトのチャットでflawrを使ってゴルフアレイの空のチェックを支援します
-12バイトのShaggyです

OPテストケースと同じ形式の文字列として入力を受け取ります。

一致したダンス文字列から、D一致または先行なしの先行を引いたものを出力しundefinedます。

整数は、この配列内の一致のインデックスに対応します(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

おそらくゴルフ、特にダンスムーブセットの圧縮においては、余地があるでしょう。

説明

一般的方法

入力文字列を反復処理し、毎回最初の文字を削除して、結果の文字列が有効なダンス文字列で始まるかどうかを確認します。

全体はforループ内のforループです。3つの部分に分けます
。-状態
-内部ループ
-外部ポスト

状態

これは、外側のループの終了条件です。IEの場合はループし続けます。
非常にシンプル:

d

d 文字列です。JSでは、空の文字列は誤っています "d空ではありません」です。

インナーループ

これは各ループで発生するものです:

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

したがって、最初に次のように配列を定義します。

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

これにより、すべてのダンスムーブストリングの配列が作成さDれ、それぞれの先頭にがありません(すべてで始まりますD)。これを配列と呼びますx
ます。ゴルフには、おそらく大きな可能性があります。

次に、x(に格納されているz)の各項目を反復処理し、次を実行します。

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

これはd.searchの文字列でインデックスを返すために使用します'D'+z。場合にだけd 始まり'D'+z、これが返されます0JSでfalsey値です。
そのため、!d.search唯一の文字列で始まる時に真です'D'+z

注:これがDs を省略した理由ですx。10バイト(ダンスごとに1バイト)を節約でき、この検索で​​は1バイトしかかかりません。

次に、検索が一致すると、が返されzます。これは私たちが見つけたダンスで、リードはありませんD

そうでない場合は、ループし続けます。

アウターポスト

これは、外側のループの各反復の最後に発生するものです。

d=d.slice(1)

から最初の文字を削除するだけです d

勝ち目がない

dが空になり、一致するものが見つからなかった場合、関数の最後に到達します。これは暗黙的にundefined標準のJavaScript動作に従って戻ります


@Shaggy私はsubstr -> slice自分で変更を加えたばかりでd、配列ではなく文字列であることを忘れています。空の文字列は誤っています:P中かっこで十分なキャッチ、私は1つの子ステートメント全体を忘れました
Skidsdev

@シャギーああいい!d.search検索文字列がの先頭にある場合は0を返すと仮定します。dこれはもちろん誤った値です
Skidsdev

うん。ちょっと似indexOfていますが、ここでは無関係なRegExをサポートしています。
シャギー

もちろん、1バイトも短くなります;)
Skidsdev


2

網膜53 43 42 37バイト

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

オンラインでお試しください!

標準入力および標準出力からわずかに逸脱して、それぞれを使用;:DUます。5バイトを節約するtshからのインスピレーション。

見た後、最初のダンスを一致させて出力します Arnauldの回答をますNeilがリストステージの使用を提案しL、出力を最初の一致に制限したため、10バイト節約されました。正規表現を短縮するtshのおかげで、1バイトが節約さました

ヘッダーとフッターは複数の入力を可能にし、出力をそれぞれ読み取り可能にします。


43バイト。の1!代わりにを使用してRetina 0.8.2に変換できます0Lが、その場合、フッターは機能しません(1M!フッターでも機能します)。
ニール、

@ニールゴルフをありがとう、いつも忘れてしまいLます。
FryAmTheEggman

多分R|L|A|B-> [RLAB]
tsh

@tshありがとう!それは私の以前のアプローチからのホールドオーバーであり、私はそれをチェックしたことはありません。
FryAmTheEggman

もう一歩、D[RLAB]|DU(...)代わりにどうですか?
tsh


1

チャコール、48バイト

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

オンラインでお試しください!リンクはコードの詳細バージョンです。説明:

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

圧縮された文字列分割するRDLDADBDUUDUADULRDURLABDURRBADULLBADUBLBR(先頭を除くダンスのすべてが含まれているD上で)D、その後、接頭辞D、各エントリに背中を。

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

各ダンスについて、それを入力に連結し、連結内のダンスの最初の位置を見つけ、さらにダンスの長さも取得します。見つからなかったダンスの場合、これは結果がではなく、入力文字列の長さになることを意味し-1ます。

≔⌊...η

最初に現れたダンスの位置と長さなど、それらの結果の最小値を取ります。

✂θ§η⁰Ση

元の弦からそのダンスを抽出します。


1

ゼリー33 28バイト

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

オンラインでお試しください!

動きを表す整数のリストを入力として受け取ります。

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

回答に対してラップされた整数、または一致しない場合はこれらすべての整数のリストを返します。

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リンクには、フッターにコードが含まれており、これらを問題の文字列に変換し直しますが、プログラムがここで指定した整数を使用して機能する必要はありません。


0

05AB1E、104バイト

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

オンラインでお試しください!


名前の移動に数字を使用できることに気付かずに、この怪物を書きました...


0

sfk119 91バイト

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

オンラインでお試しください!

動きのシーケンスとして存在する最初のダンスを与えます。

(これxexは単なるストリームエディタであり、この場合_<pattern>_は検索テキストです)


0

05AB1E28 27バイト

Grimyのおかげで1バイト節約

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

オンラインでお試しください!

一致(10Monkeyの場合)または-1一致なしのいずれかを出力します

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

説明

Œ.Δ                           # 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:ありがとう!以前の(より長い)バージョンがあり、は必要ありませんでしたが¦、数字の意味を変更した後の並べ替えについては考えていませんでした:)
Emigna

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.