Advertisement
Guest User

Untitled

a guest
Feb 27th, 2017
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.75 KB | None | 0 0
  1. function qsort(data, ascending = true) {
  2. if (data.length < 2) {
  3. return data;
  4. }
  5. var left = [],
  6. right = [],
  7. pivot = data.shift();
  8.  
  9. for (var i = 0; i < data.length; i++) {
  10. if (data[i] < pivot) {
  11. left.push(data[i]);
  12. } else {
  13. right.push(data[i]);
  14. }
  15. }
  16. if (ascending) {
  17. return qsort(left, ascending).concat([pivot], qsort(right, ascending));
  18. }
  19. return qsort(right, ascending).concat([pivot], qsort(left, ascending));
  20. }
  21.  
  22. function group(list = [], range = null) {
  23. var bins = {},
  24. bins_ids = [];
  25.  
  26. function to_int(value) {
  27. var int_val = value + 0;
  28. if (isNaN(int_val)) {
  29. throw new Error("InvalidArgumentException");
  30. }
  31. return int_val;
  32. }
  33.  
  34. function prepare_list(list) {
  35. for (var i = 0; i < list.length; i++) {
  36. list[i] = to_int(list[i]);
  37. }
  38. return qsort(list);
  39. }
  40.  
  41. function add_to_bin(bin, item) {
  42. if (typeof bins[bin] === 'undefined') {
  43. bins[bin] = [];
  44. bins_ids.push(bin);
  45. }
  46. bins[bin].push(item);
  47. }
  48.  
  49. function get_bin_id(item, range) {
  50. return parseInt(Math.floor(item/range) + (((item % range) > 0) ? 1 : 0));
  51. }
  52.  
  53. function get_bins() {
  54. var result = [];
  55. for (var i = 0; i < bins_ids.length; i++) {
  56. result.push(bins[bins_ids[i]]);
  57. }
  58. return result;
  59. }
  60.  
  61. list = prepare_list(list);
  62.  
  63. for (var i = 0; i < list.length; i++) {
  64. add_to_bin(get_bin_id(list[i], range), list[i]);
  65. }
  66. return get_bins();
  67. }
  68.  
  69. console.log(group([10, 1, -20, 14, 99, 136, 19, 20, 117, 22, 93, 120, 131], 10));
  70. console.log(group([10, 1, -20, 14, 99, 136, 19, 20, 117, 22, 93, 120, 131], 15));
  71. console.log(group([10, 1, 'A', 14, 99, 133, 19, 20, 117, 22, 93, 120, 131], 10));
  72.  
  73. /*
  74. Result
  75.  
  76. [ [ -20 ],
  77. [ 1, 10 ],
  78. [ 14, 19, 20 ],
  79. [ 22 ],
  80. [ 93, 99 ],
  81. [ 117, 120 ],
  82. [ 131, 136 ] ]
  83. [ [ -20 ],
  84. [ 1, 10, 14 ],
  85. [ 19, 20, 22 ],
  86. [ 93, 99 ],
  87. [ 117, 120 ],
  88. [ 131 ],
  89. [ 136 ] ]
  90. /Users/alexeysibirtsev/Projects/urbanara/test.js:29
  91. throw new Error("InvalidArgumentException");
  92. ^
  93.  
  94. Error: InvalidArgumentException
  95. at to_int (/Users/alexeysibirtsev/Projects/urbanara/test.js:29:19)
  96. at prepare_list (/Users/alexeysibirtsev/Projects/urbanara/test.js:36:23)
  97. at group (/Users/alexeysibirtsev/Projects/urbanara/test.js:61:12)
  98. at Object.<anonymous> (/Users/alexeysibirtsev/Projects/urbanara/test.js:71:13)
  99. at Module._compile (module.js:570:32)
  100. at Object.Module._extensions..js (module.js:579:10)
  101. at Module.load (module.js:487:32)
  102. at tryModuleLoad (module.js:446:12)
  103. at Function.Module._load (module.js:438:3)
  104. at Module.runMain (module.js:604:10)
  105. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement