Самореференциальная формула Таппера (скопировано из Википедии)
Самореференциальная формула Таппера - это формула, определенная Джеффом Таппером, которая, будучи построенной в двух измерениях в очень специфическом месте на плоскости, может быть «запрограммирована» для визуального воспроизведения самой формулы. Он используется в различных курсах математики и информатики как упражнение в построении графиков.
Где эта функция пола?
Позвольте k
быть следующим 543-значным числом:
960939379918958884971672962127852754715004339660129306651505519271702802395266424689642842174350718121267153782770623355993237280874144307891325963941337723487857735749823926629715517173716995165232890538221612403238855866184013235585136048828693337902491454229288667081096184496091705183454067827731551705405381627380967602565625016981482083418783163849115590225610003652351370343874461848378737238198224849863465033159410054974700593138339226497249461751545728366702369745461014655997933798537483143786841806593422227898388722980000748404719
Если построить график точек (x, y)
в 0 <= x < 106
и k <= y < k + 17
удовлетворяющих неравенству, указанному выше, результирующий график выглядит следующим образом (обратите внимание, что оси на этом графике были перевернуты, в противном случае картина получается перевернутой):
И что?
Интересной особенностью этой формулы является то, что ее можно использовать для построения графиков любого возможного черно-белого изображения размером 106x17. Теперь, на самом деле поиск в поиске был бы чрезвычайно утомительным, поэтому есть способ выяснить значение k, в котором появляется ваше изображение. Процесс довольно прост:
- Начните с нижнего пикселя первого столбца вашего изображения.
- Если пиксель белый, к значению k будет добавлен 0. Если это черный, добавьте 1.
- Переместите колонку вверх, повторив шаг 2.
- Оказавшись в конце столбца, перейдите к следующему столбцу и начните снизу, следуя тому же процессу.
- После анализа каждого пикселя преобразуйте эту двоичную строку в десятичную и умножьте на 17, чтобы получить значение k.
Какая у меня работа?
Ваша задача - создать программу, которая может принимать любое изображение размером 106x17 и выводить соответствующее ему значение k. Вы можете сделать следующие предположения:
- Все изображения будут ровно 106х17
- Все изображения будут содержать только черные (# 000000) или белые (#FFFFFF) пиксели, между которыми ничего нет.
Там также есть несколько правил:
- Выход - это просто значение k. Он должен быть в правильной базе, но может быть в любом формате.
- Изображения должны быть прочитаны из PNG или PPM.
- Нет стандартных лазеек.
Тестовые изображения
[ ] должно выдать ~ 1.4946x10 542
[ ] должно выдать ~ 7.2355x10 159
[ ] должно выдать 2 1801 * 17
[ ] должен произвести (2 1802 -1) * 17
Проверьте этот Гист для точных решений.
Это код-гольф , поэтому выигрывает наименьшее количество байтов.
Полезные ссылки
quine
где-нибудь увижу слово .