0votos

Codigo zig-zag en Haskell

por josejuan hace 1 año

La anterior tiene coste O(n log n) es decir, no depende de la altura (m), ésta tiene coste O(n * m) lo que la hace adecuada cuando m es menor que log n

Cifrar y Descifrar códigos zig-zag

1
enc' n xs = concat [[c | (c, j) <- zip xs (cycle $ [1..n]++[n-1..2])] | i <- [1..n]] 
4 comentarios
0votos

Escrito por josejuan hace 1 año

Por cierto, usando un zipper, puede hacerse con coste O(n) sin usar arrays.
0votos

Escrito por josejuan hace 1 año

Mmm se me fue un filtro al pegar, es:
enc' n xs = concat [[c | (c, j) <- zip xs (cycle $ [1..n]++[n-1..2]), j == i] | i <- [1..n]]
0votos

Escrito por AverageUser hace 1 año

no funciona completamente:

encode 4 "2+2-1+3=6"
2           3
  +       +   =  
    2   1       6
      -
debería dar: "23++=216-"

λ> enc' 4 "2+2-1+3=6"
"216++23-="
1votos

Escrito por josejuan hace 1 año

No se porqué, pero he pegado mal las respuestas, lógicamente el ciclo es [1..n]++[n-1,n-2..2] y no [1..n]++[n-1..2]. Lo mismo con la anterior solución que usa ese ciclo.

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.