Фон
PICASCII - це акуратний інструмент, який перетворює зображення в мистецтво ASCII.
Він досягає різних ступенів яскравості, використовуючи наступні десять символів ASCII:
@#+';:,.`
Ми скажемо, що ці шрифли (символьні елементи) мають яскравість від 1 (за знаком) до 10 (пробіл).
Нижче ви можете побачити результати перетворення невеликого коду, валлійського прапора, великого фрактала, великої форелі та маленького гольфу, відображеного правильним шрифтом:
Ви можете побачити зображення в цій скрипці та завантажити їх з Google Диска .
Завдання
Незважаючи на те, що кінцеві результати PICASCII візуально приємні, усі п’ять зображень у сукупності важать 153 559 байт. Наскільки ці зображення можна стиснути, якщо ми готові пожертвувати частиною їх якості?
Ваше завдання полягає в тому, щоб написати програму, яка приймає зображення ASCII типу мистецтва, як зазначені вище, і мінімальну якість, як вхідні дані, і друкує стиснене зображення у вигляді втрати - у вигляді повної програми або функції, що повертає одну рядок - що задовольняє вимога до якості.
Це означає, що вам не вдається написати окремий декомпресор; він повинен бути вбудований у кожне зі стислих зображень.
Оригінальне зображення буде складатися із шарклів із яскравістю від 1 до 10, розділених стрічковими каналами на лінії однакової довжини. Стиснене зображення повинно мати однакові розміри і використовувати один і той же набір символів.
Для нестисненого зображення, що складається з п шекселів, якість стисненої версії зображення визначається як
де c i - яскравість i- го шарксела на виході стисненого зображення, а u i - яскравість i- го шарксела нестисненого зображення.
Оцінка балів
Ваш код буде виконуватись із п’ятьма зображеннями зверху як параметри введення та мінімальної якості - 0,50, 0,60, 0,70, 0,80 та 0,90 для кожного із зображень.
Ваш бал - це геометричне середнє значення розмірів усіх стислих зображень, тобто двадцять п’ятий корінь добутку довжини всіх двадцяти п’яти стислих зображень.
Виграє найнижчий бал!
Додаткові правила
Ваш код повинен працювати для довільних зображень, а не тільки для тих, що використовуються для підрахунку.
Очікується, що ви оптимізуєте свій код до тестових випадків, але програма, яка навіть не намагається стиснути довільні зображення, не отримає відгуку від мене.
Ваш компресор може використовувати вбудовані компресори потоку байтів (наприклад, gzip), але вам доведеться їх реалізувати самостійно для стислих зображень.
Допускаються буліти, зазвичай використовувані в декомпресорах потоку байтів (наприклад, перетворення бази, декодування довжини пробігу).
Компресорні та стислі зображення не повинні бути однаковою мовою.
Однак для всіх стислих зображень потрібно вибрати одну мову.
Для кожного стисненого зображення застосовуються стандартні правила гольф-коду.
Перевірка
Я створив сценарій CJam, щоб легко перевірити всі вимоги до якості та обчислити бал подання.
Ви можете завантажити інтерпретатор Java звідси або тут .
e# URLs of the uncompressed images.
e# "%s" will get replaced by 1, 2, 3, 4, 5.
"file:///home/dennis/codegolf/53199/original/image%s.txt"
e# URLs of the compressed images (source code).
e# "%s-%s" will get replaced by "1-50", "1-60", ... "5-90".
"file:///home/dennis/codegolf/53199/code/image%s-%s.php"
e# URLs of the compressed images (output).
"file:///home/dennis/codegolf/53199/output/image%s-%s.txt"
e# Code
:O;:C;:U;5,:)
{
5,5f+Af*
{
C[IQ]e%g,X*:X;
ISQS
[U[I]e%O[IQ]e%]
{g_W=N&{W<}&}%
_Nf/::,:=
{
{N-"@#+';:,.` "f#}%z
_::m2f#:+\,81d*/mq1m8#
_"%04.4f"e%S
@100*iQ<"(too low)"*
}{
;"Dimension mismatch."
}?
N]o
}fQ
}fI
N"SCORE: %04.4f"X1d25/#e%N
Приклад
Bash → PHP, оцінка 30344.0474
cat
Досягає 100% якості для всіх матеріалів.
$ java -jar cjam-0.6.5.jar vrfy.cjam 1 50 1.0000 1 60 1.0000 1 70 1.0000 1 80 1.0000 1 90 1.0000 2 50 1.0000 2 60 1.0000 2 70 1.0000 2 80 1.0000 2 90 1.0000 3 50 1.0000 3 60 1.0000 3 70 1.0000 3 80 1.0000 3 90 1.0000 4 50 1.0000 4 60 1.0000 4 70 1.0000 4 80 1.0000 4 90 1.0000 5 50 1.0000 5 60 1.0000 5 70 1.0000 5 80 1.0000 5 90 1.0000 SCORE: 30344.0474