Mercurial > repos > icfp2014
comparison code/mike00.lm @ 14:ce68c8a607ee
Added a new file for experimenting with some helper functions
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 25 Jul 2014 21:04:14 -0700 |
parents | |
children | 89aa6d3165ee |
comparison
equal
deleted
inserted
replaced
13:451043a65ff7 | 14:ce68c8a607ee |
---|---|
1 #{ | |
2 length <- :lst { | |
3 len <- [] | |
4 while: { not: (lst isInteger?)} do: { | |
5 lst <- lst tail | |
6 len <- len + 1 | |
7 } | |
8 len | |
9 } | |
10 | |
11 reverse <- :lst { | |
12 new <- [] | |
13 while: { not: (lst isInteger?)} do: { | |
14 new <- (lst value) | new | |
15 lst <- lst tail | |
16 } | |
17 new | |
18 } | |
19 | |
20 split:at <- :lst :pos { | |
21 first <- [] | |
22 i <- 0 | |
23 while: { i < pos } do: { | |
24 first <- (lst value) | first | |
25 lst <- lst tail | |
26 i <- i + 1 | |
27 } | |
28 #[(reverse: first) lst] | |
29 } | |
30 | |
31 map <- :lst fun { | |
32 new <- [] | |
33 while: { not: (lst isInteger?) } do: { | |
34 new <- (fun: (lst value)) | new | |
35 lst <- lst tail | |
36 } | |
37 reverse: new | |
38 } | |
39 | |
40 makeTree <- :lst size { | |
41 ret <- 0 | |
42 sub <- 0 | |
43 half <- size / 2 | |
44 if: size = 2 { | |
45 ret <- #[(lst value) ((lst tail) value)] | |
46 } else: { | |
47 if: size = 1 { | |
48 ret <- lst | |
49 } else: { | |
50 sub <- split: lst at: half | |
51 ret <- #[ | |
52 (makeTree: (sub value) half) | |
53 (makeTree: (sub tail) size-half) | |
54 ] | |
55 } | |
56 } | |
57 ret | |
58 } | |
59 | |
60 get:fromTree:size <- :idx :tree :size { | |
61 ret <- 0 | |
62 half <- size / 2 | |
63 if: size <= 2 { | |
64 if: idx = 0 { | |
65 ret <- tree value | |
66 } else: { | |
67 ret <- tree tail | |
68 } | |
69 } else: { | |
70 if: idx < half { | |
71 ret <- get: idx fromTree: (tree value) size: half | |
72 } else: { | |
73 ret <- get: idx-half fromTree: (tree tail) size: size-half | |
74 } | |
75 } | |
76 ret | |
77 } | |
78 | |
79 height <- 0 | |
80 width <- 0 | |
81 | |
82 main <- { | |
83 /* map <- initWorld value | |
84 height <- map length | |
85 width <- (map value) length | |
86 */ | |
87 | |
88 lst <- [1 2 3 4 5 6 7 8 9] | |
89 print: (length: lst) | |
90 print: (map: lst :el { el + 1 }) | |
91 print: (split: lst at: (length: lst) / 2) | |
92 tree <- makeTree: lst (length: lst) | |
93 print: tree | |
94 } | |
95 | |
96 } |