Кур'єрська цепція


13

Кур'єрська цепція

Програма повинна приймати будь-яку рядок як вхід і вихід піксельного зображення, що показує рядок введення кур'єром. Усі літери, які містять «дірку» (як abdegopqABDPQRі т.д.), оточену чорними пікселями, також повинні бути заповнені чорними кольорами.

Вхідні дані

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

Вихідні дані

Вихід повинен бути чорно-білим (без сірого) піксельним графіком, який показує рядок, написаний кур'єром (чорним кольором, білим тлом) із заповненими вказаними 'дірками'. Розмір шрифту всього рядка повинен бути постійним (це означає, що для різних букв немає різного масштабування), щоб букви в повному розмірі (наприклад, ABCDEFGHIJKLMNOPRSTUVWXYZj та Q були більшими) повинні бути висотою не менше 10 пікселів. (Вам не потрібно писати його у файл, будь-який вид дисплея є нормальним, доки він створюється як піксельна графіка, наприклад, полотно в JavaScript.) Будь ласка, опублікуйте цю графіку зі своєю відповіддю.

Доступ до бібліотек courier.ttf / шрифту дозволений.

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

Оцінка

Оцінка оцінюється наступним чином: Повний код програми повинен використовуватися як вхідний рядок до вашої програми. Кількість чорних пікселів буде вашим балом. Код програми, що містить літери, що не друкуються або не належать до 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 так :) (зараз для всіх) (фіксуючи підрахунок за секунду)
Мартін Ендер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.