Ihre Mission ist es, eine Funktion / ein Programm zu schreiben, die ein Array von Bytes (dh ein Array von Ganzzahlen von 0 bis 255) in base64 konvertiert.
Die Verwendung von integrierten Base64-Encodern ist nicht zulässig.
Die erforderliche base64-Implementierung ist RFC 2045. (unter Verwendung von "+", "/" und obligatorischem Auffüllen mit "=")
Der kürzeste Code (in Bytes) gewinnt!
Beispiel:
Eingabe (int Array): [99, 97, 102, 195, 169]
Ausgabe (Zeichenfolge): Y2Fmw6k=
1 2
für das Argument zurückgibt66
?=
zum Auffüllen schränkt es auf 4 ein. Welches möchten Sie? Oder möchten Sie eine nicht standardmäßige Variante ohne maximale Leitungslänge?Antworten:
32-Bit-x86-Assembly, 59 Byte
Bytecode:
Demontage:
Rufen Sie b64encode auf, wobei esi auf den Eingabepuffer und edi auf den Ausgabepuffer zeigt.
Es könnte noch kleiner gemacht werden, wenn kein Zeilenumbruch verwendet wird.
quelle
JavaScript, 177
187198FigurenFügen Sie zum Hinzufügen von Zeilenumbrüchen
\r\n
nach jedem 76. Zeichen 23 Zeichen zum Code hinzu:Demo-Code:
quelle
Perl, 126 Bytes
liest stdin, gibt an stdout aus
ungolfed:
quelle
\r\n
.Perl, 147 Bytes
Die Funktion verwendet eine Liste von Ganzzahlen als Eingabe und gibt die Zeichenfolge base64-codiert aus.
Beispiel:
druckt
Ungolfed:
Version, die auch die Zwischenschritte visualisiert:
Ausgabe:
Tests:
Die Testzeichenfolgen stammen aus dem Beispiel in der Frage der Beispiele im Wikipedia-Artikel für Base64 .
Testausgabe:
quelle
\r\n
.Python, 234 Zeichen
quelle
\r\n
.GolfScript, 80 (77) Bytes
Das Obige passt genau 76 Zeichen in eine Zeile, mit Ausnahme der letzten Zeile. Alle Leitungen werden von CRLF abgeschlossen.
Beachten Sie, dass RFC 2045 eine variable, maximale Zeilenlänge von 76 Zeichen angibt , sodass wir auf Kosten einer hübschen Ausgabe 3 zusätzliche Bytes sparen können.
Das obige Zeichen gibt ein Zeichen pro Zeile aus, mit Ausnahme der letzten Zeile, die 0, 1 oder 2
=
Zeichen enthalten kann. GolfScript fügt außerdem einen endgültigen LF hinzu, der laut RFC 2045 von der Decodierungssoftware ignoriert werden muss.Beispiel
Wie es funktioniert
quelle
PHP , 200 Bytes
Probieren Sie es online aus!
Sie können die Zeichenfolge
("$s+/=")
durch ein Array ersetzenarray_merge(range(A,Z),range(a,z),range(0,9),["+","/","="])
Nur um zu vergleichen, welche Byteanzahl mit einer nicht erlaubten eingebauten erreicht werden kann
PHP , 45 Bytes
Probieren Sie es online aus!
quelle
JavaScript (ES6), 220B
Wenn Ihr Browser ES6 nicht unterstützt, können Sie es mit dieser Version (262B) versuchen:
f([99, 97, 102, 195, 169])
kehrt zurück"Y2Fmw6k="
.quelle
\r\n
?Python -
310333Etwas ungolf:
Beispiel :
Das in Python integrierte base64-Modul wird in diesem Beispiel nur verwendet, um sicherzustellen, dass die
e
Funktion die richtige Ausgabe hat und von dere
Funktion selbst nicht verwendet wird.quelle
\r\n
.Gelee , 38 Bytes
Probieren Sie es online aus!
Da (fast) jede andere Antwort die RFC2045-Anforderung "höchstens 76 Zeichen pro Zeile mit Zeilenende
\r\n
" abdeckt , habe ich sie befolgt.Wie es funktioniert
quelle
ṃØbṙ1¤
für eine einfache Operation etwas zu lang.0,0,0
.