Поэтому я думаю, что мы все, наверное, видели этот комикс xkcd :
:
Это может быть слишком общим или слишком сложным, я не уверен. Но задача состоит в том, чтобы создать программу на любом языке, которая создает окно, которое имеет как минимум 2 цвета и отображает английскими словами, какой процент экрана составляет каждый цвет.
ех. Простейшим решением будет белый фон с черными буквами, на которых написано: «Процент этого изображения черного цвета: [x]%. Процент этого изображения белого цвета: [y]%»
Вы можете сходить с ума или так просто, как хотите; Обычный текст - верное решение, но если вы делаете интересные изображения, как в комиксе xkcd, это даже лучше! Победителем станет самое веселое и креативное решение, получившее наибольшее количество голосов. Так что иди и сделай что-нибудь веселое и достойное xkcd! :)
Так что ты думаешь? Звучит как забавный вызов? :)
Пожалуйста, включите скриншот вашей программы в ответ :)
источник
"/.*/"
(читай: [исходный код] не содержит перевода строки)Ответы:
вяз
Еще никто не использовал эту лазейку: demo
источник
view source
размещен на share-elm.com и не является частью скомпилированного JS / HTML.JavaScript с HTML
Я попытался воспроизвести оригинальный комикс более точно. Снимок экрана сделан с использованием библиотеки html2canvas. Числа рассчитываются многократно, поэтому вы можете изменить размер окна или даже добавить что-то на страницу в режиме реального времени.
Попробуйте онлайн: http://copy.sh/xkcd-688.html
Вот скриншот:
источник
Обработка, 222 символа
Я всегда хотел сделать свою собственную версию этого комикса! Самый простой (единственный?) Способ, которым я мог думать об этом, был методом проб и ошибок - рисовать что-то, считать, рисовать снова ...
Эта программа устанавливает точный процент через несколько секунд. Это не очень красиво, но это интерактивно ; Вы можете изменить размер окна, и оно начнет пересчитываться.
Добавлены некоторые новые строки для удобства чтения:
Показывает только процент белых пикселей; Из-за сглаживания текста небелые пиксели не обязательно являются черными. Чем дольше он работает, тем больше времени ему потребуется для обновления при изменении размера.
Редактировать:Итак, это вызов кода; Я в любом случае играл в гольф. Может быть, я мог бы добавить какие-то графики позже, но общий принцип остался бы прежним. Я думаю, что интерактивность - это аккуратная часть.
источник
background(-1)
background(255)
Отличный вызов Вот мое решение. Я пытался максимально приблизиться к оригинальному комиксу, я даже использовал шрифт xkcd .
Это приложение WPF, но я
System.Drawing
рисовал детали, потому что я ленивый.Основная концепция: в WPF окна есть
Visuals
, что означает, что они могут быть отображены. Я рендерим весь экземпляр Window на растровое изображение, подсчитываю черный и общий черный или белый (игнорируя серые цвета в сглаживании шрифтов и прочее), а также подсчитываю их для каждого третьего изображения (для каждой панели). Затем я делаю это снова по таймеру. Это достигает равновесия в течение секунды или двух.Скачать:
MEGA Всегда проверяйте загружаемые файлы на наличие вирусов и т. Д. И т. Д.
Вам нужно установить указанный выше шрифт в вашу систему, если вы хотите его увидеть, в противном случае это WPF по умолчанию.
XAML:
Код:
Код не очищен, но он должен быть несколько читабельным, извините.
источник
C (с SDL и SDL_ttf): решение в оттенках серого
Вот решение, в котором используется форма круговой диаграммы для захвата всего спектра оттенков серого в пикселях с тактовой частотой чуть менее 100 строк.
Как и в моем предыдущем решении, путь к файлу шрифта должен быть либо жестко задан в источнике, либо добавлен в команду сборки, например:
Вывод программы выглядит так:
На это весело смотреть, потому что вся математика замедляет перерисовку, чтобы вы могли увидеть, как программа сосредоточена на стабильном решении. Первая оценка сильно отклонена (поскольку поверхность начинается полностью черной), а затем уменьшается до конечного размера после примерно дюжины итераций.
Код работает путем подсчета количества пикселей каждого цвета в текущем изображении. Если этот счетчик населения не соответствует последнему, он перерисовывает изображение. Код перебирает каждый пиксель, но он преобразует координаты x, y в полярные координаты, сначала вычисляя радиус (используя центр изображения в качестве источника). Если радиус находится в области круговой диаграммы, он вычисляет тета. Тета легко масштабируется до количества населения, которое определяет цвет пикселя. С другой стороны, если радиус находится прямо на границе круговой диаграммы, то значение сглаживания вычисляется, чтобы нарисовать круг вокруг внешней части диаграммы. Полярные координаты делают все просто!
источник
float
версии функций математической библиотеки, но не должныfabs
лиfabsf
?fabs()
более портативно.C (с SDL и SDL_ttf)
Вот очень простая реализация, примерно в 60 строках кода C:
Чтобы скомпилировать это, вам нужно определить,
FONTPATH
чтобы он указывал на файл .ttf используемого шрифта:На большинстве современных машин Linux вы можете использовать
fc-match
утилиту для поиска местоположения шрифтов, поэтому команда compile становится такой:(Конечно, вы можете заменить запрошенный шрифт своим любимым.)
Код специально не запрашивает сглаживания, так что окно содержит только черные и белые пиксели.
Наконец, меня вдохновило элегантное решение @ daniero, позволяющее изменять размер окна. Вы увидите, что иногда программа колеблется между счетами, застревая на орбите вокруг аттрактора, которого она никогда не достигнет. Когда это произойдет, просто измените размер окна, пока оно не остановится.
И, по запросу, вот как это выглядит, когда я запускаю его в своей системе:
Наконец, я чувствую, что должен отметить, в случае, если кто-то здесь еще не видел его, что MAA опубликовало интервью с Рэндаллом Манро, в котором он обсуждает создание мультфильма № 688 с некоторыми подробностями.
источник
Изображение имеет размер 100x100, а числа точные, и я имею в виду точное - я выбрал изображение размером 10000 пикселей, чтобы проценты можно было выразить с двумя десятичными знаками. Метод был немного математическим, немного угадывался, и некоторые вычисления в Python.
Поскольку я заранее знал, что проценты могут быть выражены в 4 цифры, я посчитал, сколько черных пикселей было в каждой из цифр от 0 до 9, в Arial высотой 8 пикселей, что и является текстом, в котором написан текст. Я написал Быстрая функция,
weight
которая сообщает вам, сколько пикселей необходимо для записи заданного числа, оставляя дополненным нулями, чтобы иметь 4 цифры:px
массив цифр, отображающий количество требуемых пикселей Если B - количество черных пикселей, а W - количество белых пикселей, то у нас естьB + W = 10000
, и нам нужно:Откуда пришли константы? 423 - это «начальное» количество черных пикселей, количество черных пикселей в тексте без цифр. 9577 - количество исходных белых пикселей. Я должен был отрегулировать количество исходных черных пикселей несколько раз, прежде чем мне удалось получить константы, чтобы у вышеуказанной системы было даже решение. Это было сделано путем угадывания и скрещивания пальцев.
Вышеуказанная система ужасно нелинейна, поэтому очевидно, что вы можете забыть о ее символическом решении, но вы можете просто пройтись по каждому значению B, установить W = 10000 - B и проверить уравнения в явном виде.
источник
QBasic
Потому что ностальгия.
И потому что я действительно не знаю, какие библиотеки изображений являются современными языками.
Довольно простой метод вывода-подсчета-повторения. Основная «интересная» вещь заключается в том, что программа случайным образом пробует разные значения процентной доли - я обнаружил, что в других случаях она не всегда сходится.
И вывод (проверено на QB64 ):
источник
AWK
... с netpbm и другими помощниками
Файл 'x':
Бег:
Изображение написано как «x.pbm», я преобразовал его в png для загрузки:
источник