首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一分为二

一分为二
EN

Code Golf用户
提问于 2018-01-31 22:12:37
回答 3查看 572关注 0票数 12

正如我们在这个问题中看到的,复杂逻辑语句可以用广义Minesweeper的简单连接词来表示。然而,通用扫雷舰仍然存在冗余。

为了避免这些冗余,我们定义了一个名为“广义-1扫雷者”的新游戏。

广义-1 Minesweeper是在任意图上播放的版本Minesweeper .图有两种类型的顶点,一种是“指示符”,一种是“值”。值可以是开的,也可以是关的(地雷或哑弹),但是它的状态对玩家来说是未知的。指示符告诉我们相邻的一个单元正好在(地雷)上。指标本身不算作地雷。

例如,下面的通用扫雷板告诉我们,A细胞和B细胞要么都是地雷,要么两者都不是地雷。

(在图表中,指示符用灰色标记,而值为白色)

与普通扫雷船不同,在这种情况下,你点击“关闭值”来显示指示物,通用扫雷机中没有这样的机械装置。玩家只需确定图表的哪些状态可以满足其指示符。

您的目标是在通用-1型扫雷器中制作2。您将在通用-1 Minesweeper中构建一个结构,这样就有8个特定的单元格,所有可能的值配置都有两个单元格。这意味着它的行为与2在传统扫雷舰上的行为完全一样。在编写解决方案时,不应该考虑值单元格的特定值。(在回答H.PWiz的问题时,允许某些值单元格可以从状态中还原)

评分

你的答案将由最终图中的顶点数减去8(对于8个输入),分数越低越好。如果在这个公制中有两个答案,则打结器将是边的数目。

EN

回答 3

Code Golf用户

发布于 2018-02-01 22:37:24

50顶点,89个边

基于H.PWiz的答案中的逻辑门。

代码语言:javascript
复制
  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等。将所有三个值( abA&B )连接到二级门的输入可以有效地输入A|B (这可以将顶点保存在!(!A&!B)之上):

代码语言:javascript
复制
      *              *
      |              |
   #--1--#        #--1--#
   |  |  |        |  |  |
   1--?--1        1--?--1
  |||   |||      |||   |||
  A|B   C|D      E|F   G|H

这些*s是开的,如果它们的两个输入(对应于四个原始输入)是开的,除了上面已经讨论过的对的情况。同时,我们可以将#*#节点连接到最终的门上。因此,我们有以下结果:

代码语言:javascript
复制
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种情况。然后,将最后一个指示符与这七个值连接起来。如果打开的输入少于两个,那么这些输入都不会打开,因此指示符将关闭。如果有两个以上的输入打开,那么其中一个以上的输入就会打开,并且指示符将关闭。

票数 3
EN

Code Golf用户

发布于 2018-02-01 16:57:51

197个顶点,308个边

我昨晚想出了这个答案,但没有发出去,因为那是一个很高的分数。但是,由于它比其他答案要好得多,所以我想我应该把它发出去。

我在ABCDEFGH中的所有28对值单元格上使用以下设置

代码语言:javascript
复制
   ?*
   |
?--1--?
|  |  |
1--?--1
|     |
A     B

?表示不在ABCDEFGH中的值单元格。在这里,当?*是ON时,AB都是on。否则,AB可能处于任何其他配置中。

我把所有28个?*s连接到一个指示细胞上。这意味着在ABCDEFGH中只有一对将有两个ON。这足以保证我的输出单元格中有两个是打开的。

票数 2
EN

Code Golf用户

发布于 2018-02-01 16:24:15

354个节点,428个边

只是为了证明这是可能的。稍后,我将通过一些缓存来改进这一点。

(希望没有代码错误)

我试着编写数学程序这里来检查程序的有效性,但是它可能无法工作,因为变量太多了。

结果由计算机程序在网上试试!生成。

我用一个像这样的门:

代码语言:javascript
复制
               (f)
                |
                |
               (#)
              /   \
             /     \
           (d)     (e)
          /           \
         /             \
       (#) --- (c) --- (#)
     .'                  '.
   .'                      '.
(a)                          (b)

其中(#)为1-指标,(a) .(f)是值。

然后,

代码语言:javascript
复制
c = (not a) and (not b)
d = (not a) and      b
e =      a  and (not b)
f =      a  xnor     b

还有,这扇门

代码语言:javascript
复制
(a) ----- (#) ----- (b)

给出

代码语言:javascript
复制
b = not a

。使用这两种类型的门,您可以构建任何表达式。

当然,这是为了断言(a)必须是真的:

代码语言:javascript
复制
(a) ----- (#)
票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/154539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档