制造商是一个关于编程的游戏。播放器必须使用一种二维编程语言的形式来完成任务.如果你从来没有听说过它,最简单的学习方法就是尝试游戏的前几个层次。
你的挑战是创建一个程序来测试一个数字的原始性。
输入将是队列中的一系列N个蓝色标记。如果N是素数,那么你的程序应该接受它(移动机器人到完成)。如果N是复合的,那么您的程序应该拒绝它(把它放在某个地方)。
由于这是一个比典型的制造商挑战更复杂的挑战,我决定允许更多的方式提交您的答案。
香草兰(
)
我已经创建了一个13x13自定义级别来构建和测试提交。自定义测试级别如下所示。
13x13自定义级别
游戏只允许自定义级别上的8个测试用例,但理论上您的创建应该能够处理任何自然数N,仅受可用内存的限制。为了提供信息,在自定义级别中提供的测试用例如下:
1 -> reject
2 -> accept
4 -> reject
5 -> accept
7 -> accept
9 -> reject
11-> accept
15-> reject一些用户可能需要比13x13网格更多的空间。下面是一个指向游戏中15x15自定义级别的链接,它是通过更改URL中的一个数字创建的:
15x15自定义级别
遗憾的是,更大的自定义级别无法工作,因为额外的单元格是不可访问的。
制造商
制造商已经将其改编为一种基于ASCII的语言.如果你想要一种不同的方法来设计/测试你的创作,或者如果你无法将你的最终解决方案安装到游戏板上,你可以使用这个esolang。您可以在这里找到有关这一“esolang”的信息:
山毛菜
在这个游戏和实际游戏之间有一些差异。例如,运输道口的处理方式不同。尽量避免利用这些差异。
的更快方法
当涉及到需要数千步才能完成的程序时,游戏是非常慢的。我的概念证明解决方案采取了28042步来拒绝15,即使在游戏中加速50倍时,这也是太长了。
我发现这个非常有用的网站。只需复制粘贴链接到您的答案,您就可以测试您的答案与特定的输入。这个28042步的过程用了不到一秒钟。
有一点要注意的是,即使你的机器正常工作,它也会说一些“不正确的接受”的话。这是因为网页只知道测试用例。例如,它会说我的解决方案“错误地接受”了数字3,尽管我的机器实际上是正确的。
评分标准是部分(占单元格)的数量。这是代码高尔夫,所以提交最少的部分获胜。
对于那些感兴趣的人,我的基准解决方案有96个部分,适合13x13网格。找到一个更好的算法可能会带来巨大的改进,因为我知道我使用了一个次优算法。
发布于 2014-08-17 23:10:37
我两天前才学会玩制造商,所以它可能不是很适合打高尔夫,但至少它解决了这个问题。当然,它通过重复减法来实现审判分割。检查从2到N-1的所有除数。我相信时间复杂度应该是O(N^3)。

解链
我非常失望不得不使用传送带:)
https://codegolf.stackexchange.com/questions/35958
复制相似问题