- 18, Oct 2024
- #1
Ваша миссия сегодня — изобрести текстовый компрессор.
Задача
Вы напишете две функции:
упаковщик — это функция, которая принимает строку символов ASCII (от U+0000 до U+007F) и выводит строку Unicode (от U+0000 до U+10FFFF), содержащую наименьшее возможное количество символов.
распаковщик — это функция, которая принимает закодированную строку Unicode и выводит в точности исходную строку ASCII.
Вход
Единственными разрешенными входными данными являются строка ASCII (для упаковщика) и упакованная строка Unicode (для распаковщика). Никакого пользовательского ввода, никакого подключения к Интернету, никакого использования файловой системы.
Ваши функции могут иметь доступ к этот список английских слов. Вы можете использовать этот список как локальный текстовый файл или скопировать его содержимое в исходный код в виде строки или массив строк.
Вы не можете жестко запрограммировать приведенные ниже фрагменты в своих функциях.
Выход
Единственным разрешенным выводом для обеих функций является строка.
Выходные данные распаковщика должны содержать точно те же символы, что и входные данные упаковщика.
Ваши входные и выходные данные могут использовать любую кодировку символов, поддерживающую весь Unicode (UTF-8/16/32, GB18030, ...), поскольку ваш результат будет зависеть только от количества символов Unicode в выходных данных. Пожалуйста, уточните, какую кодировку вы используете.
Чтобы подсчитать количество символов Юникода в выводе, вы можете использовать этот инструмент: http://mothereff.in/byte-counter
Подсчет очков
Ваша запись должна быть в состоянии упаковать и распаковать 10 следующих фрагментов текста (которые я взял на этом форуме).
Ваша оценка будет равна сумме размеров ваших 10 упакованных строк (в символах Юникода) + размер двух ваших функций (также в символах Юникода).
Не считайте размер словаря, если вы им пользуетесь.
Пожалуйста, укажите в своих записях «оценку» каждого фрагмента и его упакованную версию.
Побеждает наименьший результат.
Данные
Вот фрагменты, которые нужно закодировать для расчета вашего балла:
1: Тексты песен Рика Ролла (1870b): Мы не новички в программировании гольфа, вы знаете правила, и я тоже.
Four score and seven years ago our fathers brought forth on this continent a new nation, conceived in liberty, and dedicated to the proposition that all men are created equal. Now we are engaged in a great civil war, testing whether that nation, or any nation so conceived and so dedicated, can long endure. We are met on a great battlefield of that war. We have come to dedicate a portion of that field, as a final resting place for those who here gave their lives that that nation might live. It is altogether fitting and proper that we should do this. But, in a larger sense, we can not dedicate, we can not consecrate, we can not hallow this ground. The brave men, living and dead, who struggled here, have consecrated it, far above our poor power to add or detract. The world will little note, nor long remember what we say here, but it can never forget what they did here. It is for us the living, rather, to be dedicated here to the unfinished work which they who fought here have thus far so nobly advanced. It is rather for us to be here dedicated to the great task remaining before us-that from these honored dead we take increased devotion to that cause for which they gave the last full measure of devotion-that we here highly resolve that these dead shall not have died in vain-that this nation, under God, shall have a new birth of freedom-and that government of the people, by the people, for the people, shall not perish from the earth.
2: Игрок в гольф (412b): Игра в гольф ASCII-арт
There was an old lady who swallowed a fly. I don't know why she swallowed that fly, Perhaps she'll die. There was an old lady who swallowed a spider, That wriggled and iggled and jiggled inside her. She swallowed the spider to catch the fly, I don't know why she swallowed that fly, Perhaps she'll die. There was an old lady who swallowed a bird, How absurd to swallow a bird. She swallowed the bird to catch the spider, She swallowed the spider to catch the fly, I don't know why she swallowed that fly, Perhaps she'll die. There was an old lady who swallowed a cat, Imagine that to swallow a cat. She swallowed the cat to catch the bird, She swallowed the bird to catch the spider, She swallowed the spider to catch the fly, I don't know why she swallowed that fly, Perhaps she'll die. There was an old lady who swallowed a dog, What a hog to swallow a dog. She swallowed the dog to catch the cat, She swallowed the cat to catch the bird, She swallowed the bird to catch the spider, She swallowed the spider to catch the fly, I don't know why she swallowed that fly, Perhaps she'll die. There was an old lady who swallowed a horse, She died of course.
3: числовой ромб (233b): Распечатайте этот бриллиант
May the road rise up to meet you May the wind be always at your back May the sun shine warm upon your face The rains fall soft upon your fields And until we meet again May God hold you in the hollow of His hand
4: алфавит четыре раза (107б): Распечатайте алфавит четыре раза.
_ _ _ _ _ _ _ | | | | ___| | | ___ __ _____ _ __| | __| | | | |_| |/ _ \ | |/ _ \ \ \ /\ / / _ \| '__| |/ _` | | | _ | __/ | | (_) | \ V V / (_) | | | | (_| |_| |_| |_|\___|_|_|\___( ) \_/\_/ \___/|_| |_|\__,_(_) |/
5: Тексты песен Old McDonald's (203b): Старая функция Макдональда
1, 2, 3 o'clock, 4 o'clock rock, 5, 6, 7 o'clock, 8 o'clock rock, 9, 10, 11 o'clock, 12 o'clock rock, We're gonna rock around the clock tonight.
6: Текст песни «Рок круглосуточно» (144b): Рок круглосуточно
Old MacDonald had a farm, E-I-E-I-O, And on that farm he had a cow, E-I-E-I-O, With a moo moo here and a moo moo there, Here a moo, there a moo, everywhere a moo moo, Old MacDonald had a farm, E-I-E-I-O!
7: Привет, мир (296b): Скажите «Привет» миру в ASCII-изображении
abcdefghijklmnopqrstuvwxyz qwertyuiopasdfghjklzxcvbnm pyfgcrlaoeuidhtnsqjkxbmwvz zyxwvutsrqponmlkjihgfedcba
8: Ирландское благословение (210b): Старое ирландское благословение
1 121 12321 1234321 123454321 12345654321 1234567654321 123456787654321 12345678987654321 123456787654321 1234567654321 12345654321 123454321 1234321 12321 121 1
9: Был текст песни старушки (1208b): Жила-была старушка
'\ . . |>18>> \ . ' . | O>> . 'o | \ . | /\ . | / / .' | jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10: Геттисбергский адрес (1452b): Насколько случайен Геттисбергский адрес
We're no strangers to love You know the rules and so do I A full commitment's what I'm thinking of You wouldn't get this from any other guy I just wanna tell you how I'm feeling Gotta make you understand Never gonna give you up Never gonna let you down Never gonna run around and desert you Never gonna make you cry Never gonna say goodbye Never gonna tell a lie and hurt you We've known each other for so long Your heart's been aching but You're too shy to say it Inside we both know what's been going on We know the game and we're gonna play it And if you ask me how I'm feeling Don't tell me you're too blind to see Never gonna give you up Never gonna let you down Never gonna run around and desert you Never gonna make you cry Never gonna say goodbye Never gonna tell a lie and hurt you Never gonna give you up Never gonna let you down Never gonna run around and desert you Never gonna make you cry Never gonna say goodbye Never gonna tell a lie and hurt you (Ooh, give you up) (Ooh, give you up) (Ooh) Never gonna give, never gonna give (Give you up) (Ooh) Never gonna give, never gonna give (Give you up) We've know each other for so long Your heart's been aching but You're too shy to say it Inside we both know what's been going on We know the game and we're gonna play it I just wanna tell you how I'm feeling Gotta make you understand Never gonna give you up Never gonna let you down Never gonna run around and desert you Never gonna make you cry Never gonna say goodbye Never gonna tell a lie and hurt you Never gonna give you up Never gonna let you down Never gonna run around and desert you Never gonna make you cry Never gonna say goodbye Never gonna tell a lie and hurt you Never gonna give you up Never gonna let you down Never gonna run around and desert you Never gonna make you cry Never gonna say goodbye Never gonna tell a lie and hurt you
Всего (без сжатия): 6135 символов/байт.
Веселиться!
#код-гольф #колмогоров-сложность See More