在Conway的《人生游戏》中构建数字时钟


478

您的任务是构建一个代表数字时钟的生活游戏模拟,该模拟满足以下属性:

  1. 时钟显示在十进制小时和分钟(例如12:003:597:24)与对于每个1440分钟一天中的不同的状态-要么小时会从0到23或者从1到12与PM指示器。

  2. 该模式是周期性的,状态在没有任何外部交互的情况下循环。

  3. 分钟数会定期更新-从一分钟的更改到下一次更改需要相同的世代数。

  4. 匿名旁观者可以一眼看出该显示器应该是数字钟。特别是,这需要:

    • 这些数字是可见的并且可以清楚地区分。您必须能够一目了然地确定显示的时间。

    • 数字将更新到位。每个新数字都与前一个数字出现在相同的位置,并且数字的边界框几乎没有移动。(特别是,一个数字在不同的地方不会包含10个不同的数字,每次数字变化时,数字都会被发现。)

    • 这些数字彼此相邻出现,它们之间没有过多的空格。


您的程序将按以下顺序得分(较低的标准充当较高标准的决胜局):

  • 边界框大小-完全包含给定解的最小面积的矩形框将获胜。

  • 执行速度最快-前进一分钟的最少几代人获胜。

  • 初始活细胞计数-较小的计数获胜。

  • 先发布-早先发布。


5
@tuskiomi不,显示必须为十进制。
Joe Z.

2
我很确定这是B3 / S23,但您可以确认还是拒绝?
科纳·奥布莱恩

2
“它们还必须就地更新-每个新号码必须与以前的号码出现在同一位置。” 您如何定义“在同一位置”,因为数字不一定是矩形。
Martin Ender

4
我们的十进制数字应该如何辨别?是“如果您知道它是什么,然后着眼睛,那么您就可以分辨出0和8之间的差异”,还是需要通过“匿名旁观者可以不提示就知道它是什么”测试?
Sparr

Answers:


1012

每个时钟计数11,520代/ 10,016 x 6,796盒/ 244,596个弹出计数

你去了...很有趣。

好吧,设计当然不是最佳的。从边界框的角度来看(7段数字很大),从初始填充计数(有一些无用的东西,当然也可以简化一些东西)和执行速度都没有,我也没有。不确定。

但是,嘿,很漂亮。看:

在此处输入图片说明

运行!

这个要点获得设计。将整个文件文本复制到剪贴板。

新增:这是同时具有AM和PM指示器的版本

转到在线JavaScript Conway生活模拟器。单击导入,粘贴设计文本。您应该看到设计。然后,转到设置,并将生成步骤设置为512,或将其设置为这些行附近的值,否则,您将不得不永远等待以查看时钟显示的更新。

单击运行,请稍等一下!

直接链接到浏览器内版本。

请注意,使这个庞大的设计可用的唯一算法是hashlife。但是,您可以在几秒钟内完成整个时钟回绕。使用其他算法,甚至无法看到小时数的变化。

这个怎么运作

它使用p30技术。只是基本的东西,滑翔机和轻型飞船。基本上,设计是自上而下的:

  • 在最顶层,有时钟。这是一个11520周期时钟。请注意,您需要大约10.000代来确保正确更新显示,但是设计应该在较小周期的时钟(大约5.000左右-时钟必须是60的倍数)下保持稳定。
  • 然后,是时钟分配阶段。时钟滑翔机复制在一棵平衡的树中,因此最后有32个滑翔机正好到达柜台台的同一时刻。
  • 使用每个状态和每个数字的RS锁存器进行计数器阶段(我们以十进制计数)。因此,分钟的右数位有10个状态,分钟数的左数位有6个状态,小时数的12个状态(小时数的两位在此处合并)。对于这些组中的每一个,计数器的行为都类似于移位寄存器。
  • 在计数阶段之后,有查找表。它们将状态脉冲转换为显示段ON / OFF动作。
  • 然后,显示本身。这些段仅由多个LWSS字符串组成。每个段都有自己的锁存器以保持其状态。我本可以对数字状态进行简单的逻辑或运算,以知道段是否必须为ON或OFF,并摆脱这些锁存器,但是当数字更改时,不变的段会出现故障(因为信号延迟)。而且从查询表到数字段的滑翔机源源不断。因此,它看起来不会那么好看。它必须是。是。

无论如何,这种设计实际上并没有什么特别之处。在此过程中没有发现任何令人惊讶的反应,也没有以前没有人想到的真正巧妙的组合。只是零零碎碎地凑在一起(我什至不确定我是否以“正确”的方式做到了-我实际上是完全陌生的)。但是,这需要很大的耐心。使所有这些滑翔机在正确的时间在正确的位置升起是令人头疼的事情。

可能的优化:

  • 与其将相同的根时钟复制并分发给n个计数器单元,不如将同一个时钟块放置n次(每个计数器单元一次)。这实际上会简单得多。但是,那时我将无法通过在单个点上更改时钟来轻松地对其进行调整...而且我具有电子背景,并且在实际电路中,这将是非常错误的。
  • 每个段都有自己的RS锁存器。这要求查找表同时输出R和S脉冲。如果我们有一个锁存器,它只能从公共输入脉冲中切换其状态,则可以使查找表大一半。PM点有一个这样的锁存器,但它很大,我无法提出更实用的方法。
  • 缩小显示屏。但这看起来不那么好看。它必须是。是。

26
美丽。好答案。
帕维尔

33
@Poke来了,您可以尝试自己添加此内容...无论如何,为了您的方便,我编辑了带有AM + PM版本的帖子。
昏暗的

48
只要你知道,这个答案已经功能Microsiervos,在西班牙大约技术中最重要的博客之一,拥有超过80万的追随者在推特
路易斯Mendo

26
@Rory抬起头,尽力将其砸在墙上十次。然后您就可以开始了。
暗淡

34
所以设计过程是:“好吧,我需要碰撞它,此时我的滑翔机就从这个位置出来。让我们来看一下使用两个反射器将它带到那里。废话,它需要碰撞的东西只有两个生成步骤如果我稍微移动反射器,让我们看看...废话,来不及了。好吧,让我们将它们碰撞到其他地方。废话,我没有空间让滑翔机走到那里。让我们添加另外两个无用的反光板只是为了使其到达那里。糟糕,反光板与另一滑翔机相撞...糟糕,我们上床睡觉。”
暗淡
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.