Suchen Sie für ein N x N- Bild einen Satz von Pixeln, sodass kein Abstand mehr als einmal vorhanden ist. Das heißt, wenn zwei Pixel durch einen Abstand d voneinander getrennt sind , sind dies die einzigen zwei Pixel, die durch genau d voneinander getrennt sind (unter Verwendung des euklidischen Abstands ). Beachten Sie, dass d keine Ganzzahl sein muss.
Die Herausforderung besteht darin, ein größeres Set als alle anderen zu finden.
Spezifikation
Es ist keine Eingabe erforderlich - für diesen Wettbewerb wird N auf 619 festgelegt.
(Da immer wieder gefragt wird, gibt es nichts Besonderes an der Nummer 619. Sie wurde so groß gewählt, dass eine optimale Lösung unwahrscheinlich ist, und so klein, dass ein N x N-Bild angezeigt werden kann, ohne dass Stack Exchange es automatisch verkleinert. Bilder können angezeigt in voller Größe bis zu 630 mal 630, und ich entschied mich für die größte Primzahl, die das nicht überschreitet.)
Die Ausgabe ist eine durch Leerzeichen getrennte Liste von Ganzzahlen.
Jede Ganzzahl in der Ausgabe stellt eines der Pixel dar, die in englischer Lesereihenfolge von 0 nummeriert sind. Beispiel: Bei N = 3 würden die Positionen in dieser Reihenfolge nummeriert sein:
0 1 2
3 4 5
6 7 8
Wenn Sie möchten, können Sie während des Laufens Fortschrittsinformationen ausgeben, solange die endgültige Ergebnisausgabe problemlos verfügbar ist. Sie können auf STDOUT oder in eine Datei ausgeben, oder was auch immer am einfachsten zum Einfügen in den Stapel-Snippet-Judge ist.
Beispiel
N = 3
Gewählte Koordinaten:
(0,0)
(1,0)
(2,1)
Ausgabe:
0 1 5
Gewinnen
Die Punktzahl ist die Anzahl der Positionen in der Ausgabe. Von den gültigen Antworten mit der höchsten Punktzahl gewinnt die Antwort, die am frühesten mit dieser Punktzahl ausgegeben wird.
Ihr Code muss nicht deterministisch sein. Sie können Ihre beste Ausgabe veröffentlichen.
Verwandte Forschungsbereiche
(Danke an Abulafia für die Golomb Links)
Keines von beiden ist mit diesem Problem identisch, aber beide haben ein ähnliches Konzept und geben Ihnen möglicherweise Anregungen, wie Sie dies angehen können:
- Golomb-Lineal : der eindimensionale Fall.
- Golomb-Rechteck : Eine zweidimensionale Erweiterung des Golomb-Lineals. Eine Variante des als Costas-Array bekannten NxN-Falls (Quadrat) wird für alle N gelöst.
Beachten Sie, dass die für diese Frage erforderlichen Punkte nicht denselben Anforderungen unterliegen wie ein Golomb-Rechteck. Ein Golomb-Rechteck erstreckt sich vom eindimensionalen Fall, indem der Vektor von jedem Punkt zum anderen eindeutig sein muss. Dies bedeutet, dass zwei Punkte horizontal um einen Abstand von 2 und zwei Punkte vertikal um einen Abstand von 2 voneinander getrennt sein können.
Für diese Frage muss der skalare Abstand eindeutig sein, daher kann es nicht gleichzeitig einen horizontalen und einen vertikalen Abstand von 2 geben. Jede Lösung für diese Frage ist ein Golomb-Rechteck, aber nicht jedes Golomb-Rechteck ist eine gültige Lösung für diese Frage.
Obergrenzen
Dennis wies im Chat hilfreich darauf hin, dass 487 eine Obergrenze für die Punktzahl ist und gab einen Beweis:
Gemäß meinem CJam-Code (
619,2m*{2f#:+}%_&,
) gibt es 118800 eindeutige Zahlen, die als Summe der Quadrate von zwei Ganzzahlen zwischen 0 und 618 (beide einschließlich) geschrieben werden können. n Pixel erfordern n (n-1) / 2 eindeutige Abstände voneinander. Für n = 488 ergibt dies 118828.
Es gibt also 118.800 mögliche unterschiedliche Längen zwischen allen möglichen Pixeln im Bild, und das Platzieren von 488 schwarzen Pixeln würde 118.828 Längen ergeben, was es unmöglich macht, dass sie alle eindeutig sind.
Es würde mich sehr interessieren zu hören, ob jemand einen Beweis für eine untere obere Schranke hat.
Bestenliste
(Beste Antwort von jedem Benutzer)