あなたは通りを見ていて、誰かがゴミを残しました!ゴミ箱にゴミ箱を置くことによって、問題を解決するのを助けるプログラムを書く必要があります。
タスク
アベニューは、印刷可能なASCII文字列で構成されています。例:
[[](dust)[]] car ((paper)vomit) (broken(glass)) [[] (rotten) fence (dirty)
ここにあるブラケットのいくつかは、他に類を見ません。それらはおとりです。私たちが気にするのは、対応する括弧のセットです。
ゴミ箱は始まる文字列で、[
で終わる]
、そして内部で一致したブラケットと括弧で。例えば、[]
および[[](dust)[]]
上記の文字列でゴミ箱です。
ゴミ袋はで始まる文字列で、(
で終わる)
、そして内部で一致したブラケットと括弧で。たとえば(dust)
、上の文字列のゴミ袋です。
ゴミ袋の一部がすでにゴミ箱に入っている可能性があります。ただし、少なくとも1つは除外されるため、ゴミ箱をすべてゴミ箱に入れるようにゴミ箱を移動する必要があります。具体的には、現在ゴミ箱の中にない各ゴミ袋(つまり、そのゴミ箱の部分文字列)について、それを文字列の現在の場所から削除し、代わりにゴミ箱の中にある場所に挿入する必要があります。 。
ここに追加のルールがあります。ガベージコレクターにあまりお金をかけたくないため、ガベージコレクターのルートは通りに沿って右から左に移動するので、各ゴミ袋を左に移動します(最も重要な基準は、すべて)および可能な最短距離(左に移動している限り)。したがって、たとえば、唯一の正しい出力
[can1](bag)[can2]
です
[can1(bag)][can2]
(バッグを1文字左に移動)。さらに、バッグは同じ相対的順序にとどまる必要があります。
[can](bag1)(bag2)
になる必要があります
[can(bag1)(bag2)]
(つまり(bag2)
、の左側に置くことはできません(bag1)
。)
明確化
- 一番左のゴミ箱の左側にゴミ袋はありません。ゴミ箱を左に動かすと、いつでもゴミ箱をすべて開けます。
- 移動するバッグは常に少なくとも1つあります。複数あるかもしれません。
- ゴミ袋の中にゴミ箱は決してありません(缶は価値がありすぎて捨てることができません)。
- バッグがすでに缶に入っている場合は、そのままにしておきます。
- 入力と出力の末尾の空白(改行を含む)が異なっていても問題ありません。
例:
入力:
[[](dust)[]] car ((paper)vomit) (broken(glass)) [[] (rotten) fence (dirty)
出力:
[[](dust)[]((paper)vomit)(broken(glass))] car [[(rotten)(dirty)] fence
入力:
[]] (unusable) door (filthy) car
出力:
[(unusable)(filthy)]] door car