Manufactoria中的原始性测试


13

背景

Manufactoria是一款有关编程的游戏。玩家必须使用一种二维编程语言来完成任务。如果您从未听说过,最简单的学习方法就是尝试游戏的前几个级别。

挑战

您面临的挑战是创建一个测试数字素数的程序。

输入将是队列中的一系列N个蓝色标记。如果N为质数,则程序应接受它(将机器人移至终点)。如果N是合成的,则您的程序应拒绝它(将它放在地板上的某个地方)。

提交选项

由于这是比典型的工厂挑战赛更为复杂的挑战,因此我决定允许更多方式提交您的答案。

香草

我创建了一个13x13的自定义级别来构建和测试提交。定制测试级别如下。

13x13自定义级别

游戏仅在自定义级别上允许8个测试用例,但从理论上讲您的创作应能够处理任何自然数N,仅受可用内存的限制。 仅供参考,自定义级别提供的测试用例如下:

1 -> reject
2 -> accept
4 -> reject
5 -> accept
7 -> accept
9 -> reject
11-> accept
15-> reject

扩展网格

有些用户可能想要的空间比13x13的网格还多。以下是通过更改URL中的数字创建的游戏内15x15自定义级别的链接:

15x15自定义级别

可悲的是,较大的自定义级别不起作用,因为无法访问其他单元。

伊索朗工厂

Manufactoria已适应基于ASCII的语言。如果您想采用其他方法来设计/测试您的作品,或者无法将最终解决方案安装到游戏板上,则可以使用此esolang。您可以在此处找到有关此esolang的信息:

峨factor工厂

esolang与实际游戏之间存在一些差异。例如,传送带交叉口的处理方式有所不同。尝试避免利用这些差异。

更快的测试方法

当涉及需要数千步才能完成的程序时,游戏速度非常慢。我的概念验证解决方案花了28042步来拒绝15。即使在游戏中以50倍加速时,这也花了太长时间。

我发现这个网站很有帮助。只需将链接复制粘贴到您的答案,就可以使用特定的输入来测试您的答案。28042步骤过程耗时不到一秒钟。

需要注意的一件事是,即使您的计算机正常工作,它也会经常说类似“不正确地接受”之类的内容。这是因为该网页仅知道测试用例。例如,它将说我的解决方案“错误地接受了”数字3,即使我的机器实际上是正确的。

如何取胜

评分标准是零件数(占用的单元)。这是代码高尔夫球,因此提交最少的部分将获胜。

对于那些感兴趣的人,我的基准解决方案包含96个零件,可安装在13x13网格上。寻找更好的算法可能会带来巨大的改进,因为我知道我使用了次优算法。

Answers:


10

53个零件-11x11网格

我是2天前才学会玩Manufactoria的游戏,所以它可能不是非常适合高尔夫运动,但至少可以解决该问题。当然,它通过反复相减来实现试验划分。检查所有从2到N-1的除数。我认为时间复杂度应为O(N ^ 3)。

53件套解决方案

解决方案链接

我非常失望,不得不使用传送带:)

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.