Wyzwanie
Napisz program, który może pobierać dane wejściowe z ciągu jednowierszowego zawierającego dowolne znaki drukowalne ASCII i wypisywać ten sam ciąg zakodowany w Base85 (używając konwencji big-endian). Możesz założyć, że dane wejściowe zawsze będą miały ≤ 100 znaków.
Przewodnik po Base85
Cztery oktety są zakodowane (zwykle) w pięciu znakach Base85.
Base85 znaków ma zakres od
!dou(ASCII 33–117 ) iz(ASCII 122).Aby zakodować, ciągle wykonujesz dzielenie przez 85 na czterech oktetach (liczba 32-bitowa) i dodajesz 33 do reszty (po każdym dzieleniu), aby uzyskać znak ASCII dla zakodowanej wartości. Na przykład pierwsze zastosowanie tego procesu powoduje, że w zakodowanym bloku jest znak skrajnie prawy.
Jeśli zestaw czterech oktetów zawiera tylko bajty puste, są one kodowane jako
zzamiast!!!!!.Jeśli ostatni blok jest krótszy niż cztery oktety, jest wypełniany bajtami zerowymi. Po zakodowaniu ta sama liczba znaków, które zostały dodane jako dopełnianie, są usuwane z końca danych wyjściowych.
Zakodowana wartość powinna być poprzedzona znakiem
<~i po nim~>.Zakodowana wartość nie powinna zawierać białych znaków (dla tego wyzwania).
Przykłady
In: easy
Out: <~ARTY*~>
In: test
Out: <~FCfN8~>
In: code golf
Out: <~@rGmh+D5V/Ac~>
In: Programming Puzzles
Out: <~:i^JeEa`g%Bl7Q+:j%)1Ch7Y~>
Poniższy fragment kodu koduje dane wejściowe do Base85.