Вызов
Напишите программу, которая сжимает и распаковывает текст ASCII без потерь. Он должен быть специализированным, чтобы хорошо работать с палиндромами, в том числе с нечувствительным к регистру и с пунктуацией палиндромами. Лучшее сжатие с наименьшим источником выигрывает.
счет
total_bytes_saved / sqrt(program_size)
- выигрывает самый высокий балл
total_bytes_saved
На сколько байт меньше сжатых строк, чем оригиналов, всего в тестовых примерах ниже. program_size
это размер в байтах исходного кода программ сжатия и распаковки. Код, общий для двух, должен учитываться только один раз.
Например, если есть 10 тестовых случаев и 100-байтовая программа сохранила 5 байтов на 7 тестовых случаях, по 10 на 2 из них, но последний тестовый случай был на 2 байта длиннее, решение получило бы 5,3. ( (7 * 5 + 10 * 2 - 2) / sqrt(100) = 5.3
)
Тестовые случаи
tacocat
toohottohoot
todderasesareddot
amanaplanacanalpanama
wasitacaroracatisaw?
Bob
IManAmRegalAGermanAmI
DogeeseseeGod
A Santa at NASA
Go hang a salami! I'm a lasagna hog.
правила
- Применяются стандартные лазейки.
- Сжатие должно работать со всеми печатаемыми текстовыми строками ASCII (байты 32-126 включительно), а не только с палиндромами. Однако на самом деле не нужно экономить место для каких-либо входов.
- Вывод может быть любой последовательностью байтов или символов, независимо от ее реализации или внутреннего представления (например, строки, списки и массивы - это честная игра). При кодировании в UTF-8 считайте байты, а не символы. Широкие строки (например, UTF-16 или UTF-32) не допускаются, если только возможные кодовые точки находятся в диапазоне от 0 до 255.
- Встроенные функции сжатия / распаковки не допускаются.
Для собственного удовольствия опубликуйте сжатые строки с вашим исходным кодом.
ОБНОВЛЕНИЕ 1: Оценка изменена с total_bytes_saved / program_size
на total_bytes_saved / sqrt(program_size)
, чтобы придать больший вес лучшей компрессии и меньший вес агрессивным играм в гольф. Скорректируйте свои оценки соответственно.
UPDATE 2: фиксированный , wasitacaroraratisaw?
чтобы бытьwasitacaroracatisaw?
[32-126]
?
1000 *
роль действительно нужна, и нет, я не думаю, что это заставит счет чувствовать себя более «удовлетворительным»;)
wasitacaroraratisaw?
это контрпример к этому