Найкраща картина снайперської картини


16

Найдовший день у році - ось на що витрачати зайвий час ...


Огляд

Зауважте, що це не конкурс на популярність, а не виклик для графічного виведення - вам потрібно лише вивести рядок з 65 536 нулів і одиниць. Фрагмент стека внизу питання відображатиме це як чорно-біле зображення розміром 256 на 256 та обчислює ваш офіційний бал. Потім ви можете зберегти зображення та завантажити його у свою відповідь поряд із кодом (оскільки рядок виводу не вміститься у відповідь на обмін стеком 30 000 символів).


Оцінка балів

Оцінка зображення - це сума балів окремих його пікселів. Оцінка окремого пікселя - це сума підскорень для кожного з неортогональних , пікселів простих відстаней, які мають протилежне забарвлення пікселю. Піднижка для кожного такого пікселя - це місце, 1/pде pпросте відстань.

У контексті цього питання терміни мають такі визначення:

  • Неортогональний: піксель не ортогональний тому, що набраний піксель, якщо він не знаходиться в одному рядку і не знаходиться в тому ж стовпці.

  • Основна відстань: піксель знаходиться на простій відстані від набраного пікселя, якщо вони розділені на евклідову відстань, яка є точно простим числом. Зокрема, відстань - це мінімальна відстань, виміряна тороїдально - верхній лівий піксель - це відстаньsqrt(2)від правого нижнього пікселя (усі чотири краї обгортання).

  • Протилежний колір: піксель має протилежний колір, ніж набраний піксель, якщо їх значення дорівнюють 1. Тобто, перший дорівнює 0, а другий - 1, або перший - 1, а другий - 0.

Фрагмент стека включає приклад коду, який показує, як оцінити зображення, але не включає оптимізації чи ефективного підходу, просто виправити код, щоб підсумкове зображення можна було робити послідовно.

Якщо щось у коді невірно, будь ласка, повідомте мене або в коментарях, або в чаті .

JavaScript не обов'язково може бути найкращою мовою для відповіді на цей конкретний виклик. Зауважте, що код фрагменту свідомо не дає підказки щодо швидшого наближення. Буде запроваджено лише ефективність, що вже було продемонстровано у відповіді.


Візуалізація

Оцінка пікселів

Для інтуїтивного відчуття розподілу пікселів підрахунку тут (у фіолетовому кольорі) є неортогональні прості пікселі для пікселів (128, 128) зображення 256 на 256:

зображення неортогонального розподілу простих відстаней


Випадкове зображення

Це випадково генероване зображення з прикладу відповіді Python 3. Він має оцінку 138 267,64 і дає вам щось перемогти.

випадковим чином сформоване зображення


Вхідні дані

Код не потребує введення.

Вихідні дані

Код повинен виводити рядок 65,536 нулів і одиниць, що представляють пікселі чорно-білого зображення 256 на 256. Цифри повинні бути суцільним рядком, без роздільників. Ви можете скопіювати та скопіювати, якщо ви виведете у файл, але це залежить від вас.

Ваш код може також виводити іншу інформацію, яка вам здається корисною, доки рядок можна скопіювати та вставити у фрагмент стека. Наприклад, ви можете побажати виводити найкращий ще рядок у файл та найкращий показник STDOUT через регулярні проміжки часу, що дозволяє користувачеві обирати, коли зупинити пошук.


Фрагмент стека

Як вказувало Sp3000 , для обчислення балів у фрагмента знадобилося 10 хвилин, що є занадто повільним, навіть для навмисно неефективного виконання еталонного завдання. Я редагував у запропонованому Sp3000 поліпшенні попереднього обчислення зсуву пікселів для підрахунку балів, і зараз потрібно кілька секунд, щоб обчислити бал.


Якщо ви використовуєте вихідний чи код іншої відповіді в якості вихідної точки для власного коду, будь ласка, не забудьте вказати кредит та посилання на підтримку відповіді. У відповідях на це запитання не потрібно зараховувати приклад відповіді чи код у питанні.

Кредит Рандалу Манро на термін Nerd Sniping

Відповіді:


36

CJam, оцінка 276496.9062958626

2,128*_(]128*

Це виявляється оптимальним, тому що: Немає не ортогональних пар з відстані 2. Отже, відстань має бути непарною, а також відстань у квадраті. Оскільки p 2 = x 2 + y 2 , один з x і y (у квадраті чи ні) повинен бути непарним, а інший - парним. Ці точки завжди в протилежному кольорі на цьому зображенні.

Це та його мінус - це також єдині оптимальні рішення. В оптимальному рішенні жодні неортогональні пікселі простої відстані не повинні мати однаковий колір. Існують по діагоналі сусідні протилежні пікселі типу (3,4) та (4,3). Заповнюючи пікселі протилежного протилежного кольору тощо, ми можемо отримати діагональ такого ж кольору. Починаючи з кожного пікселя по діагоналі, ми можемо отримати всі антидіагоналі, заповнені однаково. Зверніть увагу, що вони обгортаються. Це все ж оптимально, якщо вони цього не роблять.


3
Я сподівався, що люди пройдуть більше часу, щоб помітити, що ...
trichoplax

1
Мені знадобилося багато часу, щоб розібратися, що було оптимальне рішення при написанні цього питання, тому я вважав, що варто було б опублікувати як виклик. Як ти це так швидко побачив? Це було просто очевидно чи у вас був певний процес мислення?
трихоплакс

4
PS Я не знаю, коли ви бачили це питання, але оптимальне рішення через 71 хвилину після розміщення питання заслуговує на винагороду - мені доведеться зачекати 2 дні, перш ніж я зможу його призначити ...
trichoplax

@trichoplax З вашого першого зображення здавалося, що в одній діагоналі є багато точок. Я думав використати більш широкі смуги на початку. І тоді я відкрив Gimp, щоб перевірити свою ідею. І на моє здивування, я отримав абсолютно чорне зображення, коли наповнив його цим малюнком.
jimmy23013

8
@trichoplax Враховуючи, що ви знали, що існує оптимальне рішення, я думаю, вам було б краще переглянути питання, щоб зробити його менш вирішуваним. Хоча jimmy23013 знайшов це швидко, завжди залишається питанням часу, поки хтось його не знайде, і тоді це закінчиться.
xnor

1

Python 3, оцінка 138267.64

Це мінімальна відповідь як приклад того, що потрібно, і як щось перемогти ...

Це включає

  • Назва мови.
  • Оцінка з фрагмента стека у питанні.
  • Зображення, збережене із фрагмента стека.
  • Код, який використовується для отримання рядка з 65 536 нулів і одиниць.

Вихідні дані

випадковим чином сформоване зображення

Код

from random import random

output_string = ''
filename = '65536digits.txt'

for t in range(65536):
    digit = int(random() * 2)
    output_string += str(digit)

with open(filename, 'w') as output_file:
    output_file.write(output_string)

Це лише приклад. Python не обов'язково може бути найкращою мовою для конкурентних відповідей на цей конкретний виклик.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.