Я помню, как люди говорили, что размер кода должен измеряться в байтах, а не в символах, потому что можно хранить информацию со странными символами Unicode, которые не имеют визуального значения.
Насколько это может быть плохо?
В этом задании вы должны вывести следующий текст Lorem Ipsum, взятый из Википедии :
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Пожалуйста, укажите количество символов (не байтов) в вашем коде. Код с минимальным количеством символов выигрывает.
Ваш код должен содержать только допустимые символы Unicode, как описано здесь , то есть:
- Код указывает до U + 10FFFF
- Никаких суррогатов (диапазон D800 – DBFF запрещен)
- Без символов FFFE и FFFF
- Нет нулевых символов (код 0)
Если ваш код не может быть отображен, предоставьте версию с отредактированными символами, отредактированными и hexdump.
Некоторые заметки:
- Вывод должен состоять из одной длинной строки (445 символов). Если ваша система не может этого сделать (например, вы печатаете это на бумаге), выведите ближайшее приближение. Конечные разрывы строк не имеют значения.
- Встроенные функции, которые генерируют текст Lorem Ipsum, не допускаются
- Пожалуйста, укажите правильную кодировку текста для вашего кода, если уместно
code-golf
kolmogorov-complexity
unicode
anatolyg
источник
источник
=lorem()
в MS Word не выводится правильная версияОтветы:
Дьялог АПЛ , 123 символа
Все, кроме последнего периода, упакованы в 111 32-битных символов (UTF-32).
'.',⍨
период добавлен80⎕DR
8-битный (8
) символ (0
) Д ата Р epresentation из'
...'
111 символов Unicode U + 26F4C 9206D D7573 C6F64 32072 12074 C7465 E6F63 46365 27574 96461 37369 10676E 4696C 57320 F6420 56965 46F6D D6574 10726F 9636E 56469 52074 16C20 5726F 107465 F6C6F D2065 16E67 96C61 E6175 107455 D696E 106461 96E69 57620 D6169 57120 E2073 27473 52064 37265 46174 106E6F 16C6C 106F63 F6261 107369 97369 107475 1696C 107069 52078 F6320 46F6D F6320 16573 E7461 97544 56120 92065 57275 C6F64 92072 57220 86572 5646E 107469 6206E 10756C 57461 C6576 52074 106573 C6C69 4206D 26F6C 56520 77566 107461 C6C75 17020 46169 102E72 56378 56574 97320 F2074 56163 107461 97075 17461 F6E20 27020 56469 102C74 46E75 106E69 106C75 57120 66F20 96369 56420 57265 D2074 96C6C E6120 9206D 36520 16C20 5726FВсе они попадают в диапазон 12074–10756C и, таким образом, находятся в полностью разрешенном диапазоне OP 10000–10FFFF.источник
JavaScript (ES7),
326283273249243242 символаКак это устроено
Первый шаг в моей технике сжатия - преобразовать всю строку в нижний регистр (не обязательно, но выглядит лучше) и заменить каждую пару символов в
, exum.
(а также конечный пробел отдельно ) на индекс в строке плюс 2. Это делает текст действительным числом base-32:Следующим шагом является преобразование каждого 4-символьного цикла в десятичное, а затем получение символа в этой кодовой точке. Это можно сделать с помощью следующей функции:
( Примечание. Поскольку все цифры равны 2 или более, минимально возможное значение из четырех цифр равно 2222₃₂. Это равно 95978₁₀ или 176EA₁₆; поэтому кодовые точки никогда не будут находиться в ограниченном диапазоне.)
И теперь у нас есть сжатая строка:
Это 445 символов, сжатых в 106 символов. Декомпрессия просто переворачивает этот процесс:
n
на" , exum. ".substr(n,2)
.Единственная функция ES7 используется
**
. Заменить4**8
с65536
запустить в браузере , который еще не поддерживает ES7.источник
4**8
вместо65536
.bash + coreutils + gzip + recode, 191 символ
Строка представляет собой gzip текста, интерпретируемого как UTF-16BE, плюс несколько дополнительных байтов для сопряжения с непарными половинками суррогата. Тр снимает лишние суррогатные половинки.
Этот файл сценария (или оболочка, в которую вводится эта команда) должен интерпретировать текст как UTF-8, поэтому требуется повторный код.
источник
Javascript (ES6),
261255254 символовСохранено 1 байт, благодаря ETHproductions
Сломать
Полезная нагрузка: 148 символов Юникода
Код: 107 байт
Как это устроено
Сначала мы удаляем ведущие
'L'
из исходного сообщения, чтобы у нас осталось 444 = 148 * 3 символа.Без начальных
'L'
символов набор символов состоит из 27 следующих символов:Каждая группа из 3 символов кодируется как:
где a, b и c - индексы символов в вышеуказанном наборе символов.
Это приводит к кодовой точке Unicode в диапазоне от U + 0020 до U + 801F, заканчивающейся где-то в «Объединенных идеографах CJK».
источник
05AB1E , 319 байт
Использует кодировку CP-1252.
Интерпретировать следующую строку как число базы 36 и закодировать в базу 214
После этого мы
По какой-то причине кодировка не работала с 0 в конце, поэтому для финала "." Нужен особый случай.
Попробуйте онлайн!
источник
Y
иZ
на1
и2
и сохранить несколько байтов. Также, возможно, переставить 0, 1 и 2, чтобы избавиться от таинственного особого случая?PHP, 247 символов
комбинация из 2 предыдущих версий
PHP, 261 символов
Кодировка $ s содержит строку
Старая версия PHP, 386 байт | Символы
источник
C #,
337333331 символов-4 символа, заменив
.
s после «pariatur» и «labum» на!
перед объединением символов в широкие символы и добавлением новой строки.-2 символа путем переназначения выходной переменной вместо добавления
+=
.Как это устроено:
Строка Lorem Ipsum была преобразована в эту путаницу путем замены
.
с!
,с
_
таким , когда символы ASCII размещается рядом друг с другом , чтобы сделать широкий полукокс каждого широкий символ представляет собой один символ.источник
ISOLADOS, 44016 байт
http://pastebin.com/raw/Y2aAhdpi
Нажмите ASCII-код для каждого символа в строке Lorem Ipsum, объедините все и выведите.
источник
MATL , 354 символа
Он декодирует из base-94 (используя печатные символы ASCII, за исключением одинарных кавычек; поэтому используются только символы Unicode до 126) в алфавит обязательных символов, состоящий из большинства строчных букв, некоторых заглавных букв, пробела, запятой и точки.
Это займет несколько секунд в онлайн-компиляторе.
Попробуйте онлайн!
источник
JavaScript (ES5), 342 символа
Довольно просто, так что я уверен, что есть возможности для улучшения. Я закодировал каждую пару выходных символов как один символ Unicode.
источник
var
?join('')
наjoin``
. Если нет, измените свой язык наJavaScript (ES5)
y/27|0
а не~~(y/27)
сохранить два байта. Вы также можете удалить0
вx.charCodeAt(0)
..split('').map(function).join('')
может быть.replace(/./g,function)
Желе , 300 символов (не конкурирует?)
Попробуйте онлайн!
Кодировка - желе .
Благодаря сжатым строкам я смог сжать его на 3 байта.
источник