-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUtils.elm
71 lines (49 loc) · 1.38 KB
/
Utils.elm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
module Utils exposing (diagonal, inverseDiagonal, slice, transpose)
diagonal : List (List a) -> List a
diagonal =
List.indexedMap unsafeAt
inverseAt : Int -> List a -> a
inverseAt index list =
let
size =
(List.length list) - 1
in
unsafeAt (size - index) list
inverseDiagonal : List (List a) -> List a
inverseDiagonal =
List.indexedMap inverseAt
slice : Int -> List a -> List (List a)
slice pieces list =
slice' pieces list []
slice' pieces list acc =
case list of
[] ->
acc
list ->
slice' pieces (List.drop pieces list) (acc ++ [ List.take pieces list ])
unsafeAt : Int -> List a -> a
unsafeAt index list =
List.drop index list |> unsafeHead
unsafeHead : List a -> a
unsafeHead list =
case list of
head :: tail ->
head
_ ->
Debug.crash "Transposing non-square matrix"
unsafeTail : List a -> List a
unsafeTail list =
case list of
head :: tail ->
tail
_ ->
Debug.crash "Transposing non-square matrix"
{-| From http://stackoverflow.com/questions/31932683/transpose-in-elm-without-maybe
-}
transpose : List (List a) -> List (List a)
transpose matrix =
case matrix of
(x :: xs) :: xss ->
(x :: List.map unsafeHead xss) :: transpose (xs :: List.map unsafeTail xss)
_ ->
[]