Ваша миссия сегодня состоит в том, чтобы изобрести текстовый компрессор.
задача
Вы напишите две функции:
Пакера является функцией , которая принимает строку ASCII символов (U + 0000 до U + 007F) и выводит строку Unicode (U + 0000 до U + 10FFFF), содержащие наименьшее количество символов возможно.
Распаковщик это функция , которая принимает кодированные строки Unicode и выводит в точности исходной строки ASCII.
вход
Единственным разрешенным вводом является строка ASCII (для упаковщика) и упакованная строка Юникода (для распаковщика). Нет ввода пользователя, нет подключения к Интернету, нет использования файловой системы.
Ваши функции могут иметь доступ к этому списку английских слов . Вы можете использовать этот список как локальный текстовый файл или скопировать его содержимое в исходный код в виде строки или массива строк .
Вы не можете жестко закодировать фрагменты ниже в ваших функциях.
Выход
Единственным разрешенным выходом для обеих функций является строка.
Выходные данные распаковщика должны содержать те же символы, что и входные данные упаковщика.
Ваши входы и выходы могут использовать любую кодировку символов, поддерживающую весь Unicode (UTF-8/16/32, GB18030, ...), так как ваш результат будет зависеть только от количества символов Unicode в выходных данных. Пожалуйста, уточните, какую кодировку вы используете.
Чтобы подсчитать количество символов Unicode в вашем выводе, вы можете использовать этот инструмент: http://mothereff.in/byte-counter
счет
Ваша запись должна быть в состоянии упаковать и распаковать 10 следующих фрагментов текста (которые я взял на этом форуме).
Ваша оценка будет равна сумме размеров ваших 10 упакованных строк (в символах Юникода) + размер ваших двух функций (также в символах Юникода)
Не считайте размер словаря, если вы его используете.
Пожалуйста, включите в свои записи «оценку» каждого фрагмента и его упакованную версию.
Самый низкий балл побеждает.
Данные
Вот фрагменты для кодирования, чтобы вычислить ваш счет:
1: Тексты песен Рика Ролла (1870b): Мы не новички в программировании гольфа, вы знаете правила, и я тоже
Мы не новички в любви Вы знаете правила и я тоже Я всегда думаю о полной приверженности Вы не получите это от любого другого парня Я просто хочу рассказать вам, как я себя чувствую Должен заставить тебя понять Никогда тебя не брошу Никогда не подведу Никогда не побегу и не покину тебя Никогда не заставлю тебя плакать Никогда не прощаюсь Никогда не скажу неправду и не сделаю тебе больно Мы знали друг друга так долго Твое сердце болит, но Ты стесняешься сказать это Внутри мы оба знаем, что происходит Мы знаем игру и будем играть в нее И если вы спросите меня, как я себя чувствую Не говори мне, что ты слишком слеп, чтобы видеть Никогда тебя не брошу Никогда не подведу Никогда не побегу и не покину тебя Никогда не заставлю тебя плакать Никогда не прощаюсь Никогда не скажу неправду и не сделаю тебе больно Никогда тебя не брошу Никогда не подведу Никогда не побегу и не покину тебя Никогда не заставлю тебя плакать Никогда не прощаюсь Никогда не скажу неправду и не сделаю тебе больно (Ох, сдавайся) (Ох, сдавайся) (Ох) Никогда не дам, никогда не дам (Откажусь) (Ох) Никогда не дам, никогда не дам (Откажусь) Мы знаем друг друга так долго Твое сердце болит, но Ты стесняешься сказать это Внутри мы оба знаем, что происходит Мы знаем игру и будем играть в нее Я просто хочу рассказать вам, как я себя чувствую Должен заставить тебя понять Никогда тебя не брошу Никогда не подведу Никогда не побегу и не покину тебя Никогда не заставлю тебя плакать Никогда не прощаюсь Никогда не скажу неправду и не сделаю тебе больно Никогда тебя не брошу Никогда не подведу Никогда не побегу и не покину тебя Никогда не заставлю тебя плакать Никогда не прощаюсь Никогда не скажу неправду и не сделаю тебе больно Никогда тебя не брошу Никогда не подведу Никогда не побегу и не покину тебя Никогда не заставлю тебя плакать Никогда не прощаюсь Никогда не скажу неправду и не сделаю тебе больно
2: Гольфист (412b): гольф ASCII-арт
'\. , |> 18 >> \. '. | О >> 'о | \. | / \. | / /. ' | JGS ^^^^^^^ `^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^
3: номер ромба (233b): напечатать этот алмаз
1 121 12321 1234321 123454321 12345654321 1234567654321 123456787654321 12345678987654321 123456787654321 1234567654321 12345654321 123454321 1234321 12321 121 1
4: алфавит четыре раза (107b): печатать алфавит четыре раза
АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ qwertyuiopasdfghjklzxcvbnm pyfgcrlaoeuidhtnsqjkxbmwvz zyxwvutsrqponmlkjihgfedcba
5: Текст старого Макдональда (203b): функция Старого Макдональда
У старого Макдональда была ферма, EIEIO, И на той ферме у него была корова, EIEIO, С Му Му здесь и Му Му там, Вот му, там му, везде му му, У старого Макдональда была ферма, EIEIO!
6: Рок круглосуточно (144b): Рок круглосуточно
1, 2, 3 часа, 4 часа рок, 5, 6, 7 часов, 8 часов рок, 9, 10, 11 часов, 12 часов рок, Сегодня вечером мы будем качаться круглосуточно.
7: Hello World (296b): Скажите «Hello» миру в искусстве ASCII
_ _ _ _ _ _ _ | | | | ___ | | | ___ __ _____ _ __ | | __ | | | | | _ | | / _ \ | | / _ \ \ \ / \ / / _ \ | «__ | | / _` | | | _ | __ / | | (_) | \ VV / (_) | | | | (_ | | _ | | _ | | _ | \ ___ | _ | _ | \ ___ () \ _ / \ _ / \ ___ / | _ | | _ | \ __, _ (_) | /
8: ирландское благословение (210b): старое ирландское благословение
Пусть дорога поднимется навстречу тебе Пусть ветер всегда будет у тебя за спиной Пусть солнце сияет на вашем лице Дожди падают на твои поля И пока мы не встретимся снова Пусть Бог держит тебя в дупле Своей руки
9: Была лирика старой леди (1208b): Там была старая леди
Была пожилая женщина, которая проглотила муху. Я не знаю, почему она проглотила эту муху, Возможно, она умрет. Была пожилая женщина, которая проглотила паука, Это извивалось, покачивалось и покачивалось внутри нее. Она проглотила паука, чтобы поймать муху, Я не знаю, почему она проглотила эту муху, Возможно, она умрет. Была пожилая женщина, которая проглотила птицу, Как нелепо глотать птицу. Она проглотила птицу, чтобы поймать паука, Она проглотила паука, чтобы поймать муху, Я не знаю, почему она проглотила эту муху, Возможно, она умрет. Была пожилая женщина, которая проглотила кошку, Представь, что глотать кошку. Она проглотила кошку, чтобы поймать птицу, Она проглотила птицу, чтобы поймать паука, Она проглотила паука, чтобы поймать муху, Я не знаю, почему она проглотила эту муху, Возможно, она умрет. Была пожилая женщина, которая проглотила собаку, Какая свинья, чтобы проглотить собаку. Она проглотила собаку, чтобы поймать кошку, Она проглотила кошку, чтобы поймать птицу, Она проглотила птицу, чтобы поймать паука, Она проглотила паука, чтобы поймать муху, Я не знаю, почему она проглотила эту муху, Возможно, она умрет. Была пожилая женщина, которая проглотила лошадь, Она умерла, конечно.
10: адрес Геттисберга (1452b): насколько случайным является адрес Геттисберга
Четыре десятка и семь лет назад наши отцы создали на этом континенте новую нацию, зачатую в свободе и посвященную утверждению, что все люди созданы равными. Сейчас мы вовлечены в великую гражданскую войну, проверяя, может ли эта нация или любая нация, столь задуманная и столь преданная, долго существовать. Мы встретились на великом поле битвы этой войны. Мы пришли, чтобы посвятить часть этой области как место последнего упокоения тем, кто здесь отдал свои жизни за то, чтобы этот народ мог жить. Это вполне уместно и правильно, что мы должны сделать это. Но, в более широком смысле, мы не можем посвятить, мы не можем посвятить, мы не можем освящать эту землю. Храбрые люди, живые и мертвые, которые боролись здесь, освятили это, намного выше нашей бедной силы добавлять или отвлекать. Мир мало заметит, и долго не вспомнит, что мы здесь говорим, но он никогда не забудет, что они здесь сделали. Скорее, мы живем, чтобы посвятить себя здесь незавершенной работе, которую они так велико продвинули до сих пор. Скорее, мы должны быть здесь преданы великой задаче, стоящей перед нами - что из этих почитаемых мертвецов мы берем повышенную преданность тому делу, ради которого они в последний раз проявили преданность, - что мы здесь решительно решаем, что эти мертвые не будут напрасно умерли - что этот народ под Богом получит новое рождение свободы - и что народное управление народами для народа не погибнет от земли.
Всего (без сжатия): 6135 символов / байт.
Повеселись!
private static final String RICK_ROLL_RETURN = "We're no strangers to love...