在康威的“生活的游戏”中制作数字钟

2020-05-19 10:15:04

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

时钟以十进制(例如,12:00、3:59、7:24)显示小时和分钟,一天中的1,440分钟中的每一分钟都有不同的状态-小时将从0变为23,或者从1变为12,并带有PM指示器。

分钟定期更新-从一次分钟更改到下一次更改需要相同的生成次数。

一位匿名的旁观者能够一眼看出显示器应该是一个数字钟。这尤其需要:

这些数字是可见的,并且可以清楚地区分。你必须能够一目了然地说出正在显示的时间。

数字会在适当的位置更新。每个新数字出现在与前一个数字相同的位置,数字的边界框几乎没有移动。(具体地说,一个数字不包含位于不同位置的10个不同的数字,这些数字在每次数字更改时都会被揭开。)。

数字紧挨着显示,它们之间没有过多的空格。

您的计划将在以下方面按顺序评分(较低的标准充当较高标准的决胜局):

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

\$\endgroup\$。

I‘我很确定这是B3/S23,但您能确认或否认吗?Conor O&’Brien。

\$\Begingroup\$&34;它们还必须原地更新-每个新数字必须出现在与前一个数字相同的位置。";您如何定义同一位置的";,因为数字不一定是矩形的。\$\endgroup\$-Martin Ender。

\$\Begingroup\$我们的小数位必须有多清晰?如果你知道它是什么,并且眯着眼睛,那么你就可以分辨出0和8之间的区别了吗?或者它需要通过测试吗?匿名旁观者可以在没有提示的情况下判断出它是什么?\$\endgroup\$-s SPARR。

\$\Begingroup\$这也发布在哈卡迪博客上:hackaday.com/2017/03/11/a-clock-created-with-conways-life\$\endgroup\$-Anool Maidharia。

嗯,这个设计肯定不是最优的。既不是从边界框的角度(那7段数字很大),也不是从最初的人口计数(有一些无用的东西,还有一些肯定可以变得更简单的东西),以及执行速度-嗯……。我不确定。

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

请注意,使这个庞大的设计变得可用的唯一算法是hashlife。但是有了这个,您可以在几秒钟内实现整个时钟绕回。使用其他算法,即使看到时间变化也是不切实际的。

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

在最上面,有一只钟。这是一个11520周期的钟。请注意,您需要大约10.000代才能确保显示器得到适当更新,但设计仍应稳定,时钟周期较小(约为5.000代-时钟需要是60的倍数)。

然后是时钟分配阶段。时钟滑翔机被复制到一个平衡树中,所以在最后,有32个滑翔机在完全相同的时刻到达计数器阶段。

计数器级为每个状态和每个数字使用RS锁存器(我们以十进制计数)。因此,分钟的右数字有10个状态,分钟的左数字有6个状态,小时有12个状态(两个小时数字在这里合并)。对于这些组中的每一组,计数器的行为类似于移位寄存器。

在计数阶段之后,有查找表。它们将状态脉冲转换为显示段开/关动作。

然后是显示器本身。这些区段简单地由多串LWSS制成。每个段都有自己的锁存器以保持其状态。我可以对数字状态进行简单的逻辑或运算,以了解某个段必须打开还是关闭,并去掉这些锁存器,但是当数字改变时(由于信号延迟),不变的段会有故障。从查找表到数字段会有很长的滑翔机流。所以它就不会那么好看了。这是必须的。是。

不管怎么说,这个设计其实没有什么特别之处。在这个过程中没有发现令人惊讶的反应,也没有以前没有人想到的真正聪明的组合。只是把这里和那里的一些东西放在一起(我甚至不确定我是不是按照正确的方式做的--实际上我对此完全陌生)。然而,这需要很大的耐心。让所有这些滑翔机在正确的时间在正确的位置升空是令人费解的。

我可以将相同的时钟块复制n次(每个计数器单元一次),而不是将相同的根时钟复制并分发到n个计数器单元。这实际上会简单得多。但那样我就不能那么容易地通过在单点上改变时钟来调整它了。我有电子学背景,在真实的电路中,这将是非常错误的。

每个网段都有自己的RS锁存器。这要求查找表同时输出R和S脉冲。如果我们有一个锁存器,它只会从公共输入脉冲切换其状态,我们就可以使查找表变得一半大。PM点有这样一个插销,但它很大,我想不出更实用的东西。

将显示屏缩小。但那就不会那么好看了。这是必须的。是。

\$\endgroup\$。

\$\Begingroup\$@Poke来吧,你可以试着自己添加这个.。无论如何,我已经编辑了这篇帖子的AM+PM两个版本,以供您愉快。\$\endgroup\$-暗淡。

如你所知,这个答案已经出现在Microsiervos上,这是最重要的西班牙语技术博客之一,在Twitter上有超过80万的追随者\$\endgroup\$-Luis Mendo。

罗里,你拿起你的头,用最大的力气把它砸在墙上十几次。然后您就可以开始了。\$\endgroup\$-暗淡。

所以设计过程是:,好的,我需要碰撞它,我的滑翔机在这个时候从那里滑翔过来。让我们看看用两个反射器把它拿到那里去。废话,它需要碰撞的只是两代人的步伐太快了,那里。如果我稍微移动一下反光镜,让我们看看……。糟了,太晚了。好的,让我们在别的地方与他们相撞。糟了,我没有房间让我的滑翔机去那里。好的,让我们再加两个没用的反光镜,好让它到达那里。糟了,反光板撞上了另一股滑翔机.。糟了,让我们上床睡觉吧。";\$\endgroup\$-224;暗淡

…。请务必遵循挑战规范。不过,请不要钻空子。滥用任何标准漏洞的答案都被认为是无效的。如果您认为某个规范不明确或未详细说明,请改为对该问题进行评论。

…。试着优化你的分数。例如,对挑战的回答应该尽量简短。除了竞争版本之外,您还可以随时包含代码的可读性版本。对您的答案的解释使阅读更有趣,非常鼓舞人心。

…。包括一个简短的标题,指示您的代码的语言及其分数,如挑战所定义的。

点击“发布您的答案”,即表示您同意我们的服务条款、隐私政策和Cookie政策。

不是你想要的答案吗?浏览标记的其他问题或提出您自己的问题。