Twoim zadaniem jest napisanie funkcji / programu, który konwertuje tablicę bajtów (tj. Tablicę liczb całkowitych od 0 do 255) na base64.
Korzystanie z wbudowanych koderów base64 jest niedozwolone.
Wymagana implementacja base64 to RFC 2045. (użycie „+”, „/” i obowiązkowe wypełnienie za pomocą „=”)
Najkrótszy kod (w bajtach) wygrywa!
Przykład:
Dane wejściowe (tablica int): [99, 97, 102, 195, 169]
Dane wyjściowe (ciąg): Y2Fmw6k=
1 2
argument66
?=
padding zawęża go do 4. Którego chcesz? A może chcesz niestandardowy wariant, który nie ma maksymalnych długości linii?Odpowiedzi:
JavaScript, 177
187198postacieW celu dodania podziału linii,
\r\n
po każdym 76 znaku, dodaj 23 znaki do kodu:Kod demonstracyjny:
źródło
32-bitowy zestaw x86, 59 bajtów
Kod bajtowy:
Demontaż:
Wywołaj b64encode z esi wskazującym na bufor wejściowy, edi wskazującym na bufor wyjściowy.
Można go jeszcze zmniejszyć, jeśli nie stosuje się zawijania linii.
źródło
perl, 126 bajtów
czyta standardowe wejście, wyświetla standardowe wyjście
bez golfa:
źródło
\r\n
.Perl, 147 bajtów
Funkcja przyjmuje listę liczb całkowitych jako dane wejściowe i wyprowadza ciąg, zakodowany w standardzie base64.
Przykład:
odciski
Nie golfowany:
Wersja, która wizualizuje również etapy pośrednie:
Wynik:
Testy:
Ciągi testowe pochodzą z przykładu w pytaniu o przykłady w artykule Wikipedii dla Base64 .
Wyjście testowe:
źródło
\r\n
.Python, 234 znaki
źródło
\r\n
.GolfScript, 80 (77) bajtów
Powyższe zmieści dokładnie 76 znaków w linii, z wyjątkiem ostatniej linii. Wszystkie linie są zakończone przez CRLF.
Zauważ, że RFC 2045 określa zmienną, maksymalną długość linii 76 znaków, więc kosztem ładnego wyniku możemy zaoszczędzić 3 dodatkowe bajty.
Powyżej wypisze jeden znak w wierszu, z wyjątkiem ostatniego wiersza, który może zawierać 0, 1 lub 2
=
znaki. GolfScript doda również końcowy LF, który zgodnie z RFC 2045 musi zostać zignorowany przez oprogramowanie dekodujące.Przykład
Jak to działa
źródło
PHP , 200 bajtów
Wypróbuj online!
Możesz zastąpić ciąg
("$s+/=")
tablicąarray_merge(range(A,Z),range(a,z),range(0,9),["+","/","="])
Tylko w celu porównania, ile bajtów może osiągnąć przy wbudowanym niedozwolonym
PHP , 45 bajtów
Wypróbuj online!
źródło
JavaScript (ES6), 220B
Jeśli Twoja przeglądarka nie obsługuje ES6, możesz wypróbować tę wersję (262B):
f([99, 97, 102, 195, 169])
zwraca"Y2Fmw6k="
.źródło
\r\n
?Python -
310, 333Nieco golfisty:
Przykład :
Wbudowany moduł Pythona base64 jest używany tylko w tym przykładzie, aby upewnić się, że
e
funkcja ma prawidłowe dane wyjściowe, ae
sama funkcja jej nie używa.źródło
\r\n
.Galaretka , 38 bajtów
Wypróbuj online!
Ponieważ (prawie) każda inna odpowiedź obejmuje wymóg RFC2045 dotyczący „najwyżej 76 znaków w linii z zakończeniem linii
\r\n
”, podążyłem za nią.Jak to działa
źródło
ṃØbṙ1¤
jest ona trochę za długa, aby można było wykonać prostą operację.0,0,0
.