Längster Tag des Jahres - hier ist etwas, um die zusätzliche Zeit zu verschwenden ...
Überblick
Beachten Sie, dass dies kein Beliebtheitswettbewerb und keine Herausforderung für die grafische Ausgabe ist. Sie müssen lediglich eine Zeichenfolge mit 65.536 Nullen und Einsen ausgeben. Das Stapel-Snippet unten in der Frage zeigt dies als 256 x 256-Schwarzweißbild an und berechnet Ihre offizielle Punktzahl. Anschließend können Sie das Bild speichern und zusammen mit Ihrem Code in Ihre Antwort hochladen (da die Zeichenfolgenausgabe nicht in eine Stapelaustauschantwort mit 30.000 Zeichen passt).
Wertung
Der Score eines Bildes ist die Summe der Scores seiner einzelnen Pixel. Der Wert eines einzelnen Pixel ist die Summe der Teilscores für jede der nicht-orthogonal , prime Abstand Pixel , die von sind entgegengesetzte Farbe zu dem Pixel erzielt wird. Der Unterpunkt für jedes derartige Pixel ist, 1/p
wo p
der Hauptabstand ist.
Im Zusammenhang mit dieser Frage haben die Begriffe die folgenden Definitionen:
Nicht orthogonal: Ein Pixel ist nicht orthogonal zu dem zu bewertenden Pixel, wenn es sich nicht in derselben Zeile und nicht in derselben Spalte befindet.
Primabstand: Ein Pixel befindet sich in einem Primabstand von dem zu bewertenden Pixel, wenn sie durch einen euklidischen Abstand getrennt sind, der genau eine Primzahl ist. Insbesondere ist Abstand der Mindestabstand, der toroidal gemessen wird - der obere linke Pixel ist ein Abstand
sqrt(2)
vom unteren rechten Pixel (alle 4 Kanten werden umbrochen).Gegenüberliegende Farbe: Ein Pixel hat eine andere Farbe als das Pixel, das bewertet wird, wenn seine Werte 1 ergeben. Das heißt, das erste ist 0 und das zweite ist 1, oder das erste ist 1 und das zweite ist 0.
Das Stapel-Snippet enthält Beispielcode, der zeigt, wie ein Bild bewertet wird, enthält jedoch keine Optimierungen oder einen effizienten Ansatz, sondern nur den korrekten Code, damit die endgültigen Bilder konsistent bewertet werden können.
Wenn irgendetwas im Code nicht korrekt ist, lass es mich entweder in den Kommentaren oder im Chat wissen .
JavaScript muss nicht unbedingt die beste Sprache sein, um diese besondere Herausforderung zu beantworten . Beachten Sie, dass der Snippet-Code bewusst keine Hinweise auf schnellere Ansätze gibt. Es werden nur Effizienzen eingeführt, die bereits in einer vorhandenen Antwort gezeigt wurden.
Visualisierung
Die zählenden Pixel
Für ein intuitives Gefühl für die Verteilung der Scoring-Pixel sind hier (in Lila) die nicht-orthogonalen Primzahl-Abstandspixel für Pixel (128, 128) eines 256 × 256-Bildes:
Ein zufälliges Bild
Dies ist das zufällig generierte Bild aus der Python 3-Beispielantwort. Es hat eine Punktzahl von 138.267,64 und gibt Ihnen etwas zu schlagen.
Eingang
Der Code erfordert keine Eingabe.
Ausgabe
Der Code sollte eine Zeichenfolge von 65.536 Nullen und Einsen ausgeben, die die Pixel eines 256 x 256-Schwarzweißbilds darstellen. Die Ziffern sollten eine fortlaufende Zeichenfolge ohne Trennzeichen sein. Möglicherweise ist das Kopieren und Einfügen einfacher, wenn Sie in eine Datei ausgeben. Dies liegt jedoch bei Ihnen.
Ihr Code kann auch andere Informationen ausgeben, die Sie nützlich finden, solange die Zeichenfolge kopiert und in das Stapel-Snippet eingefügt werden kann. Beispielsweise möchten Sie möglicherweise in regelmäßigen Abständen die beste bisherige Zeichenfolge in einer Datei und die beste bisherige Punktzahl in STDOUT ausgeben, sodass der Benutzer auswählen kann, wann die Suche gestoppt werden soll.
Stapel-Snippet
Wie von Sp3000 herausgestellt , benötigte das Snippet 10 Minuten, um eine Punktzahl zu berechnen, die selbst für eine absichtlich ineffiziente Referenzimplementierung etwas zu langsam ist. Ich habe in Sp3000 die vorgeschlagene Verbesserung der Vorberechnung der Pixel-Offsets für das Scoring bearbeitet, und es dauert jetzt einige Sekunden, um eine Punktzahl zu berechnen.
Wenn Sie die Ausgabe oder den Code einer anderen Antwort als Ausgangspunkt für Ihren eigenen Code verwenden, denken Sie bitte daran, das Guthaben anzugeben und auf die entsprechende Antwort zu verweisen. Bei Antworten auf diese Frage muss weder die Beispielantwort noch der Code in der Frage angegeben werden.
quelle
Python 3, Punktzahl 138267.64
Dies ist eine minimale Antwort als Beispiel für das, was benötigt wird, und als etwas zu schlagen ...
Es enthält
Ausgabe
Code
Dies ist nur ein Beispiel. Python ist möglicherweise nicht die beste Sprache für kompetitive Antworten auf diese besondere Herausforderung.
quelle