El día más largo del año: aquí hay algo para perder el tiempo extra ...
Visión general
Tenga en cuenta que este no es un concurso de popularidad y no un desafío de salida gráfica: solo se requiere que envíe una cadena de 65,536 ceros y unos. El Fragmento de pila en la parte inferior de la pregunta mostrará esto como una imagen en blanco y negro de 256 por 256 y calculará su puntaje oficial. Luego puede guardar la imagen y subirla a su respuesta junto con su código (ya que la salida de la cadena no cabe en una respuesta de intercambio de pila de 30,000 caracteres).
Puntuación
La puntuación de una imagen es la suma de las puntuaciones de sus píxeles individuales. La puntuación de un píxel individual es la suma de los resultados parciales de cada uno de los no ortogonales , distancia primeros píxeles que son del color opuesto al píxel de ser puntuados. El subpunto para cada píxel es 1/p
dónde p
está la distancia principal.
En el contexto de esta pregunta, los términos tienen las siguientes definiciones:
No ortogonal: un píxel no es ortogonal al píxel que se puntúa si no está en la misma fila y no está en la misma columna.
Distancia máxima : un píxel está a una distancia máxima del píxel que se puntúa si está separado por una distancia euclidiana que es exactamente un número primo. En particular, la distancia es la distancia mínima medida toroidalmente: el píxel superior izquierdo está a una distancia del
sqrt(2)
píxel inferior derecho (los 4 bordes se envuelven).Color opuesto: un píxel es de color opuesto al píxel que se puntúa si sus valores suman 1. Es decir, el primero es 0 y el segundo es 1, o el primero es 1 y el segundo es 0.
El fragmento de pila incluye un código de ejemplo que muestra cómo puntuar una imagen, pero no incluye optimizaciones ni un enfoque eficiente, solo el código correcto para que la puntuación de las imágenes finales se pueda hacer de manera consistente.
Si algo en el código no es correcto, hágamelo saber en los comentarios o en el chat .
Puede que JavaScript no sea necesariamente el mejor lenguaje para responder a este desafío en particular. Tenga en cuenta que el código Snippet deliberadamente no da pistas sobre enfoques más rápidos. Solo se introducirán eficiencias que ya se han demostrado en una respuesta existente.
Visualización
Los píxeles de puntuación
Para una sensación intuitiva de la distribución de los píxeles de puntuación, aquí (en morado) se encuentran los píxeles de distancia principal no ortogonales para el píxel (128, 128) de una imagen de 256 por 256:
Una imagen al azar
Esta es la imagen generada al azar de la respuesta de Python 3 de ejemplo. Tiene un puntaje de 138,267.64 y te da algo para vencer.
Entrada
El código no requiere entrada.
Salida
El código debe generar una cadena de 65.536 ceros y unos, que representan los píxeles de una imagen en blanco y negro de 256 por 256. Los dígitos deben ser una cadena continua, sin separadores. Es posible que copiar y pegar sea más fácil si exporta a un archivo, pero esto depende de usted.
Su código también puede generar otra información que le resulte útil, siempre que la cadena se pueda copiar y pegar en el Fragmento de pila. Por ejemplo, es posible que desee generar la mejor cadena hasta un archivo y la mejor puntuación hasta STDOUT a intervalos regulares, lo que permite al usuario elegir cuándo detener la búsqueda.
Fragmento de pila
Como señaló Sp3000 , el fragmento tardó 10 minutos en calcular un puntaje, que es demasiado lento, incluso para una implementación de referencia deliberadamente ineficiente. He editado en la mejora sugerida por Sp3000 de precomputar los desplazamientos de píxeles para la puntuación, y ahora toma unos segundos calcular una puntuación.
Si utiliza la salida o el código de otra respuesta como punto de partida para su propio código, recuerde dar crédito y vincular a la respuesta de apoyo. Las respuestas a esta pregunta no necesitan acreditar la respuesta de ejemplo o el código en la pregunta.