5月4日の直後にスタートレックの参照を含むチャレンジを与えることは嫌われるかもしれませんが、ここに行きます。
あなた、ルーク、アナキン、パルパティーン、ヨーダ、ハンソロは、ロック、ペーパー、シザー、トカゲ、スポックの非常識なトーナメントに参加しています。
ここでの問題は、固定された順序の移動のみを使用できることです。注文が「R」の場合、すべてのプレイヤーに負けるか勝つまで、Rockを使用する必要があります。注文がRRVの場合、2つのロックとそれに続くスポックを使用し、勝つか負けるまで繰り返す必要があります。
Luke、Anakin、Palpatine、Yoda、Han Soloがそれぞれの注文を提出しました。専門のハッカーであるあなたは、それぞれの注文を手に入れました!
この知識があれば、トーナメントの順序を設計することになります。誰もが勝ちたいので、全員を破ってトーナメントに勝つような順序を作成します。しかし、これはすべての状況下で可能とは限りません。
勝利の可能性がある注文がある場合は、それを印刷してください。勝つ方法がない場合は、-1(または0またはFalseまたは「不可能」)を出力します。
入力:5つの注文のリスト
出力:単一の注文または-1
サンプル入力1
R
P
S
L
V
サンプル出力1
-1
説明1
あなたが最初の動きで何をプレイしても、あなたを打ち負かす人が少なくとも一人はいるでしょう。したがって、あなたが勝つことは不可能です。
サンプル入力2
RPS
RPP
R
SRR
L
サンプル出力2
RPSP
説明2
最初の動きでロックをプレイすると、最終的に「L」と「SRR」を破って残りの部分と結びつきます。これは、トカゲとハサミがロックに負けたためです。次にペーパーをプレイすると、「R」を破って残りの2を引きます。これは、ロックがペーパーに負けたためです。次にハサミをプレイすると、ハサミが紙を破るときに「RPP」に勝ちます。
最後に、PaperがRockを倒すと、Paperで「RPS」を破ります。
表記法のリストを次に示します(5つのリテラルを使用できますが、回答で指定してください)。
R : Rock
P : Paper
S : Scissor
L : Lizard
V : Spock
すべての可能な結果のリストは次のとおりです。
winner('S', 'P') -> 'S'
winner('S', 'R') -> 'R'
winner('S', 'V') -> 'V'
winner('S', 'L') -> 'S'
winner('S', 'S') -> Tie
winner('P', 'R') -> 'P'
winner('P', 'V') -> 'P'
winner('P', 'L') -> 'L'
winner('P', 'S') -> 'S'
winner('P', 'P') -> Tie
winner('R', 'V') -> 'V'
winner('R', 'L') -> 'R'
winner('R', 'S') -> 'R'
winner('R', 'P') -> 'P'
winner('R', 'R') -> Tie
winner('L', 'R') -> 'R'
winner('L', 'V') -> 'L'
winner('L', 'S') -> 'S'
winner('L', 'P') -> 'L'
winner('L', 'L') -> Tie
winner('V', 'R') -> 'V'
winner('V', 'L') -> 'L'
winner('V', 'S') -> 'V'
winner('V', 'P') -> 'P'
winner('V', 'V') -> Tie
これはコードゴルフですであるため、最小のバイト数が勝ちます。
PS:テストケースがさらに必要かどうかを教えてください。