バックグラウンド
私の4歳の彼のラビから得たゲームに基づいています。
「目標」は、特定の順序で文字を「見つける」ことaecdb
です。レターカードのスタックが与えられますdaceb
。周期的ではありますが、指定された順序でのみスタックを検索できます。必要な手紙に出会ったら、それをスタックから取り出します。
目的
順序とスタック(相互の重複のない順列)を指定すると、ゲームのプレイ中に表示される一連の最上位スタック文字(すべて印刷可能なASCII)を見つけます。
ステップバイステップの例
aecdb
スタックを指定して順序を見つける必要がありますdaceb
。
スタックのトップd
:探しているもの(a
)ではないため、シーケンスに追加しd
、スタックを取得するために回転します:acebd
。
スタックのトップa
:はい!したがって、シーケンスに追加da
し、スタックから削除します:cebd
。
スタックのトップc
:探しているもの(e
)ではないため、シーケンスに追加しdac
、スタックを取得するために回転します:ebdc
。
スタックのトップe
:はい!したがって、シーケンスに追加dace
し、スタックから削除します:bdc
。
スタックのトップb
:探しているもの(c
)ではないため、シーケンスに追加しdaceb
、スタックを取得するために回転します:dcb
。
スタックのトップd
:探しているもの(c
)ではないため、シーケンスに追加しdacebd
、スタックを取得するために回転します:cbd
。
スタックのトップc
:はい!したがって、シーケンスに追加dacebdc
し、スタックから削除します:bd
。
スタックのトップb
:探しているもの(d
)ではないため、シーケンスに追加しdacebdcb
、スタックを取得するために回転します:db
。
スタックのトップd
:はい!したがって、シーケンスに追加dacebdcbd
し、スタックから削除します:b
。
スタックのトップb
:はい!したがって、シーケンスに追加dacebdcbdb
し、スタックから削除します:。
これで完了です。結果はdacebdcbdb
です。
リファレンス実装
def letters(target, stack):
string = ''
while stack:
string += stack[0]
if stack[0] == target[0]:
stack.pop(0)
target = target[1:]
else:
stack.append(stack.pop(0))
return string
print letters('aecdb', list('daceb'))
テストケース
try
、yrt
→yrtyry
1234
、4321
→4321432434
ABCDEFGHIJKLMNOPQRSTUVWXYZ
、RUAHYKCLQZXEMPBWGDIOTVJNSF
→RUAHYKCLQZXEMPBWGDIOTVJNSFRUHYKCLQZXEMPWGDIOTVJNSFRUHYKLQZXEMPWGIOTVJNSFRUHYKLQZXMPWGIOTVJNSRUHYKLQZXMPWIOTVJNSRUYKLQZXMPWOTVNSRUYQZXPWOTVSRUYQZXPWTVSRUYQZXWTVSRUYZXWTVSUYZXWTVUYZXWVYZXWYZXYZ
?
、?
→?
a
、a
→a a
abcd
、abcd
→abcd
99
具体的にはなぜですか?