Ваша миссия - написать функцию / программу, которая преобразует массив байтов (т.е. массив целых чисел от 0 до 255) в base64.
Использование встроенных кодеров base64 запрещено.
Требуемая реализация base64 - RFC 2045. (с использованием "+", "/" и обязательного заполнения с "=")
Самый короткий код (в байтах) побеждает!
Пример:
Вход (массив int): [99, 97, 102, 195, 169]
Вывод (строка): Y2Fmw6k=
1 2
аргумент66
?=
на padding сужает до 4. Какой из них вы хотите? Или вы хотите нестандартный вариант, который не имеет максимальной длины строки?Ответы:
JavaScript, 177
187198персонажиДля добавления переносов строк
\r\n
после каждого 76-го символа добавьте 23 символа в код:Демо-код:
источник
32-битная сборка x86, 59 байт
Байт-код:
Разборка:
Вызовите код b64, если esi указывает на входной буфер, edi указывает на выходной буфер.
Это можно сделать еще меньше, если не использовать перенос строк.
источник
Perl, 126 байт
читает стандартный вывод, выводит на стандартный вывод
ungolfed:
источник
\r\n
.Perl, 147 байт
Функция принимает список целых чисел в качестве входных данных и выводит строку в кодировке base64.
Пример:
печать
Ungolfed:
Версия, которая также визуализирует промежуточные шаги:
Вывод:
тесты:
Тестовые строки взяты из примера в вопросе примеры в статье Википедии для Base64 .
Тестовый вывод:
источник
\r\n
.Питон, 234 символа
источник
\r\n
.GolfScript, 80 (77) байтов
Выше будет соответствовать ровно 76 символов в строке, за исключением последней строки. Все строки заканчиваются CRLF.
Обратите внимание, что в RFC 2045 указана переменная, максимальная длина строки которой составляет 76 символов, поэтому ценой вывода мы можем сохранить 3 дополнительных байта.
Выше будет печатать один символ на строку, за исключением последней строки, которая может содержать 0, 1 или 2
=
символа. GolfScript также добавит окончательный LF, который, согласно RFC 2045, должен игнорироваться программным обеспечением для декодирования.пример
Как это работает
источник
PHP , 200 байт
Попробуйте онлайн!
Вы можете заменить строку
("$s+/=")
на массивarray_merge(range(A,Z),range(a,z),range(0,9),["+","/","="])
Только для сравнения, какое количество байтов может быть достигнуто с недопустимым встроенным
PHP , 45 байт
Попробуйте онлайн!
источник
JavaScript (ES6), 220В
Если ваш браузер не поддерживает ES6, вы можете попробовать эту версию (262B):
f([99, 97, 102, 195, 169])
возвращается"Y2Fmw6k="
.источник
\r\n
?Python -
310333Немного не одураченный
Пример :
Встроенный в Python модуль base64 используется только в этом примере, чтобы гарантировать, что
e
функция имеет правильный вывод, самаe
функция не использует его.источник
\r\n
.Желе , 38 байт
Попробуйте онлайн!
Поскольку (почти) каждый второй ответ покрывает требование RFC2045 «не более 76 символов на строку с окончанием строки
\r\n
», я следовал ему.Как это работает
источник
ṃØbṙ1¤
она слишком длинна для простой операции.0,0,0
.