Zig-zag matrix: Difference between revisions
Content added Content deleted
m (→{{header|Haskell}}: Tidied mapAccumL version) |
|||
Line 2,193: | Line 2,193: | ||
zigZag :: Int -> [[Int]] |
zigZag :: Int -> [[Int]] |
||
zigZag = |
zigZag = go <*> diagonals |
||
where |
where |
||
go _ [] = [] |
|||
⚫ | |||
let slope = [1 .. n - 1] |
|||
where |
|||
(edge, rst) = splitAt n xss |
|||
(\xs h -> |
|||
diagonals :: Int -> [[Int]] |
|||
let (grp, rst) = splitAt h xs |
|||
diagonals n = |
|||
⚫ | |||
snd $ mapAccumL go [0 .. (n * n) - 1] (slope <> [n] <> reverse slope) |
|||
where |
|||
(slope ++ [n] ++ reverse slope) |
|||
slope = [1 .. n - 1] |
|||
⚫ | |||
| null xss = [] |
|||
where |
|||
(grp, rst) = splitAt h xs |
|||
in (head <$> edge) : |
|||
⚫ | |||
main :: IO () |
main :: IO () |