-
Notifications
You must be signed in to change notification settings - Fork 1
/
Main.elm
75 lines (59 loc) · 1.81 KB
/
Main.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
72
73
74
75
module Main exposing (..)
import Html exposing (Html, h3, div, text)
import Html.Attributes exposing (style)
import Time exposing (Time)
import Animation exposing (px)
import InsertionSort exposing (InsertionList, insertionSort)
import Point exposing (Point)
import MergeSort exposing (mergeSort)
type alias Model =
{ insertionSort : InsertionList, merge : List Point }
init : ( Model, Cmd Msg )
init =
let
unsorted =
Point.init [ 40, 30, 60, 10, 40, 30, 60, 10, 40, 30, 60, 10, 40, 30, 60, 10 ]
in
( { insertionSort = InsertionSort.init unsorted
, merge = MergeSort.mergeSort unsorted
}
, Cmd.none
)
type Msg
= UpdateArray Time
| Animate Animation.Msg
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
UpdateArray _ ->
( { model
| insertionSort = InsertionSort.update model.insertionSort
, merge = MergeSort.update model.merge
}
, Cmd.none
)
Animate time ->
( { model
| insertionSort = InsertionSort.animate time model.insertionSort
, merge = MergeSort.animate time model.merge
}
, Cmd.none
)
view : Model -> Html msg
view model =
div [ (style [ ( "margin", "20px" ), ( "width", "320px" ) ]) ]
((InsertionSort.view model.insertionSort) ++ (MergeSort.view model.merge))
subscriptions : Model -> Sub Msg
subscriptions model =
Sub.batch
[ Time.every (Time.second / 3) UpdateArray
, InsertionSort.subscribe Animate model.insertionSort
]
main : Program Never Model Msg
main =
Html.program
{ init = init
, view = view
, update = update
, subscriptions = subscriptions
}