Konwersja bazy (CJam)
Prostym sposobem kodowania ciągów ASCII, które nie zaczynają się od bajtu zerowego, jest konwersja z bazy 128 na liczbę całkowitą, a następnie do bazy 256:
128b256b:c e# Prints encoded string.
128b256b:c`"256b128b:c" e# Prints encoded string with decoder.
Używa 7 bitów do kodowania każdego znaku ASCII.
Jeśli oryginalny ciąg składa się tylko z np. Małych liter i nie zaczyna się od litery a , możemy zacząć od odwzorowania "a...z"
na [0 ... 25]
, a następnie postępować jak wyżej:
'afm26b256b:c e# Prints encoded string.
'afm26b256b:c`"256b26b'af+" e# Prints encoded string with decoder.
Wreszcie, jeśli oryginalny ciąg ma tylko kilka unikalnych znaków (typowych w sztuce ASCII), zwykle lepiej jest wyraźnie podać alfabet.
Na przykład:
" +-/\|"f#6b256b:c e# Prints encoded string.
" +-/\|"f#6b256b:c`"256b6b"" +-/\|"`"f=" e# Prints encoded string with decoder.
Zasadniczo chcesz, aby pierwszym znakiem oryginalnego łańcucha był drugi znak alfabetu, następnym wyraźnym znakiem oryginalnego łańcucha był pierwszy znak alfabetu, kolejnym wyraźnym znakiem oryginalnego łańcucha być trzecim znakiem alfabetu, następnym wyraźnym znakiem oryginalnego ciągu będącym czwartym znakiem alfabetu itp.
Koder z ostatniego przykładu działa w następujący sposób:
" +-/\|"f# e# Replace each character by its index in that string.
6b256b e# Convert from base 6 (length of the alphabet) to base 256.
:c e# Cast each digit to character.
Dekoder ostatniego przykładu działa w następujący sposób:
256b6b e# Convert from base 256 to base 6.
" +-/\|"f= e# Replace each digit by the corresponding character of the alphabet.