11 lines
348 B
Haskell
11 lines
348 B
Haskell
perfectShuffle :: [a] -> [a]
|
|
perfectShuffle [] = []
|
|
perfectShuffle lst | odd n = b : shuffle (zip bs a)
|
|
| even n = shuffle (zip (b:bs) a)
|
|
where
|
|
n = length lst
|
|
(a,b:bs) = splitAt (n `div` 2) lst
|
|
shuffle = foldMap (\(x,y) -> [x,y])
|
|
|
|
shuffleP :: Eq a => [a] -> [a]
|
|
shuffleP lst = swapShuffle lst $ perfectShuffle lst
|