Mercurial > repos > icfp2014
comparison code/mike00.lm @ 17:c33dce59ce3d
Store tree size in outer node so it does not need to be manually passed in
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 25 Jul 2014 21:40:49 -0700 |
parents | 89aa6d3165ee |
children | 8ff2349f36c6 |
comparison
equal
deleted
inserted
replaced
16:89aa6d3165ee | 17:c33dce59ce3d |
---|---|
35 lst <- lst tail | 35 lst <- lst tail |
36 } | 36 } |
37 reverse: new | 37 reverse: new |
38 } | 38 } |
39 | 39 |
40 makeTree <- :lst size { | 40 makeTree:size <- :lst :size { |
41 ret <- 0 | 41 ret <- 0 |
42 sub <- 0 | 42 sub <- 0 |
43 half <- size / 2 | 43 half <- size / 2 |
44 if: size = 2 { | 44 if: size = 2 { |
45 ret <- #[(lst value) ((lst tail) value)] | 45 ret <- #[(lst value) ((lst tail) value)] |
47 if: size = 1 { | 47 if: size = 1 { |
48 ret <- lst | 48 ret <- lst |
49 } else: { | 49 } else: { |
50 sub <- split: lst at: half | 50 sub <- split: lst at: half |
51 ret <- #[ | 51 ret <- #[ |
52 (makeTree: (sub value) half) | 52 (makeTree: (sub value) size: half) |
53 (makeTree: (sub tail) size-half) | 53 (makeTree: (sub tail) size: size-half) |
54 ] | 54 ] |
55 } | 55 } |
56 } | 56 } |
57 ret | 57 ret |
58 } | 58 } |
59 | 59 |
60 makeTree <- :lst { | |
61 size <- lst length | |
62 #[size (makeTree: lst size: size)] | |
63 } | |
64 | |
60 get:fromTree:size <- :idx :tree :size { | 65 get:fromTree:size <- :idx :tree :size { |
66 print: #[1 tree size] | |
61 ret <- 0 | 67 ret <- 0 |
62 half <- size / 2 | 68 half <- size / 2 |
63 if: size <= 2 { | 69 if: size <= 2 { |
64 if: idx = 0 { | 70 if: idx = 0 { |
65 ret <- tree value | 71 ret <- tree value |
74 } | 80 } |
75 } | 81 } |
76 ret | 82 ret |
77 } | 83 } |
78 | 84 |
85 get:fromTree <- :idx :tree { | |
86 size <- tree value | |
87 print: #[0 size] | |
88 get: idx fromTree: (tree tail) size: size | |
89 } | |
90 | |
79 height <- 0 | 91 height <- 0 |
80 width <- 0 | 92 width <- 0 |
81 | 93 |
82 main <- { | 94 main <- { |
83 /* map <- initWorld value | 95 /* map <- initWorld value |
87 | 99 |
88 lst <- [1 2 3 4 5 6 7 8 9] | 100 lst <- [1 2 3 4 5 6 7 8 9] |
89 print: (length: lst) | 101 print: (length: lst) |
90 print: (map: lst :el { el + 1 }) | 102 print: (map: lst :el { el + 1 }) |
91 print: (split: lst at: (length: lst) / 2) | 103 print: (split: lst at: (length: lst) / 2) |
92 size <- (length: lst) | 104 tree <- makeTree: lst |
93 tree <- makeTree: lst size | |
94 print: tree | 105 print: tree |
95 print: (get: 0 fromTree: tree size: size) | 106 print: (get: 0 fromTree: tree) |
96 print: (get: 6 fromTree: tree size: size) | 107 print: (get: 6 fromTree: tree) |
97 print: (get: 8 fromTree: tree size: size) | 108 print: (get: 8 fromTree: tree) |
98 } | 109 } |
99 | 110 |
100 } | 111 } |