句法
~
不
/\
和
\/
或
t
真
f
假
P
,Q
,FISH
,等:变量
(运算符按优先顺序给出)
介绍
可以将某些布尔公式更改为不同的形式以使其更短。例如,公式
~(~P /\ ~Q)
可以更改为较短的形式
P\/Q
而公式
P \/ ~P
可以更改为较短的形式
t
挑战
在这一挑战,则需要编写一个程序,给定仅使用任何布尔式/\
,\/
,~
,t
,f
,括号,布尔变量(大写)和空白,输出一个最短的形式(由于可能存在多于一个的最短形式),该表达式的字符对于所有变量分配都是等效的。最短的代码(使用任何语言)均获胜。I / O可以任何合理的方式完成。
另外,由于很难验证答案,因此包括(但不是必需的)简短说明代码的工作原理将很有帮助。
在“挑战”部分中,您没有提及任何空格,但是示例中有它们。我应该处理吗?
—
Victor Stafusa 2014年
我认为弗洛伦特的观点是,通常来说这是一个很难解决的问题,更不用说打高尔夫球了。其中,解析器将需要能够确定两个任意公式是否具有相同的真值条件。如果p是原子的话,还原p ^〜p很容易,但是((A ^ B)v(A ^ C))^〜(A ^(BvC))呢?我认为这是一个很酷的问题,我很好奇看到一些回应。但是,如果您需要简短的解决方案,则可以通过A.使用前缀表示法和B.提供所需减少量的列表来使问题更有利于打高尔夫球。
—
dfernig 2014年
我有一个超过5000个字符的有效(高尔夫)解决方案。这太荒谬了。它由一个分词器,一个AST解析器,一个AST重写器和一个表达式生成器组成。
—
Florent 2014年
Mathematica可以通过一个函数调用(
—
佛罗伦萨
BooleanMinimize
)
作为记录,我现在有一个498个字符的解决方案,其sha256sum为
—
莉莉·钟
b9c98d088b78c30bb2108008a064a7b95722a4694d90ddad94a025c2eb4ed30a
。我将在以后发布实际代码,因为我不想抑制创造力。