Ваша программа должна принимать в качестве входных данных строку символов, например:
@+.0
И выведите символы, отсортированные по темноте, например:
.+0@
Требования:
Вы должны использовать моноширинный шрифт для обнаружения темноты.
Вы должны узнать, сколько пикселей занимает каждый символ. Вы должны нарисовать символ и посчитать пиксели, то есть вы не можете просто жестко закодировать количество пикселей.
- Как более конкретное правило: если вы переключили шрифты, ваша программа все равно должна работать. Кроме того, ваша программа должна иметь возможность переключать шрифты, просто изменяя переменную, значение или строку в коде.
Если вы используете сглаживание, вы должны считать пиксели в процентах от полностью черного пикселя. Например,
rgb(32, 32, 32)
пиксель будет считаться 1/8 от полного пикселя. Игнорируйте это правило, если ваши персонажи не сглажены.После подсчета пикселей необходимо отсортировать символы по количеству пикселей и вывести их по порядку.
Это код-гольф , поэтому выиграет самый короткий код в байтах.
Ответы:
Mathematica,
112 110108 байтЭто все еще может быть дальше в гольфе. Предполагается, что строка находится в переменной s.
И теперь использует правильный синтаксис для сортировки одного списка другим списком.
Счастливые тесты -> «О да, это работает» -> Facepalm
Спасибо за острые глаза, Дэвид Каррахер.
Обновление: заменил OCR A на Menlo, потому что я понял, что в OSX имя семейства шрифтов OCR A на самом деле является OCR A Std. Поэтому я сортировал шрифт по умолчанию вместо реальной сделки. Menlo также моноширинный с тем же количеством байтов, так что нет чистой прибыли или потерь.
Я включил экспорт записной книжки в CDF , чтобы вы могли видеть код в действии, если хотите. Я все еще выясняю, как добавить интерактивность к CDF, размещенным в Интернете, так что пока это просто статично.
Выход для
s = FromCharacterCode /@ Range[33, 135];
с "Курьером"Выход для того же, но с FontFamily "Monospace":
Обратите внимание, что окончательные результаты отображаются внутренним шрифтом MM, а не сортируемым шрифтом. Следовательно, вы видите различия в выбранном шрифте, отраженные в сортировке. Ссылка CDF показывает и то, и другое для полных участников.
Ungolfed код:
источник
"" <> (FromCharacterCode /@ Range[33, 135])
StringJoin@SortBy[Characters@"@+.0",ImageData@Binarize@Rasterize@Style[#,FontFamily->"Monospace"]~Total~2&]
Bash + ImageMagick:
164147148 символовОбразец прогона:
Разделители вставляются между группами серости. Символы с одинаковым уровнем серости не разделены:
источник
sort
QBasic, 259 байт
Я сделал это для удовольствия, так что это технически не соответствует правилам с одной стороны. Он не принимает список символов, а печатает все символы из 32-255 и использует его вместо этого. Если вы действительно хотите увидеть версию, которая соответствует этому правилу, пожалуйста, сообщите мне.
Это также не соответствует другой технической особенности: «Кроме того, ваша программа должна иметь возможность переключать шрифты, просто изменяя переменную, значение или строку в коде». Нет простого способа сделать это из QBasic. Тем не менее, программа, конечно, будет хорошо работать с любой кодовой страницей по вашему выбору.
Наконец, я мог бы сжать несколько символов (в основном это пробел, который услужливо вставляет QBasic IDE), но, вероятно, это того не стоит, так как у этого ответа все равно нет шансов на победу.
источник
Javascript + Canvas и браузер DOM (
280237235 байт)Обновленная версия с предложениями от Форса и зубной щеткой в комментариях:
Более читаемая версия:
Может быть, может быть в гольф больше.
Я новичок в этом сайте, поэтому я не уверен, как обычно читается ввод для ответов Javascript. Я предполагаю, что вход содержится в переменной с именем
s
. Если это не в порядке, я обновлю ответ и количество символов.JSFiddle обновленной версии.
JSFiddle первой версии .
источник
c
иs
являются ненужными (a=document.createElement('canvas').getContext('2d')
иy+=a.getImageData(0,0,30,30).data[i]
), элемент не нужно добавлять, инициализация нуляy
может быть объединена с инициализациейi
(i=y=0
), постинкрементi
может быть объединен с добавлениемy
(for(...;y+=...[i++]);
) и гарнитура Монако имеет одинаковое расстояние и имеет более короткое имя, чем Courier.prompt()
; но это тоже нормально.y=i=0;
и изменитьa.fillText(x,0,20)
наa.fillText(x,y=i=0,20)
.PHP, 298 символов
Я добавил несколько разрывов строк, чтобы вы могли видеть это во всей своей отвратительности:
Этот код использует шрифты GD, которые встроены в PHP. Второй аргумент
imagechar()
выбирает шрифт (допустимы числа от 1 до 5).Пример:
Если вы вставите следующую строку поверх кода, показанного выше, вы сможете указать список символов в своем веб-браузере.
источник
imagecreatetruecolor
вы можете отбросить первое выделение и использовать имя функции непосредственно для второго, для -11.[]
вместоarray()
. иforeach($a as$v)
работает так жеGTB
Этот код является вторым самым сложным кодом, который я когда-либо писал для калькулятора. Нет жестко запрограммированных значений пикселей, он фактически рисует текст на графике и циклически подсчитывает каждый пиксель.
вход
Выход
источник
Ява -
468 450444@+.0abcdefghijklmnopqrstuvwxyz
->.irl+jcvtfxyzsuonkheaqpdb0wgm@
Ungolfed:
источник
Постскриптум, 381
Вот что-то совершенно другое, просто для удовольствия. Так как большинство шрифтов в любом случае являются векторными, «считать пиксели» немного странно, не правда ли. Вычислить площадь формы глифа, будучи правильным способом, не так просто. Альтернативой может быть сканирование прямоугольника и подсчет «попаданий», когда точка находится внутри фигуры глифа, и Postscript имеет операторы для такого рода проверок. Правда, сканирование и внутреннее тестирование - это просто странный способ подсчета пикселей.
,
А вот результаты для 3 разных шрифтов (выбор которых можно прокомментировать выше):
источник
Perl (с GD) (159)
использование:
редактировать: сокращено до 159 символов
источник
Ява, 584
Вау ... Это был не очень хороший язык для этого.
Использование:
Эта настройка приводит к:
Единственная строка, которая нуждается в объяснении:
Тогда эта последняя часть объединяет ...
Перебирая все точки и суммируя количество точек. Эта информация о плотности передается обратно в компаратор и используется для сортировки.
источник
R, 195 символов
С отступом от комментариев:
Пример:
Поскольку шрифты на графиках R зависят от платформы, я не могу гарантировать, что они работают на ПК, но на Mac (OS X 10.7.5, R 2.14.2).
источник
SmileBASIC,
179176173 байтаИспользует текущий загруженный шрифт. Шрифты могут быть загружены с
LOAD"GRPF:filename"
.Более читаемый код:
источник
PHP - 485
Демо-версия:
Код:
источник
Python + freetype-py: 147
источник