背景
Manufactoria是一款有关编程的游戏。玩家必须使用一种二维编程语言来完成任务。如果您从未听说过,最简单的学习方法就是尝试游戏的前几个级别。
挑战
您面临的挑战是创建一个测试数字素数的程序。
输入将是队列中的一系列N个蓝色标记。如果N为质数,则程序应接受它(将机器人移至终点)。如果N是合成的,则您的程序应拒绝它(将它放在地板上的某个地方)。
提交选项
由于这是比典型的工厂挑战赛更为复杂的挑战,因此我决定允许更多方式提交您的答案。
香草
我创建了一个13x13的自定义级别来构建和测试提交。定制测试级别如下。
游戏仅在自定义级别上允许8个测试用例,但从理论上讲,您的创作应能够处理任何自然数N,仅受可用内存的限制。 仅供参考,自定义级别提供的测试用例如下:
1 -> reject
2 -> accept
4 -> reject
5 -> accept
7 -> accept
9 -> reject
11-> accept
15-> reject
扩展网格
有些用户可能想要的空间比13x13的网格还多。以下是通过更改URL中的数字创建的游戏内15x15自定义级别的链接:
可悲的是,较大的自定义级别不起作用,因为无法访问其他单元。
伊索朗工厂
Manufactoria已适应基于ASCII的语言。如果您想采用其他方法来设计/测试您的作品,或者无法将最终解决方案安装到游戏板上,则可以使用此esolang。您可以在此处找到有关此esolang的信息:
esolang与实际游戏之间存在一些差异。例如,传送带交叉口的处理方式有所不同。尝试避免利用这些差异。
更快的测试方法
当涉及需要数千步才能完成的程序时,游戏速度非常慢。我的概念验证解决方案花了28042步来拒绝15。即使在游戏中以50倍加速时,这也花了太长时间。
我发现这个网站很有帮助。只需将链接复制粘贴到您的答案,就可以使用特定的输入来测试您的答案。28042步骤过程耗时不到一秒钟。
需要注意的一件事是,即使您的计算机正常工作,它也会经常说类似“不正确地接受”之类的内容。这是因为该网页仅知道测试用例。例如,它将说我的解决方案“错误地接受了”数字3,即使我的机器实际上是正确的。
如何取胜
评分标准是零件数(占用的单元)。这是代码高尔夫球,因此提交最少的部分将获胜。
对于那些感兴趣的人,我的基准解决方案包含96个零件,可安装在13x13网格上。寻找更好的算法可能会带来巨大的改进,因为我知道我使用了次优算法。