一个简单的制造挑战。计算输入模7。输入将采用大端二进制(蓝色= 1,红色= 0)。输出应采用相同的格式。
提供了测试用例。最小的零件数获胜。
(如果输入mod 7为0,则不输出任何内容。)
一个简单的制造挑战。计算输入模7。输入将采用大端二进制(蓝色= 1,红色= 0)。输出应采用相同的格式。
提供了测试用例。最小的零件数获胜。
(如果输入mod 7为0,则不输出任何内容。)
Answers:
Keith Randall最初将输入转换为一元的想法非常好,所以我偷了它。;-)方便起见,我只是花了一些时间在Manufactoria中优化小型二进制到一元转换器,因此从该挑战中选择了我的一种几乎可行的解决方案*,并将其与快速优化的mod-7计数器相结合。
现在,这种设计正处于从顶部到底部使机器人开始使用时就需要其他无用的额外传送带的地步。重新设计布局使其更高和更窄,可能会大大减少零件数量。
(* 这项挑战要求a)将设计安装到7×7的板上,并且b)一元输出以红色标记显示。如果您看一下上面机器的二进制到一元转换器部分,您会注意到,通过增加一个或两个额外的部分,它可以轻松满足任一要求,但可惜不能同时满足这两个要求。)
这是以前的58部分版本:
像Jan Dvorak的解决方案一样,它也基于7状态FSM。我在屏幕截图中标记了与每个状态相对应的门,以使其更易于阅读。但是,状态机本身确实很容易。棘手的部分是使用最少的门产生最终输出。
我发现有用的一个技巧是最终的复制循环,该循环将黄色标记之前写入的所有内容都移至末尾(同时还剥离了绿色标记):这使我可以利用高位输出位的重复生成的输出为:
0: Y ->
1: BY -> B
2: YBR -> BR
3: YBB -> BB
4: RYBR -> BRR
5: BYBR -> BRB
6: RYBB -> BBR
这使我可以将输出2、4和5(均以开头BR
)以及3和6(均以开头)的输出路径进行组合BB
。
我的解决方案有很多不同。它首先将二进制转换为一元,然后将mod 7转换为二进制。我无法完全击败Ilmari。
我实际上不知道我在做什么,但是它行得通,我可能会成为赢家(如果仅测试用例就足够了)。:D
编辑:优化了2倍,现在小了一点。(已清除垃圾)
111
,则始终会被7整除。这是不正确的。