Sua missão é escrever uma função / programa que converta uma matriz de bytes (ou seja: uma matriz de números inteiros de 0 a 255) em base64.
O uso de codificadores base64 embutidos não é permitido.
A implementação base64 necessária é a RFC 2045. (usando "+", "/" e preenchimento obrigatório com "=")
O código mais curto (em bytes) vence!
Exemplo:
Entrada (matriz int): [99, 97, 102, 195, 169]
Saída (string): Y2Fmw6k=
1 2
para o argumento66
?=
preenchimento reduz para 4. Qual deles você deseja? Ou você deseja uma variante não padrão que não tenha comprimentos máximos de linha?Respostas:
JavaScript, 177
187198personagensPara adicionar quebras de linha,
\r\n
após cada 76º caractere, adicione 23 caracteres ao código:Código de demonstração:
fonte
Conjunto x86 de 32 bits, 59 bytes
Código de bytes:
Desmontagem:
Chame b64encode com esi apontando para o buffer de entrada, edi apontando para o buffer de saída.
Pode ser ainda menor se a quebra automática de linha não for usada.
fonte
perl, 126 bytes
lê stdin, produz para stdout
ungolfed:
fonte
\r\n
.Perl, 147 bytes
A função pega uma lista de números inteiros como entrada e gera a string codificada em base64.
Exemplo:
impressões
Ungolfed:
Versão que também visualiza as etapas intermediárias:
Resultado:
Testes:
As sequências de teste vêm do exemplo da pergunta, dos exemplos no artigo da Wikipedia para Base64 .
Saída de teste:
fonte
\r\n
.Python, 234 caracteres
fonte
\r\n
.GolfScript, 80 (77) bytes
O exemplo acima caberá exatamente 76 caracteres em uma linha, exceto a última linha. Todas as linhas são encerradas pelo CRLF.
Observe que o RFC 2045 especifica uma variável, comprimento máximo de linha de 76 caracteres, portanto, ao custo de uma saída bonita, podemos salvar 3 bytes adicionais.
O texto acima imprimirá um caractere por linha, exceto a última linha, que pode conter 0, 1 ou 2
=
caracteres. O GolfScript também anexará um LF final, que, de acordo com a RFC 2045, deve ser ignorado pelo software de decodificação.Exemplo
Como funciona
fonte
PHP , 200 bytes
Experimente online!
Você pode substituir a string
("$s+/=")
por uma matrizarray_merge(range(A,Z),range(a,z),range(0,9),["+","/","="])
Apenas para comparar qual contagem de bytes pode atingir com um built-in não permitido
PHP , 45 bytes
Experimente online!
fonte
JavaScript (ES6), 220B
Se o seu navegador não suporta ES6, você pode tentar com esta versão (262B):
f([99, 97, 102, 195, 169])
retorna"Y2Fmw6k="
.fonte
\r\n
?Pitão -
310333Um pouco não-destruído:
Exemplo :
O módulo base64 interno do Python é usado apenas neste exemplo para garantir que a
e
função tenha a saída correta, ae
própria função não a está usando.fonte
\r\n
.Gelatina , 38 bytes
Experimente online!
Como (quase) todas as outras respostas cobrem o requisito RFC2045 de "no máximo 76 caracteres por linha com final de linha
\r\n
", eu a segui.Como funciona
fonte
ṃØbṙ1¤
é um pouco longa para uma operação simples.0,0,0
.