Conversion de base (CJam)
Un moyen facile de coder des chaînes ASCII qui ne commencent pas par un octet nul est de convertir la base 128 en entier, puis en base 256:
128b256b:c e# Prints encoded string.
128b256b:c`"256b128b:c" e# Prints encoded string with decoder.
Cela utilise 7 bits pour coder chaque caractère ASCII.
Si la chaîne d'origine se compose uniquement, par exemple, de lettres minuscules et ne commence pas par un a , nous pouvons commencer par mapper "a...z"
sur [0 ... 25]
, puis procéder comme ci-dessus:
'afm26b256b:c e# Prints encoded string.
'afm26b256b:c`"256b26b'af+" e# Prints encoded string with decoder.
Enfin, si la chaîne d'origine ne comporte que quelques caractères uniques (communs dans l'art ASCII), il est généralement préférable de spécifier explicitement l'alphabet.
Par exemple:
" +-/\|"f#6b256b:c e# Prints encoded string.
" +-/\|"f#6b256b:c`"256b6b"" +-/\|"`"f=" e# Prints encoded string with decoder.
En règle générale, vous souhaitez que le premier caractère de la chaîne d'origine soit le deuxième caractère de l'alphabet, le caractère distinct suivant de la chaîne d'origine soit le premier caractère de l'alphabet, le caractère distinct suivant de la chaîne d'origine à être le troisième caractère de l'alphabet, le caractère distinct suivant de la chaîne d'origine pour être le quatrième caractère de l'alphabet, etc.
L'encodeur du dernier exemple fonctionne comme suit:
" +-/\|"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.
Le décodeur du dernier exemple fonctionne comme suit:
256b6b e# Convert from base 256 to base 6.
" +-/\|"f= e# Replace each digit by the corresponding character of the alphabet.