DEV Community

Discussion on: Daily Challenge #59 - Snail Sort

Collapse
 
craigmc08 profile image
Craig McIlwrath

Haskell:

middle :: [a] -> [a]
middle [] = []
middle [_] = []
middle [_,_] = []
middle xs = init $ tail xs

snail :: [[a]] -> [a]
snail [] = []
snail [x] = x
snail (x:xs) = let middleRows = init xs
               in x ++
                  map last xs ++
                  reverse (init (last xs)) ++
                  reverse (map head middleRows) ++
                  snail (map middle middleRows)