Самый длинный день в году - вот на что тратить лишнее время ...
обзор
Обратите внимание, что это не конкурс популярности и не графическая задача вывода - вам нужно только вывести строку из 65 536 нулей и единиц. Фрагмент стека в нижней части вопроса отобразит это как черно-белое изображение 256 на 256 и подсчитает ваш официальный счет. Затем вы можете сохранить изображение и загрузить его в свой ответ вместе с вашим кодом (поскольку вывод строки не будет соответствовать ответу Stack Exchange из 30000 символов).
счет
Оценка изображения - это сумма оценок отдельных пикселей. Оценка отдельного пикселя сумма subscores для каждого из неортогональных , простых расстояний пикселей , которые имеют противоположный цвета на пиксел набрали. Подсчет для каждого такого пикселя - это 1/p
где p
расстояние.
В контексте этого вопроса термины имеют следующие определения:
Неортогональный: пиксель не ортогонален оцениваемому пикселю, если он не находится в той же строке и не находится в том же столбце.
Простое расстояние: пиксель находится на простом расстоянии от оцениваемого пикселя, если они разделены евклидовым расстоянием, которое является в точности простым числом. В частности, расстояние - это минимальное расстояние, измеренное тороидально - верхний левый пиксель - это расстояние
sqrt(2)
от нижнего правого пикселя (все 4 ребра оборачиваются).Противоположный цвет: пиксель имеет цвет, противоположный оцениваемому пикселю, если их значения равны 1. То есть, первое равно 0, а второе равно 1 или первое равно 1, а второе равно 0.
Фрагмент стека включает в себя пример кода, который показывает, как оценивать изображение, но не включает каких-либо оптимизаций или эффективного подхода, просто исправьте код, чтобы можно было последовательно оценивать итоговые изображения.
Если что-то в коде неверно, пожалуйста, сообщите мне об этом в комментариях или в чате .
JavaScript может быть не обязательно лучшим языком для ответа на этот конкретный вызов. Обратите внимание, что код Snippet намеренно не дает никаких подсказок относительно более быстрых подходов. В него будут введены только те эффективности, которые уже были продемонстрированы в существующем ответе.
Визуализация
Подсчет пикселей
Для интуитивного понимания распределения баллов оценки здесь (фиолетовым цветом) представлены пиксели неортогонального простого расстояния для пикселя (128, 128) изображения 256 на 256:
Случайное изображение
Это случайно сгенерированное изображение из примера ответа Python 3. Он набрал 138 267,64 балла и дает вам возможность выиграть.
вход
Код не требует ввода.
Выход
Код должен вывести строку из 65 536 нулей и единиц, представляющих пиксели черно-белого изображения 256 на 256. Цифры должны быть непрерывной строкой без разделителей. Копирование и вставка могут оказаться проще, если вы выводите в файл, но это ваше дело.
Ваш код может также выводить другую информацию, которая будет вам полезна, если строку можно скопировать и вставить в фрагмент стека. Например, вы можете захотеть выводить в файл лучшую, но пока еще строку, а лучшую оценку - в STDOUT через регулярные промежутки времени, позволяя пользователю выбрать, когда следует остановить поиск.
Фрагмент стека
Как указывает Sp3000 , сниппету потребовалось 10 минут, чтобы вычислить оценку, которая слишком медленная, даже для намеренно неэффективной эталонной реализации. Я отредактировал в предложении Sp3000 улучшенное предварительное вычисление смещения пикселей для оценки, и теперь для подсчета очков требуется несколько секунд.
Если вы используете вывод или код другого ответа в качестве отправной точки для своего собственного кода, пожалуйста, не забудьте дать ссылку и ссылку на вспомогательный ответ. Ответы на этот вопрос не нужно указывать в качестве примера ответа или кода в вопросе.