Курьер Цепсион


13

Курьер Цепсион

Программа должна принимать любую строку в качестве входных данных и выводить пиксельное изображение, которое показывает входную строку в Courier. Все буквы, которые содержат «дыру» (например, и abdegopqABDPQRт. Д.), Окруженную черными пикселями, также должны быть закрашены черным.

вход

Программа должна быть в состоянии принять любую строку ASCII в качестве ввода. Ввод может быть любым, каким вы захотите, до тех пор, пока сам код программы не должен изменяться, чтобы принять другой ввод. (За исключением, например, имени файла файла, который должен быть прочитан.) Нет стандартных лазеек. Можно предположить, что каждый ввод содержит хотя бы одну печатную букву.

Выход

Выходные данные должны быть черно-белыми (без серого) пиксельными изображениями, которые показывают строку, написанную в Courier (черный, белый фон), с заполненными указанными «отверстиями». Размер шрифта всей строки должен быть постоянным (что означает отсутствие различного масштабирования для разных букв), поэтому полноразмерные буквы (например, ABCDEFGHIJKLMNOPRSTUVWXYZj и Q больше) должны иметь высоту не менее 10 пикселей. (Вам не нужно записывать его в файл, любой вид отображения в порядке, если он генерируется как пиксельная графика, например, холст в JavaScript.) Пожалуйста, опубликуйте эту графику с вашим ответом.

Доступ к библиотекам courier.ttf / font разрешен.

Программа должна также подсчитать количество черных пикселей и записать его на консоль или какой-либо другой способ вывода, выбранный в конце.

Гол

Оценка оценивается следующим образом: полный программный код должен использоваться в качестве входной строки для вашей программы. Количество черных пикселей будет вашим счетом. Программный код, содержащий непечатаемые или не ASCII-буквы, не допускается. (Как и стандартные лазейки.) Чем меньше баллов, тем лучше.


Выходные данные указаны как ч / б, поэтому серые пиксели не допускаются. И спасибо, что спросили о кодировке, это будет ограничено ASCII из-за шрифта.
flawr

1
Есть как минимум две серьезные проблемы, требующие прояснения. Во-первых, не ясно, разрешено ли программе доступ к Courier.ttf и библиотекам шрифтов, которые могут его использовать. Во-вторых, вы серьезно намерены запретить программы, которые не содержат символы, отличные от ASCII?
Питер Тейлор

Да, доступ к Courier.ttf и библиотекам шрифтов разрешен - иначе не будет смысла, спасибо. Я не смог придумать какой-либо основной язык, который полагается на символы не-ASCII - знаете ли вы языки, для которых нужны символы не-ASCII?
flawr

1
@flawr APL. А в Mathematica вы могли бы сократить несколько вещей, используя символы Unicode.
Мартин Эндер

Разрешено ли использование ImageMagick ?
Цифровая травма

Ответы:


12

Mathematica, 4864 пикселей

l = ImageData[Binarize[Rasterize[Style[j, FontSize -> 15]], .71]]
i = {{1, 1}}
While[Length[i] > 1 - 1,
 {r, c} = j = i[[1]]; l[[r, c]] = 2; i = i[[2 ;; -1]];
 If[FreeQ[i, {r, c} = J = j + #] && l[[r, c]] == 1, 
    i = i~Join~{J}] & /@
  {{1, 1 - 1}, {1 - 1, 1}, {-1, 1 - 1}, {1 - 1, -1}}
 ]
Image[l = l /. 1 -> 1 - 1 /. 2 -> 1]
Count[l, 1 - 1, {2}]

Вот картинка:

введите описание изображения здесь

В Mathematica, когда вы пишете «программу», вы просто пишете фрагмент. Таким образом, ожидается, что входные данные сохранены, jи последнее, что он возвращает, это изображение и количество. Это также выдает кучу ошибок, потому что я не проверяю границы l, но в любом случае это дает желаемый результат.

где %относится к указанному последнему выводу.

Спасибо Geobits за идею для алгоритма. Я заливаю изображение из левого верхнего угла недопустимой интенсивностью, затем заменяю все оставшиеся белые пиксели черными, а недействительные - белыми.

Обратите внимание, что FreeQ проверка на самом деле не обязательна для правильной работы программы, но для ее завершения в разумные сроки. Если бы я не учел это, я бы на самом деле набрал на 300 пикселей меньше.


Подсчет должен быть частью самой программы! Кроме того, это хорошее решение, вы рассчитывали, какие буквы (как имена переменных) используют наименьшее количество пикселей?
flawr

@flawr да :) (теперь для всех) (исправление счета в секунду)
Мартин Эндер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.