0votos

Codigo zig-zag en Haskell

por josejuan hace 1 año

No parece un cifrado muy fiable xD

Cifrar y Descifrar códigos zig-zag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
enc n = concatMap (map snd) 
      . groupBy   ((==)    `on` fst) 
      . sortBy    (compare `on` fst) 
      . zip       (cycle $ [1..n] ++ [n-1..2]) 
 
dec n xs = map (xs!!) $ enc n [0..length xs - 1] 
 
{- 
 
> quickCheckWith (stdArgs {maxSuccess = 10000}) $ \n xs -> 
 
    1 <= n && n <= length xs    ==>    xs == (dec n . enc n) xs 
 
+++ OK, passed 10000 tests.  
 
-} 
3 comentarios
0votos

Escrito por AverageUser hace 1 año

λ> decode 3 $ encode 3 "abcde"
"acedb"

encode n xs = concat [[c | (c, j) <- zip xs (cycle $ [1..n]++[n-1,n-2..2]), j == i] | i <- [1..n]]

decode n xs = map (xs!!) $ encode n [0..length xs - 1]
0votos

Escrito por AverageUser hace 1 año

decode n xs = map fst $ sort $ zip xs (encode n [0..length xs - 1])

??
0votos

Escrito por AverageUser hace 1 año

decode n xs = map snd $ sort $ zip (encode n [0..length xs - 1]) xs

Esta, perdon

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.