Votre mission est d'écrire une fonction / programme qui convertit un tableau d'octets (ie: un tableau d'entiers de 0 à 255) en base64.
L'utilisation d'encodeurs base64 intégrés n'est pas autorisée.
L'implémentation base64 requise est RFC 2045. (en utilisant "+", "/" et un remplissage obligatoire avec "=")
Le code le plus court (en octets) gagne!
Exemple:
Entrée (tableau int): [99, 97, 102, 195, 169]
Sortie (chaîne): Y2Fmw6k=
1 2
pour l'argument66
?=
rembourrage le réduit à 4. Lequel voulez-vous? Ou voulez-vous une variante non standard qui n'a pas de longueur de ligne maximale?Réponses:
JavaScript, 177
187198personnagesPour ajouter des sauts de ligne,
\r\n
après chaque 76ème caractère, ajoutez 23 caractères au code:Code de démonstration:
la source
Assemblage x86 32 bits, 59 octets
Code octet:
Démontage:
Appelez b64encode avec esi pointant vers le tampon d'entrée, edi pointant vers le tampon de sortie.
Il pourrait être encore plus petit si le retour à la ligne n'est pas utilisé.
la source
perl, 126 octets
lit stdin, sort vers stdout
non golfé:
la source
\r\n
.Perl, 147 octets
La fonction prend une liste d'entiers en entrée et sort la chaîne, codée en base64.
Exemple:
impressions
Non golfé:
Version qui visualise également les étapes intermédiaires:
Production:
Tests:
Les chaînes de test proviennent de l'exemple de la question des exemples dans l'article Wikipedia pour Base64 .
Sortie de test:
la source
\r\n
.Python, 234 caractères
la source
\r\n
.GolfScript, 80 (77) octets
Ce qui précède tiendra exactement 76 caractères dans une ligne, à l'exception de la dernière ligne. Toutes les lignes sont terminées par CRLF.
Notez que RFC 2045 spécifie une longueur de ligne maximale variable de 76 caractères, donc au prix d'une jolie sortie, nous pouvons économiser 3 octets supplémentaires.
Ce qui précède imprimera un caractère par ligne, à l'exception de la dernière ligne, qui peut contenir 0, 1 ou 2
=
caractères. GolfScript ajoutera également un LF final, qui, selon la RFC 2045, doit être ignoré par le logiciel de décodage.Exemple
Comment ça fonctionne
la source
PHP , 200 octets
Essayez-le en ligne!
Vous pouvez remplacer la chaîne
("$s+/=")
par un tableauarray_merge(range(A,Z),range(a,z),range(0,9),["+","/","="])
Uniquement pour comparer le nombre d'octets pouvant atteindre avec un intégré non autorisé
PHP , 45 octets
Essayez-le en ligne!
la source
JavaScript (ES6), 220B
Si votre navigateur ne prend pas en charge ES6, vous pouvez essayer avec cette version (262B):
f([99, 97, 102, 195, 169])
retourne"Y2Fmw6k="
.la source
\r\n
?Python -
310, 333Assez peu golfé:
Exemple :
Le module base64 intégré de Python est uniquement utilisé dans cet exemple pour garantir que la
e
fonction a la sortie correcte, lae
fonction elle-même ne l'utilise pas.la source
\r\n
.Gelée , 38 octets
Essayez-le en ligne!
Comme (presque) toutes les autres réponses couvrent l'exigence RFC2045 de "au plus 76 caractères par ligne avec fin de ligne
\r\n
", je l'ai suivie.Comment ça fonctionne
la source
ṃØbṙ1¤
est un peu trop longue pour une opération simple.0,0,0
.