总理书呆子狙击模式


16

一年中最长的一天-这会浪费一些额外的时间...


总览

请注意,这不是普及竞赛,也不是图形输出挑战-您只需要输出65,536个零和一的字符串即可。问题底部的堆栈片段将显示为256 x 256黑白图像,并计算您的官方成绩。然后,您可以保存图像并将其与代码一起上传到答案中(因为字符串输出不适合30,000个字符的Stack Exchange答案)。


计分

图像的分数是其各个像素的分数之和。单个像素的得分是与所得分像素颜色相反的每个非正交素数距离像素的子得分总和。对于每个这样的像素的子分数是其中是主要的距离。1/pp

在此问题的上下文中,这些术语具有以下定义:

  • 非正交:如果像素不在同一行且不在同一列中,则该像素与被计分的像素不正交。

  • 质数距离:如果一个像素与要刻划的像素相距一个质数距离,则它们之间的距离就是恰好是质数的欧几里德距离。尤其是,距离是环形测量的最小距离-左上像素是到sqrt(2)右下像素的距离(所有4条边都环绕)。

  • 相反的颜色:如果像素的值总和为1,则该像素与被计分像素的颜色相反。即,第一个为0,第二个为1,或者第一个为1,第二个为0。

Stack Snippet包含示例代码,该代码显示如何对图像评分,但不包括任何优化或有效方法,仅提供正确代码即可对最终图像进行评分。

如果代码中的任何内容不正确,请在注释中或在chat中让我知道。

JavaScript不一定是回答此特定挑战的最佳语言。请注意,Snippet代码故意不提供有关更快方法的任何线索。只会引入现有答案中已经证明的效率。


可视化

得分像素

为了直观了解评分像素的分布,此处(紫色)是256 x 256图像的像素(128、128)的非正交素距离像素:

非正交素距离分布的图像


随机图像

这是从示例Python 3答案中随机生成的图像。它的分数为138,267.64,可为您提供一些优势。

随机生成的图像


输入值

该代码不需要输入。

输出量

该代码应输出65,536个零和一的字符串,代表黑白256 x 256图像的像素。这些数字应该是一个连续的字符串,没有分隔符。如果输出到文件,则可能会发现复制和粘贴更加容易,但这取决于您。

您的代码还可以输出您认为有用的其他信息,只要可以将字符串复制并粘贴到堆栈片段中即可。例如,您可能希望定期将最佳字符串输出到文件,并将最佳分数输出到STDOUT,从而允许用户选择何时停止搜索。


堆栈片段

正如指出的SP3000,该片段正在采取10分钟,计算得分,这是一个有点过于缓慢,甚至故意低效的参考实现。我已经对Sp3000的建议改进进行了编辑,该改进是对计分的像素偏移进行预先计算,现在需要几秒钟来计算分数。


如果您使用输出或其他答案的代码作为自己代码的起点,请记住要给予感谢并链接到支持答案。该问题的答案无需记下示例答案或问题中的代码。

感谢Randall Munroe的Nerd Sniping一词

Answers:


36

CJam,得分276496.9062958626

2,128*_(]128*

事实证明这是最佳的,因为:距离2没有任何非正交对。因此,距离必须是奇数,距离的平方也必须是奇数。当p 2 = x 2 + y 2,因此x和y(是否为平方)必须是奇数,而另一个必须是偶数。这些点在此图像中总是相反的颜色。

这及其负面影响也是唯一的最佳解决方案。在最佳解决方案中,没有任何非正交质数距离像素应具有相同的颜色。有对角相邻的相对像素,例如(3,4)和(4,3)。通过填充相反颜色的相反像素等,我们可以得到具有相同颜色的对角线。从对角线上的每个像素开始,我们可以用相同的方式填充所有反对角线。请注意,它们会环绕。但是,如果没有,这仍然是最佳选择。


3
我希望人们能注意到更长的时间……
trichoplax

1
我花了很长时间才得出结论,写这个问题时有一个最佳解决方案,所以我认为值得挑战。您怎么这么快看?它是显而易见的还是您有特定的思考过程?
trichoplax

4
附注:我不知道您什么时候看到此问题,但发布问题后71分钟的最佳解决方案应得到赏金-我只需要等待2天即可分配问题...
trichoplax

@trichoplax在您的第一张图片中,似乎在同一对角线上有很多点。我开始考虑使用较宽的条纹。然后我打开Gimp验证了我的想法。令我惊讶的是,当我用这种图案填充图像时,我得到了一个全黑的图像。
jimmy23013 2015年

8
@trichoplax鉴于您知道有一个最佳解决方案,所以我认为最好修改该问题以使其更不易解决。尽管jimmy23013很快找到了它,但是直到有人找到它,然后结束它总是一个时间问题。
xnor

1

Python 3,得分138267.64

这是一个最低限度的答案,它是要求的示例,也是要克服的问题...

这包括

  • 语言名称。
  • 问题中堆栈片段的分数。
  • 从堆栈片段保存的图像。
  • 该代码用于产生65,536个零和一的字符串。

输出量

随机生成的图像

from random import random

output_string = ''
filename = '65536digits.txt'

for t in range(65536):
    digit = int(random() * 2)
    output_string += str(digit)

with open(filename, 'w') as output_file:
    output_file.write(output_string)

这只是一个例子。对于这种特殊挑战,Python不一定是获得竞争性答案的最佳语言。

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.