Dia mais longo do ano - aqui está algo para desperdiçar o tempo extra ...
Visão geral
Observe que este não é um concurso de popularidade nem um desafio gráfico de saída - você só precisa gerar uma sequência de 65.536 zeros e uns. O snippet de pilha na parte inferior da pergunta exibirá isso como uma imagem em preto e branco de 256 por 256 e calculará sua pontuação oficial. Em seguida, você pode salvar a imagem e enviá-la para sua resposta juntamente com o seu código (já que a saída da string não caberá em uma resposta de 30.000 caracteres do Exchange Stack).
Pontuação
A pontuação de uma imagem é a soma das pontuações de seus pixels individuais. A pontuação de um pixel individual é a soma dos subescores de cada um dos pixels de distância principal não ortogonais , que são de cores opostas ao pixel que está sendo pontuado. A sub-pontuação de cada pixel é onde está a distância principal.1/p
p
No contexto desta pergunta, os termos têm as seguintes definições:
Não ortogonal: um pixel não é ortogonal ao pixel que está sendo pontuado, se não estiver na mesma linha e não estiver na mesma coluna.
Distância principal: um pixel está a uma distância principal do pixel que está sendo pontuado se for separado por uma distância euclidiana que seja exatamente um número primo. Em particular, a distância é a distância mínima medida toroidalmente - o pixel superior esquerdo está a uma distância do
sqrt(2)
pixel inferior direito (todas as quatro arestas são quebradas).Cor oposta: um pixel é de cor oposta ao pixel que está sendo pontuado se seus valores somarem 1. Ou seja, o primeiro é 0 e o segundo é 1, ou o primeiro é 1 e o segundo é 0.
O Snippet de pilha inclui código de exemplo que mostra como classificar uma imagem, mas não inclui otimizações ou uma abordagem eficiente, apenas o código correto para que a pontuação das imagens finais possa ser feita de maneira consistente.
Se alguma coisa no código não estiver correta, informe-me nos comentários ou no chat .
O JavaScript pode não ser necessariamente o melhor idioma para responder a esse desafio específico. Observe que o código do snippet não fornece deliberadamente pistas sobre abordagens mais rápidas. Somente serão introduzidas eficiências que já foram demonstradas em uma resposta existente.
Visualização
Os pixels de pontuação
Para uma sensação intuitiva da distribuição dos pixels de pontuação, aqui (em roxo) estão os pixels de distância principal não ortogonais do pixel (128, 128) de uma imagem de 256 por 256:
Uma imagem aleatória
Esta é a imagem gerada aleatoriamente a partir da resposta de exemplo do Python 3. Tem uma pontuação de 138.267,64 e oferece a você algo para vencer.
Entrada
O código não requer entrada.
Resultado
O código deve gerar uma sequência de 65.536 zeros e uns, representando os pixels de uma imagem em preto e branco de 256 por 256. Os dígitos devem ser uma sequência contínua, sem separadores. Pode ser mais fácil copiar e colar se você imprimir em um arquivo, mas isso depende de você.
Seu código também pode gerar outras informações que você achar úteis, desde que a sequência possa ser copiada e colada no Snippet de Pilha. Por exemplo, você pode enviar a melhor sequência de caracteres para um arquivo e a melhor pontuação para STDOUT em intervalos regulares, permitindo que o usuário escolha quando parar a pesquisa.
Snippet de pilha
Como fora apontado por SP3000 , o trecho estava levando 10 minutos para calcular a pontuação, que é um pouco demasiado lento, mesmo para uma implementação de referência deliberadamente ineficiente. Editei na melhoria sugerida pelo Sp3000 de pré-calcular as compensações de pixel para a pontuação e agora leva alguns segundos para calcular uma pontuação.
Se você usar a saída ou o código de outra resposta como ponto de partida para o seu próprio código, lembre-se de dar crédito e vincular à resposta de suporte. As respostas a esta pergunta não precisam creditar a resposta de exemplo ou o código na pergunta.