Conversão base (CJam)
Uma maneira fácil de codificar seqüências de caracteres ASCII que não iniciam com um byte nulo é converter da base 128 em número inteiro e, em seguida, na base 256:
128b256b:c e# Prints encoded string.
128b256b:c`"256b128b:c" e# Prints encoded string with decoder.
Isso usa 7 bits para codificar cada caractere ASCII.
Se a string original consistir apenas em, por exemplo, letras minúsculas e não começar com a , podemos começar mapeando "a...z"
para [0 ... 25]
e proceda da seguinte forma:
'afm26b256b:c e# Prints encoded string.
'afm26b256b:c`"256b26b'af+" e# Prints encoded string with decoder.
Finalmente, se a string original tiver apenas alguns caracteres únicos (comum na arte ASCII), geralmente é melhor especificar explicitamente o alfabeto.
Por exemplo:
" +-/\|"f#6b256b:c e# Prints encoded string.
" +-/\|"f#6b256b:c`"256b6b"" +-/\|"`"f=" e# Prints encoded string with decoder.
Como regra geral, você deseja que o primeiro caractere da string original seja o segundo caractere do alfabeto, o próximo caractere distinto da string original seja o primeiro caractere do alfabeto, o próximo caractere distinto da string original a ser o terceiro caractere do alfabeto, o próximo caractere distinto da string original a ser o quarto caractere do alfabeto, etc.
O codificador do último exemplo funciona da seguinte maneira:
" +-/\|"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.
O decodificador do último exemplo funciona da seguinte maneira:
256b6b e# Convert from base 256 to base 6.
" +-/\|"f= e# Replace each digit by the corresponding character of the alphabet.