正如我们在这个问题中看到的,复杂逻辑语句可以用广义Minesweeper的简单连接词来表示。然而,通用扫雷舰仍然存在冗余。
为了避免这些冗余,我们定义了一个名为“广义-1扫雷者”的新游戏。
广义-1 Minesweeper是在任意图上播放的版本Minesweeper .图有两种类型的顶点,一种是“指示符”,一种是“值”。值可以是开的,也可以是关的(地雷或哑弹),但是它的状态对玩家来说是未知的。指示符告诉我们相邻的一个单元正好在(地雷)上。指标本身不算作地雷。
例如,下面的通用扫雷板告诉我们,A细胞和B细胞要么都是地雷,要么两者都不是地雷。

(在图表中,指示符用灰色标记,而值为白色)
与普通扫雷船不同,在这种情况下,你点击“关闭值”来显示指示物,通用扫雷机中没有这样的机械装置。玩家只需确定图表的哪些状态可以满足其指示符。
您的目标是在通用-1型扫雷器中制作2。您将在通用-1 Minesweeper中构建一个结构,这样就有8个特定的单元格,所有可能的值配置都有两个单元格。这意味着它的行为与2在传统扫雷舰上的行为完全一样。在编写解决方案时,不应该考虑值单元格的特定值。(在回答H.PWiz的问题时,允许某些值单元格可以从状态中还原)
你的答案将由最终图中的顶点数减去8(对于8个输入),分数越低越好。如果在这个公制中有两个答案,则打结器将是边的数目。
发布于 2018-02-01 22:37:24
基于H.PWiz的答案中的逻辑门。
A&B C&D E&F G&H
| | | |
b--1--a d--1--c f--1--e h--1--g
| | | | | | | | | | | |
1--?--1 1--?--1 1--?--1 1--?--1
| | | | | | | |
A B C D E F G H当两个输入打开时,每个*都是开着的。为了处理单个输入的情况,我们使用中间值a=A&!B等。将所有三个值( a、b和A&B )连接到二级门的输入可以有效地输入A|B (这可以将顶点保存在!(!A&!B)之上):
* *
| |
#--1--# #--1--#
| | | | | |
1--?--1 1--?--1
||| ||| ||| |||
A|B C|D E|F G|H这些*s是开的,如果它们的两个输入(对应于四个原始输入)是开的,除了上面已经讨论过的对的情况。同时,我们可以将#*#节点连接到最终的门上。因此,我们有以下结果:
A&B
C&D
E&F
G&H
(A|B)&(C|D) [4 cases]
(E|F)&(G|H) [4 cases]
(A|B|C|D)&(E|F|G|H) [16 cases]这涵盖了两个投入的全部28种情况。然后,将最后一个指示符与这七个值连接起来。如果打开的输入少于两个,那么这些输入都不会打开,因此指示符将关闭。如果有两个以上的输入打开,那么其中一个以上的输入就会打开,并且指示符将关闭。
发布于 2018-02-01 16:57:51
我昨晚想出了这个答案,但没有发出去,因为那是一个很高的分数。但是,由于它比其他答案要好得多,所以我想我应该把它发出去。
我在ABCDEFGH中的所有28对值单元格上使用以下设置
?*
|
?--1--?
| | |
1--?--1
| |
A B?表示不在ABCDEFGH中的值单元格。在这里,当?*是ON时,A和B都是on。否则,A和B可能处于任何其他配置中。
我把所有28个?*s连接到一个指示细胞上。这意味着在ABCDEFGH中只有一对将有两个ON。这足以保证我的输出单元格中有两个是打开的。
发布于 2018-02-01 16:24:15
只是为了证明这是可能的。稍后,我将通过一些缓存来改进这一点。
(希望没有代码错误)
我试着编写数学程序这里来检查程序的有效性,但是它可能无法工作,因为变量太多了。
结果由计算机程序在网上试试!生成。
我用一个像这样的门:
(f)
|
|
(#)
/ \
/ \
(d) (e)
/ \
/ \
(#) --- (c) --- (#)
.' '.
.' '.
(a) (b)其中(#)为1-指标,(a) .(f)是值。
然后,
c = (not a) and (not b)
d = (not a) and b
e = a and (not b)
f = a xnor b还有,这扇门
(a) ----- (#) ----- (b)给出
b = not a。使用这两种类型的门,您可以构建任何表达式。
当然,这是为了断言(a)必须是真的:
(a) ----- (#)https://codegolf.stackexchange.com/questions/154539
复制相似问题