diff options
Diffstat (limited to 'assets/javascripts/rectangles/util/sort.js')
| -rw-r--r-- | assets/javascripts/rectangles/util/sort.js | 60 |
1 files changed, 40 insertions, 20 deletions
diff --git a/assets/javascripts/rectangles/util/sort.js b/assets/javascripts/rectangles/util/sort.js index 17231ea..ec0f5e9 100644 --- a/assets/javascripts/rectangles/util/sort.js +++ b/assets/javascripts/rectangles/util/sort.js @@ -1,22 +1,22 @@ function compare_rect_position(a,b){ - if (a.x.a < b.x.a) { + if (a[0].x.a < b[0].x.a) { return -1 } - if (a.x.a > b.x.a) { + if (a[0].x.a > b[0].x.a) { return 1 } - if (a.y.a < b.y.a) { + if (a[0].y.a < b[0].y.a) { return -1 } - if (a.y.a > b.y.a) { + if (a[0].y.a > b[0].y.a) { return 1 } return 0 } -function compare_rect_area (a,b){ +function compare_car_reversed (a,b){ if (a[0] < b[0]) { return 1 } @@ -25,37 +25,57 @@ function compare_rect_area (a,b){ } return 0 } +function compare_car (a,b){ + if (a[0] < b[0]) { + return -1 + } + if (a[0] > b[0]) { + return 1 + } + return 0 +} + +function room_id_tuple (r){ return [r.id, r] } +function room_height_tuple (r){ return [r.height, r] } +function room_area_tuple (r){ return [r.rect.area(), r] } +function rect_area_tuple (r){ return [r.area(), r] } + +function room_rect_tuple (r){ return [r.rect, r] } +function identity_tuple (r){ return [r, r] } +function car (r){ return r[0] } +function cdr (r){ return r[1] } function sort_rooms_by_id(list){ - return list.sort(function(a,b){ - return a.id < b.id ? -1 : a.id == b.id ? 0 : 1 - }) + return list.map(room_id_tuple) + .sort(compare_car) + .map(cdr) } function sort_rooms_by_height(list){ - return list.sort(function(b,a){ - return a.height < b.height ? -1 : a.height == b.height ? 0 : 1 - }) + return list.map(room_height_tuple) + .sort(compare_car) + .map(cdr) } function sort_rooms_by_position(list){ - return list.sort(function(a,b){ - return compare_rect_position(a.rect, b.rect) - }) + return list.map(room_rect_tuple) + .sort(compare_rect_position) + .map(cdr) } function sort_rooms_by_area(list){ - return list.map(function(r){ return [r.rect.area(), r] }) + return list.map(room_area_tuple)) .sort(compare_rect_area) - .map(function(r){ return r[1] }) + .map(cdr) } - function sort_rects_by_position(list){ - return list.sort(compare_rect_position) + return list.map(identity_tuple) + .sort(compare_rect_position) + .map(cdr) } function sort_rects_by_area(list){ - return list.map(function(r){ return [r.area(), r] }) + return list.map(rect_area_tuple) .sort(compare_rect_area) - .map(function(r){ return r[1] }) + .map(cdr) } function compare_z(a,b){ |
