Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function qsort(data, ascending = true) {
- if (data.length < 2) {
- return data;
- }
- var left = [],
- right = [],
- pivot = data.shift();
- for (var i = 0; i < data.length; i++) {
- if (data[i] < pivot) {
- left.push(data[i]);
- } else {
- right.push(data[i]);
- }
- }
- if (ascending) {
- return qsort(left, ascending).concat([pivot], qsort(right, ascending));
- }
- return qsort(right, ascending).concat([pivot], qsort(left, ascending));
- }
- function group(list = [], range = null) {
- var bins = {},
- bins_ids = [];
- function to_int(value) {
- var int_val = value + 0;
- if (isNaN(int_val)) {
- throw new Error("InvalidArgumentException");
- }
- return int_val;
- }
- function prepare_list(list) {
- for (var i = 0; i < list.length; i++) {
- list[i] = to_int(list[i]);
- }
- return qsort(list);
- }
- function add_to_bin(bin, item) {
- if (typeof bins[bin] === 'undefined') {
- bins[bin] = [];
- bins_ids.push(bin);
- }
- bins[bin].push(item);
- }
- function get_bin_id(item, range) {
- return parseInt(Math.floor(item/range) + (((item % range) > 0) ? 1 : 0));
- }
- function get_bins() {
- var result = [];
- for (var i = 0; i < bins_ids.length; i++) {
- result.push(bins[bins_ids[i]]);
- }
- return result;
- }
- list = prepare_list(list);
- for (var i = 0; i < list.length; i++) {
- add_to_bin(get_bin_id(list[i], range), list[i]);
- }
- return get_bins();
- }
- console.log(group([10, 1, -20, 14, 99, 136, 19, 20, 117, 22, 93, 120, 131], 10));
- console.log(group([10, 1, -20, 14, 99, 136, 19, 20, 117, 22, 93, 120, 131], 15));
- console.log(group([10, 1, 'A', 14, 99, 133, 19, 20, 117, 22, 93, 120, 131], 10));
- /*
- Result
- [ [ -20 ],
- [ 1, 10 ],
- [ 14, 19, 20 ],
- [ 22 ],
- [ 93, 99 ],
- [ 117, 120 ],
- [ 131, 136 ] ]
- [ [ -20 ],
- [ 1, 10, 14 ],
- [ 19, 20, 22 ],
- [ 93, 99 ],
- [ 117, 120 ],
- [ 131 ],
- [ 136 ] ]
- /Users/alexeysibirtsev/Projects/urbanara/test.js:29
- throw new Error("InvalidArgumentException");
- ^
- Error: InvalidArgumentException
- at to_int (/Users/alexeysibirtsev/Projects/urbanara/test.js:29:19)
- at prepare_list (/Users/alexeysibirtsev/Projects/urbanara/test.js:36:23)
- at group (/Users/alexeysibirtsev/Projects/urbanara/test.js:61:12)
- at Object.<anonymous> (/Users/alexeysibirtsev/Projects/urbanara/test.js:71:13)
- at Module._compile (module.js:570:32)
- at Object.Module._extensions..js (module.js:579:10)
- at Module.load (module.js:487:32)
- at tryModuleLoad (module.js:446:12)
- at Function.Module._load (module.js:438:3)
- at Module.runMain (module.js:604:10)
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement