Лабораторная на Haskell.
Форум — Development
Развлекался на паре по криптографии освоением Haskell. Граждане, имеющие к нему отношение, гляньте, пожалуйста - может я чушь написал? Насколько грамотен такой подход? Задачка простенькая - шифр Цезаря. С условиями, чтоб буквы кодировались с учетом регистра, а все, что не буквы - оставалось прежним. import Char -- Получить ascii-код начала алфавита для строчных и прописных букв getDiff x = if isLower x then ord 'a' else if isUpper x then ord 'A' else 0 -- разбить ascii код на пару чисел: номер в алфавите и ascii-смещение алфавита splitAscii x = (ord x - getDiff x, getDiff x) -- сформировать ascii-символ из пары чисел formAscii pair = chr (fst pair + snd pair) -- циклический сдвиг на n позиций cycle_shift n pair = let abc_length = ord 'z' - ord 'a' + 1 in if snd pair == 0 then pair else (mod (fst pair+n) abc_length, snd pair) -- Процедура шифрации/дешифрации caesar n msg = map formAscii $ map (cycle_shift n) $ map splitAscii msg -- врапперы к caesar, они же точки входа encode n msg = caesar n msg decode n msg = caesar (-n) msg