Prime Nerd Sniping Pattern


16

一年で一番長い日-余分な時間を無駄にするものがあります...


概要

これは人気コンテストでもグラフィック出力チャレンジでもないことに注意してください。65,536個のゼロと1の文字列を出力するだけです。質問の下部にあるスタックスニペットは、これを256 x 256の白黒画像として表示し、公式スコアを計算します。その後、画像を保存し、コードと一緒に回答にアップロードできます(文字列出力が30,000文字のStack Exchange回答に収まらないため)。


得点

画像のスコアは、個々のピクセルのスコアの合計です。個々の画素のスコアは、それぞれについてサブスコアの合計である非直交プライム距離である画素反対色獲得される画素。このような各画素についてサブスコアは、1/pここでp素数の距離です。

この質問の文脈では、用語には次の定義があります。

  • 非直交:ピクセルは、同じ行になく、同じ列にない場合、スコアリングされるピクセルに非直交です。

  • 素数距離:ピクセルは、正確に素数であるユークリッド距離で区切られている場合、スコアリングされるピクセルから素数距離にあります。特に、距離はトロイダルに測定された最小距離です。左上のピクセルはsqrt(2)右下のピクセルからの距離です(4つのエッジすべてがラップします)。

  • 反対の色:値が1になった場合、ピクセルはスコアリングされるピクセルと反対の色です。つまり、最初のピクセルが0で2番目のピクセルが1であるか、最初のピクセルが1で2番目のピクセルが0です。

Stack Snippetには、画像のスコアリング方法を示すサンプルコードが含まれていますが、最適化や効率的なアプローチは含まれておらず、最終画像のスコアリングが一貫して行われるようにコードを修正するだけです。

コードに誤りがある場合は、コメントまたはチャットでお知らせください。

JavaScriptは、この特定の課題に答えるのに必ずしも最適な言語であるとは限りません。スニペットコードは、より高速なアプローチに関する手がかりを意図的に与えていないことに注意してください。既存の回答ですでに実証されている効率のみが導入されます。


可視化

スコアリングピクセル

スコアリングピクセルの分布の直感的な感覚のために、ここ(紫色)は256 x 256の画像のピクセル(128、128)の非直交プライムピクセルです。

非直交プライム距離分布の画像


ランダム画像

これは、Python 3の回答例からランダムに生成された画像です。138,267.64のスコアがあり、勝つために何かを与えます。

ランダムに生成された画像


入力

コードは入力を必要としません。

出力

コードは、黒と白の256 x 256画像のピクセルを表す65,536個の0と1の文字列を出力する必要があります。数字は、区切り文字のない連続した文字列でなければなりません。ファイルに出力すると、コピーと貼り付けが簡単になりますが、これはユーザー次第です。

コードは、文字列をコピーしてStack Snippetに貼り付けることができる限り、他の有用な情報も出力する場合があります。たとえば、最高の文字列をファイルに出力し、最高のスコアを定期的にSTDOUTに出力して、ユーザーが検索を停止するタイミングを選択できるようにすることができます。


スタックスニペット

Sp3000が指摘したように、スニペットはスコアを計算するのに10分かかっていましたが、意図的に非効率的なリファレンス実装であっても、少し遅すぎます。Sp3000で提案されているスコアリングのピクセルオフセットの事前計算の改善を編集しましたが、スコアの計算には数秒かかります。


自分のコードの出発点として別の回答の出力またはコードを使用する場合は、クレジットとサポート回答へのリンクを忘れないでください。この質問への回答は、回答例または質問内のコードに入金する必要はありません。

用語オタクスナイピングのランドールマンローにクレジット

回答:


36

CJam、スコア276496.9062958626

2,128*_(]128*

距離2の非直交ペアがないため、最適であることがわかります。したがって、距離は奇数でなければならず、距離は2乗します。p 2 = x 2 + y 2であるため、xとyの一方(2乗かどうか)は奇数でなければならず、もう一方は偶数でなければなりません。この画像では、これらのポイントは常に反対の色になっています。

これとそのネガも唯一の最適なソリューションです。最適なソリューションでは、非直交のプライムディスタンスピクセルが同じ色を持つことはありません。(3,4)や(4,3)のような対角線方向に隣接する反対のピクセルがあります。反対色の反対のピクセルを塗りつぶすなどして、同じ色の対角線を得ることができます。対角線の各ピクセルから始めて、すべての対角線を同じように塗りつぶすことができます。ラップアラウンドすることに注意してください。ただし、そうでない場合でも最適です。


3
人々がそれに気付くのにもっと時間がかかることを望んでいた
...-trichoplax

1
この質問を書くときに最適な解決策があることを見つけるのに長い時間がかかったので、挑戦として投稿する価値があると思いました。どうやってこんなに早く見ましたか?明らかだったのですか、それとも特定の思考プロセスがありましたか?
trichoplax

4
PS私は懸賞金に値するされる質問が投稿された71分後、あなたがこの質問を見た時が、最適な解決策を知っていない-私はちょうど私がそれを割り当てることができます前に、2日間待たなければならないでしょう...
センモウヒラムシ

@trichoplax最初の画像から、同じ対角線に多くの点があるように見えました。最初は幅の広いストライプを使用することを考えていました。そして、Gimpを開いてアイデアを確認しました。そして驚いたことに、このパターンで塗りつぶすと、完全に黒い画像になりました。
jimmy23013

8
@trichoplax最適な解決策があることを知っていれば、問題を解決しにくくするために質問を修正した方がよかったと思います。jimmy23013はそれをすばやく見つけましたが、誰かがそれを見つけるまでは常に時間の問題です。
xnor

1

Python 3、スコア138267.64

これは、必要なものの例として、そして打ち負かすものとしての最小限の答えです...

含まれています

  • 言語名。
  • 質問のスタックスニペットのスコア。
  • スタックスニペットから保存された画像。
  • 65,536個のゼロと1の文字列を生成するために使用されるコード。

出力

ランダムに生成された画像

コード

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が必ずしも最良の言語であるとは限りません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.