Conversión de base (CJam)
Una manera fácil de codificar cadenas ASCII que no comienzan con un byte nulo es convertir de base 128 a entero, luego a base 256:
128b256b:c e# Prints encoded string.
128b256b:c`"256b128b:c" e# Prints encoded string with decoder.
Esto usa 7 bits para codificar cada carácter ASCII.
Si la cadena original consta solo de, por ejemplo, letras minúsculas, y no comienza con una a , podemos comenzar por asignar "a...z"
a [0 ... 25]
, luego proceder como se indica arriba:
'afm26b256b:c e# Prints encoded string.
'afm26b256b:c`"256b26b'af+" e# Prints encoded string with decoder.
Finalmente, si la cadena original tiene solo unos pocos caracteres únicos (comunes en el arte ASCII), generalmente es mejor especificar el alfabeto explícitamente.
Por ejemplo:
" +-/\|"f#6b256b:c e# Prints encoded string.
" +-/\|"f#6b256b:c`"256b6b"" +-/\|"`"f=" e# Prints encoded string with decoder.
Como regla general, desea que el primer carácter de la cadena original sea el segundo carácter del alfabeto, el siguiente carácter distinto de la cadena original sea el primer carácter del alfabeto, el siguiente carácter distinto de la cadena original para ser el tercer caracter del alfabeto, el siguiente caracter distintivo de la cadena original para ser el cuarto caracter del alfabeto, etc.
El codificador del último ejemplo funciona de la siguiente manera:
" +-/\|"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.
El decodificador del último ejemplo funciona de la siguiente manera:
256b6b e# Convert from base 256 to base 6.
" +-/\|"f= e# Replace each digit by the corresponding character of the alphabet.