Базовая конверсия (CJam)
Простой способ кодировать строки ASCII, которые не начинаются с нулевого байта, - это преобразовать из базы 128 в целое число, а затем в базу 256:
128b256b:c e# Prints encoded string.
128b256b:c`"256b128b:c" e# Prints encoded string with decoder.
Это использует 7 бит для кодирования каждого символа ASCII.
Если исходная строка состоит только из, например, строчные буквы, и не делает старт с а , мы можем начать отображение "a...z"
на [0 ... 25]
, а затем продолжайте , как указано выше:
'afm26b256b:c e# Prints encoded string.
'afm26b256b:c`"256b26b'af+" e# Prints encoded string with decoder.
Наконец, если исходная строка имеет только несколько уникальных символов (обычно в искусстве ASCII), обычно лучше явно указать алфавит.
Например:
" +-/\|"f#6b256b:c e# Prints encoded string.
" +-/\|"f#6b256b:c`"256b6b"" +-/\|"`"f=" e# Prints encoded string with decoder.
Как правило, вы хотите, чтобы первый символ исходной строки был вторым символом алфавита, следующий отдельный символ исходной строки - первым символом алфавита, а следующий отдельный символ исходной строки - третьим символом алфавита, следующим отличительным символом исходной строки будет четвертый символ алфавита и т. д.
Кодировщик последнего примера работает следующим образом:
" +-/\|"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.
Декодер последнего примера работает следующим образом:
256b6b e# Convert from base 256 to base 6.
" +-/\|"f= e# Replace each digit by the corresponding character of the alphabet.