MUのパズルは、あなたが回すことができるかどうかを知るしたパズルであるMI
にMU
与えられ、次の操作:
文字列がで終わる場合、末尾に
I
aU
を追加できます。(例MI -> MIU
)文字列がで始まる場合、文字列の
M
後M
にパートのコピーを追加できます。
(例MII -> MIIII
)文字列に3つの連続した文字列が含まれている場合、
I
それらをに変更できますU
。
(例MIII -> MU
)文字列に2つの連続したが含まれている場合、
U
それらを削除できます。(例MUUU -> MU
)。
あなたの仕事は、これが任意の開始文字列と終了文字列に対して実行可能かどうかを判断するプログラムを構築することです。
プログラムは、入力として2つの文字列を受け取ります。各文字列は次で構成されます。
一つ
M
。最大29
I
のおよびU
の文字列。
プログラムはtrue
、2番目の文字列が最初の文字列から到達可能な場合(またはプログラミング言語の表現/ YPLRT)、false
そうでない場合(またはYPLRT)を返します。
入力と出力の例:
MI MII
true
MI MU
false
MIIIIU MI
true
これを行うための任意の言語の最短コードが勝ちです。
8
私は現在、ゲーデル、エッシャー、バッハを読んでおり、その後の章に基づいて「18ホールのゴルフコース」を行うことを考えています。今、新しい「穴1」を見つけなければならないと思います。;)
—
マーティン・エンダー14
これは単なるグラフ到達可能性の質問であり、その本質は以前に何度も尋ねられてきました。
—
ピーターテイラー14
@PeterTaylor到達可能性グラフの明示的な検索ではこれが解決されない可能性が高いと思います。MIUルールには多くの構造があり、中間ノードを検索せずに到達可能性をテストする直接的なアルゴリズムがあれば驚かないでしょう。たとえば、から到達可能なノード
—
xnor 14
MI
はM(I|U)*
、の数I
が3の倍数ではない場所です。そして、このような直接チェックにより、確実にコードが短くなります。また、中間ステップに必要な文字列の長さに関するアプリオリの境界がわからないため、直接検索は単純に非実用的かもしれません。
私はしばらくの間この問題について考えてきましたが、ブルートフォースではないソリューションに近づいていません。誰も噛まない場合は、おそらく
—
xnor 14
MI
特定の到達可能な文字列から派生するように、質問の簡単なバージョンを投稿することをお勧めします。
IM
が提供される場合、出力はどうなりMUMMI
ますか?