建立一个MU解谜器


16

MU的难题是,你看看你是否可以打开一个难题MIMU给出以下操作:

  1. 如果您的字符串以结尾I,您可以U在末尾添加a 。(例如MI -> MIU

  2. 如果您的字符串以开头M,则可以在M该字符串之后追加零件的副本。
    (例如MII -> MIIII

  3. 如果您的字符串包含三个连续I的,则可以将它们更改为U
    (例如MIII -> MU

  4. 如果您的字符串包含两个连续U的,则可以将其删除。(例如MUUU -> MU)。

您的任务是构建一个程序,该程序确定此命令是否适用于任何开始和结束字符串。

您的程序将使用两个字符串作为输入。每个字符串将包含以下内容:

  • M

  • 了一个字符串29 I年代和U的。

true如果第二个字符串可从第一个字符串到达​​,则您的程序将返回(或您的编程语言的表示形式/ YPLRT),false否则返回(或YPLRT)。

输入和输出示例:

MI  MII
true

MI  MU
false

MIIIIU  MI
true

任何语言中最短的代码均可胜出。


8
我目前正在阅读哥德尔(Gödel),埃舍尔(Escher),巴赫(Bach),然后考虑根据其章节进行“ 18洞高尔夫球场”研究。猜猜我现在必须找到一个新的“洞1”。;)
Martin Ender 2014年

这只是一个图形可及性问题,其本质已经被问过很多次了。
彼得·泰勒

1
@PeterTaylor我认为很可能无法通过明确搜索可达性图来解决。MIU规则具有很多结构,如果有一种直接算法可以测试可达性而无需搜索中间节点,我不会感到惊讶。例如,从到达的节点MI是完全M(I|U)*在那里的数量I不是3的倍数而这样的监督检查肯定使更短的代码。另外,我不知道中间步骤所需的字符串长度有先验约束,因此直接搜索可能根本不切实际。
xnor

1
我考虑了这个问题已有一段时间了,还没有找到一个不是蛮力的解决方案。如果没有人咬我,我建议发布一个更简单的问题版本,也许是从MI给定的可达字符串开始进行推导。
xnor 2014年

1
如果IM提供或输出应该是MUMMI什么?
Beta Decay

Answers:


7

SWI Prolog,183个字符

m(A,A).
m([i],[i,u]).
m([i,i,i|T],B):-m([u|T],B).
m([u,u|T],B):-m(T,B).
n([m|A],[m|B]):-(m(A,B);append(A,A,X),m(X,B)).
n(A,B):-m(A,B).
s(A,B):-atom_chars(A,X),atom_chars(B,Y),n(X,Y).

怎么样Prolog,(因为六个月内没有人回答)。要运行,只需使用“ s(mi,mu)”。该代码将原子分解为char,然后搜索解决方案。


2
这会错误地在上返回false s(mi,miiii),并且通常会返回任何需要多个应用规则2来证明的内容。
algorithmhark
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.