Итак, вы сидели за своим столом и играли в гольф, рассчитывая первые 20 цифр числа Пи, а потом приходит ваш босс и выбрасывает яблоко в окно. Сейчас вы работаете над новым проектом, и у этого компьютера еще нет текстовых возможностей. Никто. Нет шрифтов. Ничего.
Теперь давайте закончим эту программу. Рассчитайте и отобразите первые 20 символов числа Пи, не используя шрифты, которые не являются частью вашей программы. Ваш вывод может быть отображен или записан в стандартный формат в виде файла изображения (jpeg, png, gif, svg (если вы не используете никаких символов), bmp, xpm). Вы можете использовать любой язык, но вы не можете использовать функции шрифта вашего языка, отображение текста или подобное.
небольшой бонус (10 символов), если он будет работать на Лизу.
Редактировать: для тех, кто не понял, мое вдохновение было первым Mac, и название каламбур. Большое спасибо @Sukminder, чей анимированный GIF просто классный. Конкурс не заканчивается, если приходит лучший ответ.
источник
Ответы:
Питон, 222 символа
Первая строка вычисляет цифры числа пи с использованием приближения
pi-3 ~= 277991633/1963319607
. Следующие три строки выводят 20 символов пи с использованием ASCII art Nemeth Braille.Здесь я раздвигаю границы в двух направлениях, как в «вычислении Пи», так и в «читабельном» смысле.
источник
*
и пробелы без шрифта?*
себе черный пиксель 1x1 и `` белый пиксель 1x1.*
без использования шрифтов, я думаю, что вы дисквалифицированыPython, 217 байт
Требуется библиотека изображений Python
Подсчет байтов предполагает, что экранированный символ
\177
заменяется его буквальным эквивалентом (символ 127 ).Вывод будет выглядеть следующим образом (он откроется в вашей стандартной программе просмотра * .bmp):
Обратите внимание, что это может быть легко параметризовано для печати любого количества цифр, которые вам нравятся. Следующее примет целочисленный ввод из stdin и отобразит столько цифр:
Выход для n = 80 :
Расчет Пи
Да, это так. Формула используется результат применения Эйлера Transform к серии Лейбница , а затем факторизуя каждый член от остальной части суммы. Формула сходится линейно; каждая цифра требует log 2 (10) ≈ 3,32 итерации. Для тех, кто заинтересован в деривации, см. Приложение А.
дисплей
PIL используется для генерации изображений, потому что это самая удобная из известных мне библиотек. Создается пустое черно-белое растровое изображение размером 141 × 11 , а затем на нем рисуются белые линии семисегментным способом, по одному пикселю за раз. Позиции, необходимые для рисования каждого сегмента, хранятся в строке битовой маски с битами, соответствующими следующим позициям:
Бит магии
(j%7/5*4-~j%7/4*~j/7+p,j%7*3%14%8+j%14/10+2)
производит каждый пиксель в следующем порядке (base-18):Приложение
Преобразование Эйлера - это метод ускорения сходимости, который работает для любой серии, которая показывает абсолютную монотонную сходимость. Результирующий ряд будет сходиться линейно, обычно со скоростью один бит на член (обратите внимание, что если исходный ряд уже был суперлинейным, результирующий ряд будет на самом деле сходиться медленнее). Чисто математическое описание немного трудно следовать, так что я буду принимать процедурный подход.
Начнем с серии Лейбница:
Затем разделите каждый член пополам, комбинируя соседние термины:
Упрощенная:
Обобщенная:
Обратите внимание, что у ведущего ½ не было партнерского термина, и, следовательно, он был исключен из остальной суммы. Это первый член преобразованной серии. Чтобы найти следующий термин, мы повторяем процесс снова:
И опять:
И опять:
И еще раз для хорошей меры:
На данный момент у нас есть первые пять слагаемых, и шестой член очевиден. Этого должно быть достаточно для обобщения, поэтому мы остановимся здесь. Начнем с факторизации числителей и знаменателей:
Знаменатели , очевидно , содержат двойной факториал из 2n + 1 , так что мы будем латать , что:
Все подходит, за исключением первых двух слагаемых, которые имеют неучтенные 2 в знаменателе. Мы можем исправить это, умножив все выражение на 2 :
2 3 = 2 · 4 , поэтому:
Числитель теперь может быть легко идентифицирован как n! ,
Обратите внимание, что коэффициент, добавляемый к каждому последующему члену, n / (2n + 1) , приближается к 1/2, когда n становится большим, что подразумевает линейную сходимость со скоростью один бит на член - это на самом деле задумано. Хороший результат, но без факториалов было бы еще лучше. Здесь мы можем отделить каждый последующий член от остальной суммы, что сгенерирует вложенное выражение:
Это может быть переписано как рекуррентное отношение:
Где n отсчитывается в обратном направлении от ⌈ log 2 (10) · d ⌉ .. 0 , где d - количество требуемых цифр.
Может быть интересно отметить, что стабильная точка этого повторения равна точно 2 (или 4, если вы удвоили его, как я сделал в приведенном выше разделе), поэтому вы можете сохранить несколько итераций, правильно инициализировав. Тем не менее, инициализация случайного значения, которое вам нужно в другом месте, и добавление нескольких дополнительных итераций вверху, как правило, обходится дешевле.
источник
p
вp/2 * x/p + ...
делают .. AIUI Python поддерживает автоматическое продвижение к BigInteger-иш типа данных, поэтому оно не должно быть прецизионной вещи, но почему - то те ,p
S дела и не отменяют , как я полагаю , их ... что мне здесь не хватает?p
инициализируется нечетно, так чтоp/2/p
эквивалентно - при целочисленном делении -((p-1)/2)/p
. Это производит1/3
,2/5
,3/7
и т.д. термины , полученные выше.#C - 777 символовC - 731 символов
Печать GIF в
stdout
.3
.Сшивание GIF из предварительно сконфигурированного заголовка + каждая цифра, представленная домашним шрифтом (встроенный) шрифта 5x5 пикселей.
Обратите внимание, что GIF иногда исчезает в Chrome после одного запуска.
Краткое введение:
Расчет ИП
Pi рассчитывается с использованием слегка модифицированной версии реализации Дика Винтера и Ахима Фламменкампа алгоритма Рабиновича и Вагона для вычисления цифр π.
GIF поколения
GIF изображения имеет
canvas
свойство в заголовке. Мы можем использовать это в сочетании с отображением нескольких изображений, устанавливаяleft
свойства для каждой цифры соответственно - где каждая цифра является (встроенным) изображением сама по себе.Документация.
Пример:
Расширенный код (с множеством комментариев)
Грязно, но это часть минимизации :
Хотите использовать более короткий / другой алгоритм для вычисления π.
источник
JavaScript, 680 символов
Это можно посмотреть в веб-браузере; числа выводятся как пути SVG.
Он не вычисляет пи интересным образом, и JS не хватает числового типа с точностью до 20 цифр.
Чтобы сохранить символы, я пропустил данные пути для «0», так как они не отображаются в последовательности.
источник
Java -
866860857853 символа, плюс читерская версия с 574 символамиИспользуя формулу Симона Плуффа с 1996 года, выводится
x.png
файл с белыми цифрами в виде цифровых часов на черном фоне:Это сжатый код:
Вот с идентификацией и некоторыми пробелами было бы так:
Обманывая правила и учитывая, что вычисление PI может быть выполнено как «числовое представление строки 3.1415926535897934384», это можно уменьшить до 574 символов:
источник
Java -
642622 символаКопирование из моего предыдущего ответа, используя формулу Симона Плуффа от 1996 года. Но вместо этого выводит ASCII-art:
Все это с некоторой идентификацией и пробелами, а также с некоторой помощью для читателя, чтобы понять значение магических чисел:
Выход:
источник
С
253250 символовАппроксимирует число pi, используя алгоритм в коде @ Sukminder (беззастенчиво заимствуя и немного реорганизуя свой код). Выводит двоичное изображение PBM , которое затем можно преобразовать, например, с помощью ImageMagick.
Вот как выглядит вывод с моим рендером PPM на основе Брайля:
Имеет ту же причуду, что и ответ @ Sukminder в том, что в нем отсутствует десятичный разделитель. Кроме того, мой вывод является вертикальным, и можно ли предположить, что он читается человеком ...
Изменить: применены предложения @ Угорен.
источник
puts
кfor
инициализации, определитьL[5]
и опустить,0
. Сделайтеd
параметрmain
(сохранить запятую).PHP 380
требуется GD включен для вывода изображения
Пи вычисление: поскольку базовый php имеет точность по умолчанию 14, и я не хотел перекомпилировать сервер с включенными расширениями произвольной точности, я даже не смог приблизить PI с требуемыми десятичными знаками, поэтому вместо этого он вычисляет tau / 2, а затем остальные десятичные дроби
так как графика состоит из 0 и 1, я могу попробовать использовать WBMP в качестве формата позже, чтобы посмотреть, смогу ли я удалить gd
источник
3x5 with 1 px between chars
. цвет красный только для того, чтобы уменьшить 4 символа, но, учитывая, что я не выиграю, яimagecreate
), первый вызовimagecolorallocate
устанавливает цвет фона, а второй - для установки цвета письма. так дольше кончаетсяПринтер C + LaserWriter 599 - 10 = 589
Передайте вывод на ваш LaserWriter! :) Это должно работать на Лизе (с компилятором C).
Он вычисляет
pi
в принтере, вычисляя сумму длин отрезков, которые приблизительно соответствуют последовательности кривой Безье, которая приблизительно равна половине окружности, деленной на диаметр, умноженной на 2.Ungolfed Level-1 (1985-совместимый) PostScript:
Выход:
источник
Java,
157426431934 символовСжатые символы 1934 года :
Расширено 2643 символа:
Метод Пи взят из: /programming/8343977/calculate-pi-on-an-android-phone?rq=1
источник
throws Exception
вmain
и извлекать блок примерочных поймать. Кроме того, вы можете переименовыватьpi
иsqrt
методы иloc
,args
,SCALE
,x0
иx1
переменные в 1 идентификаторов гольцов. И, кстати, вы должны добавить полный класс, включаяclass Foo{
объявление и импорт.