バックグラウンド
私の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具体的にはなぜですか?