アコーディオンは、私が最近出会ったソリティアカードゲームで、ほぼすべてのレイアウトが解けるが、信じられないほど難しい。ここでプレイできます。
ルール
52枚の顔カードがランダムな順序で表向きに配置されます。 ターンごとに、カードを新しいカードに交換します。
- スーツまたは番号を共有し、
- 1(隣接)または3(間に2枚のカード)の距離にあります。
1枚のカードが残っているとき、ゲームは勝ちます。各入力は解けると仮定できます。交換したカードは、常に交換するカードの前にある必要があります。
例
例として、次のレイアウトを検討します。
2H,2S,1S,2D (H: Hearts, S: Spades, D: Diamonds)
ここには3つの可能な動きがあります:
- を
2H
隣接するに置き換えて、2S
最終的に2S,1S,2D
- を
2S
隣接するに置き換えて、1S
最終的に2H,1S,2D
- 置き換える
2H
と2D
(3の距離で)、私たちはで終わります2D,2S,1S
これらの3つの動きのうち、最後の1つだけが勝つ可能性があります(2D <- 2S
、次にを置き換えることで勝ちます2S <- 1S
)。
入出力
あなたの仕事は、アコーディオンソルバーを書くことです。カードのリストが渡され、ゲームを解決するために動きのリストを返す必要があります。
カードのリストはコンマ区切りの文字列として渡されます。各カードは、数値を表す整数として渡され、次にスーツを表す文字として渡されます。
置換のリストをコンマ区切りの文字列として返す必要があります。各置換は、Card <- Card
上記のカード形式に準拠した形式です。各ペアの最初のカードは、交換されるカードです。
テストケース:
5H,1C,12S,9C,9H,2C,12C,11H,10C,13S,3D,8H,1H,12H,4S,1D,7H,1S,13D,13C,7D,12D,6H,10H,4H,8S,3H,5D,2D,11C,10S,7S,4C,2H,3C,11S,13H,3S,6C,6S,4D,11D,8D,8C,6D,5C,7C,5S,9D,10D,2S,9S
5H,9C,11H,7S,7D,12D,6H,10S,3H,4D,12C,2S,3C,5C,7H,6S,1H,8S,2H,11S,4C,10D,12H,9H,2D,4H,6C,13H,11C,2C,10H,8C,1S,11D,3S,12S,7C,5D,13S,8D,4S,6D,13C,3D,8H,13D,1D,9D,9S,1C,5S,10C
7H,11C,8C,7S,10D,13H,4S,10C,4D,2C,4H,13D,3C,2H,12C,6C,9H,4C,12H,11H,9S,5H,8S,13S,8H,6D,2S,5D,11D,10S,1H,2D,5C,1C,1S,5S,3H,6S,7C,11S,9C,6H,8D,12S,1D,13C,9D,12D,3D,7D,10H,3S
この競争はコードゴルフですが、私は特に時間効率のよいソリューションに興味があり、独創的なソリューションに報奨金を授与する可能性があります。とはいえ、天文学的な時間を要する解決策は今でも受け入れられます(16枚のカード、4スーツのデッキなど、より小さなデッキでテストすることをお勧めします)。