15
息子が手紙を見つけるのを手伝ってください
バックグラウンド 私の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 …