Ordenación pendular
La ordenación pendular de una lista xs es la lista obtenida organizando sus elementos de manera similar al movimiento de ida y vuelta de un péndulo; es decir,
- El menor elemento de xs se coloca en el centro de la lista.
- El siguiente elemento se coloca a la derecha del menor.
- El siguiente elemento se coloca a la izquierda del menor y así sucesivamente, de una manera similar a la de un péndulo.
Por ejemplo, la ordenación pendular de [6,6,8,5,10] es [10,6,5,6,8].
Definir la función
pendulo :: [Int] -> [Int]
tal que (pendulo xs) es la ordenación pendular de xs. Por ejemplo,
pendulo [6,6,8,5,10] == [10,6,5,6,8] pendulo [-9,-2,-10,-6] == [-6,-10,-9,-2] pendulo [11,-16,-18,13,-11,-12,3,18] == [13,3,-12,-18,-16,-11,11,18]
Soluciones
import Data.List (sort) pendulo :: [Int] -> [Int] pendulo xs = reverse (impares ys) ++ y : pares ys where (y:ys) = sort xs -- (pares xs) son los elementos de xs que ocupan posiciones pares. pares :: [a] -> [a] pares [] = [] pares (x:xs) = x : impares xs -- (impares xs) son los elementos de xs que ocupan posiciones impares. impares :: [a] -> [a] impares [] = [] impares (_:xs) = pares xs