Test case details

Preparation Code

<script src="https://cdnjs.cloudflare.com/ajax/libs/sugar/1.3.9/sugar.min.js"></script> <script>   // Underscore.js 1.2.3   // (c) 2009-2011 Jeremy Ashkenas, DocumentCloud Inc.   // Underscore is freely distributable under the MIT license.   // Portions of Underscore are inspired or borrowed from Prototype,   // Oliver Steele's Functional, and John Resig's Micro-Templating.   // For all details and documentation:   // http://documentcloud.github.com/underscore   (function() {     function r(a, c, d) {       if (a === c) return a !== 0 || 1 / a == 1 / c;       if (a == null || c == null) return a === c;       if (a._chain) a = a._wrapped;       if (c._chain) c = c._wrapped;       if (a.isEqual && b.isFunction(a.isEqual)) return a.isEqual(c);       if (c.isEqual && b.isFunction(c.isEqual)) return c.isEqual(a);       var e = l.call(a);       if (e != l.call(c)) return false;       switch (e) {       case "[object String]":         return a == String(c);       case "[object Number]":         return a != +a ? c != +c : a == 0 ? 1 / a == 1 / c : a == +c;       case "[object Date]":       case "[object Boolean]":         return +a == +c;       case "[object RegExp]":         return a.source == c.source && a.global == c.global && a.multiline == c.multiline && a.ignoreCase == c.ignoreCase       }       if (typeof a != "object" || typeof c != "object") return false;       for (var f = d.length; f--;) if (d[f] == a) return true;       d.push(a);       var f = 0,           g = true;       if (e == "[object Array]") {         if (f = a.length, g = f == c.length) for (; f--;) if (!(g = f in a == f in c && r(a[f], c[f], d))) break       } else {         if ("constructor" in a != "constructor" in c || a.constructor != c.constructor) return false;         for (var h in a) if (m.call(a, h) && (f++, !(g = m.call(c, h) && r(a[h], c[h], d)))) break;         if (g) {           for (h in c) if (m.call(c, h) && !f--) break;           g = !f         }       }       d.pop();       return g     }     var s = this,         F = s._,         o = {},         k = Array.prototype,         p = Object.prototype,         i = k.slice,         G = k.concat,         H = k.unshift,         l = p.toString,         m = p.hasOwnProperty,         v = k.forEach,         w = k.map,         x = k.reduce,         y = k.reduceRight,         z = k.filter,         A = k.every,         B = k.some,         q = k.indexOf,         C = k.lastIndexOf,         p = Array.isArray,         I = Object.keys,         t = Function.prototype.bind,         b = function(a) {         return new n(a)         };     if (typeof exports !== "undefined") {       if (typeof module !== "undefined" && module.exports) exports = module.exports = b;       exports._ = b     } else typeof define === "function" && define.amd ? define("underscore", function() {       return b     }) : s._ = b;     b.VERSION = "1.2.3";     var j = b.each = b.forEach = function(a, c, b) {         if (a != null) if (v && a.forEach === v) a.forEach(c, b);         else if (a.length === +a.length) for (var e = 0, f = a.length; e < f; e++) {           if (e in a && c.call(b, a[e], e, a) === o) break         } else for (e in a) if (m.call(a, e) && c.call(b, a[e], e, a) === o) break         };     b.map = function(a, c, b) {       var e = [];       if (a == null) return e;       if (w && a.map === w) return a.map(c, b);       j(a, function(a, g, h) {         e[e.length] = c.call(b, a, g, h)       });       return e     };     b.reduce = b.foldl = b.inject = function(a, c, d, e) {       var f = arguments.length > 2;       a == null && (a = []);       if (x && a.reduce === x) return e && (c = b.bind(c, e)), f ? a.reduce(c, d) : a.reduce(c);       j(a, function(a, b, i) {         f ? d = c.call(e, d, a, b, i) : (d = a, f = true)       });       if (!f) throw new TypeError("Reduce of empty array with no initial value");       return d     };     b.reduceRight = b.foldr = function(a, c, d, e) {       var f = arguments.length > 2;       a == null && (a = []);       if (y && a.reduceRight === y) return e && (c = b.bind(c, e)), f ? a.reduceRight(c, d) : a.reduceRight(c);       var g = b.toArray(a).reverse();       e && !f && (c = b.bind(c, e));       return f ? b.reduce(g, c, d, e) : b.reduce(g, c)     };     b.find = b.detect = function(a, c, b) {       var e;       D(a, function(a, g, h) {         if (c.call(b, a, g, h)) return e = a, true       });       return e     };     b.filter = b.select = function(a, c, b) {       var e = [];       if (a == null) return e;       if (z && a.filter === z) return a.filter(c, b);       j(a, function(a, g, h) {         c.call(b, a, g, h) && (e[e.length] = a)       });       return e     };     b.reject = function(a, c, b) {       var e = [];       if (a == null) return e;       j(a, function(a, g, h) {         c.call(b, a, g, h) || (e[e.length] = a)       });       return e     };     b.every = b.all = function(a, c, b) {       var e = true;       if (a == null) return e;       if (A && a.every === A) return a.every(c, b);       j(a, function(a, g, h) {         if (!(e = e && c.call(b, a, g, h))) return o       });       return e     };     var D = b.some = b.any = function(a, c, d) {         c || (c = b.identity);         var e = false;         if (a == null) return e;         if (B && a.some === B) return a.some(c, d);         j(a, function(a, b, h) {           if (e || (e = c.call(d, a, b, h))) return o         });         return !!e         };     b.include = b.contains = function(a, c) {       var b = false;       if (a == null) return b;       return q && a.indexOf === q ? a.indexOf(c) != -1 : b = D(a, function(a) {         return a === c       })     };     b.invoke = function(a, c) {       var d = i.call(arguments, 2);       return b.map(a, function(a) {         return (c.call ? c || a : a[c]).apply(a, d)       })     };     b.pluck = function(a, c) {       return b.map(a, function(a) {         return a[c]       })     };     b.max = function(a, c, d) {       if (!c && b.isArray(a)) return Math.max.apply(Math, a);       if (!c && b.isEmpty(a)) return -Infinity;       var e = {         computed: -Infinity       };       j(a, function(a, b, h) {         b = c ? c.call(d, a, b, h) : a;         b >= e.computed && (e = {           value: a,           computed: b         })       });       return e.value     };     b.min = function(a, c, d) {       if (!c && b.isArray(a)) return Math.min.apply(Math, a);       if (!c && b.isEmpty(a)) return Infinity;       var e = {         computed: Infinity       };       j(a, function(a, b, h) {         b = c ? c.call(d, a, b, h) : a;         b < e.computed && (e = {           value: a,           computed: b         })       });       return e.value     };     b.shuffle = function(a) {       var c = [],           b;       j(a, function(a, f) {         f == 0 ? c[0] = a : (b = Math.floor(Math.random() * (f + 1)), c[f] = c[b], c[b] = a)       });       return c     };     b.sortBy = function(a, c, d) {       return b.pluck(b.map(a, function(a, b, g) {         return {           value: a,           criteria: c.call(d, a, b, g)         }       }).sort(function(a, c) {         var b = a.criteria,             d = c.criteria;         return b < d ? -1 : b > d ? 1 : 0       }), "value")     };     b.groupBy = function(a, c) {       var d = {},           e = b.isFunction(c) ? c : function(a) {           return a[c]           };       j(a, function(a, b) {         var c = e(a, b);         (d[c] || (d[c] = [])).push(a)       });       return d     };     b.sortedIndex = function(a, c, d) {       d || (d = b.identity);       for (var e = 0, f = a.length; e < f;) {         var g = e + f >> 1;         d(a[g]) < d(c) ? e = g + 1 : f = g       }       return e     };     b.toArray = function(a) {       return !a ? [] : a.toArray ? a.toArray() : b.isArray(a) ? i.call(a) : b.isArguments(a) ? i.call(a) : b.values(a)     };     b.size = function(a) {       return b.toArray(a).length     };     b.first = b.head = function(a, b, d) {       return b != null && !d ? i.call(a, 0, b) : a[0]     };     b.initial = function(a, b, d) {       return i.call(a, 0, a.length - (b == null || d ? 1 : b))     };     b.last = function(a, b, d) {       return b != null && !d ? i.call(a, Math.max(a.length - b, 0)) : a[a.length - 1]     };     b.rest = b.tail = function(a, b, d) {       return i.call(a, b == null || d ? 1 : b)     };     b.compact = function(a) {       return b.filter(a, function(a) {         return !!a       })     };     b.flatten = function(a, c) {       return b.reduce(a, function(a, e) {         if (b.isArray(e)) return a.concat(c ? e : b.flatten(e));         a[a.length] = e;         return a       }, [])     };     b.without = function(a) {       return b.difference(a, i.call(arguments, 1))     };     b.uniq = b.unique = function(a, c, d) {       var d = d ? b.map(a, d) : a,           e = [];       b.reduce(d, function(d, g, h) {         if (0 == h || (c === true ? b.last(d) != g : !b.include(d, g))) d[d.length] = g, e[e.length] = a[h];         return d       }, []);       return e     };     b.union = function() {       return b.uniq(b.flatten(arguments, true))     };     b.intersection = b.intersect = function(a) {       var c = i.call(arguments, 1);       return b.filter(b.uniq(a), function(a) {         return b.every(c, function(c) {           return b.indexOf(c, a) >= 0         })       })     };     b.difference = function(a) {       var c = b.flatten(i.call(arguments, 1));       return b.filter(a, function(a) {         return !b.include(c, a)       })     };     b.zip = function() {       for (var a = i.call(arguments), c = b.max(b.pluck(a, "length")), d = Array(c), e = 0; e < c; e++) d[e] = b.pluck(a, "" + e);       return d     };     b.indexOf = function(a, c, d) {       if (a == null) return -1;       var e;       if (d) return d = b.sortedIndex(a, c), a[d] === c ? d : -1;       if (q && a.indexOf === q) return a.indexOf(c);       for (d = 0, e = a.length; d < e; d++) if (d in a && a[d] === c) return d;       return -1     };     b.lastIndexOf = function(a, b) {       if (a == null) return -1;       if (C && a.lastIndexOf === C) return a.lastIndexOf(b);       for (var d = a.length; d--;) if (d in a && a[d] === b) return d;       return -1     };     b.range = function(a, b, d) {       arguments.length <= 1 && (b = a || 0, a = 0);       for (var d = arguments[2] || 1, e = Math.max(Math.ceil((b - a) / d), 0), f = 0, g = Array(e); f < e;) g[f++] = a, a += d;       return g     };     var E = function() {};     b.bind = function(a, c) {       var d, e;       if (a.bind === t && t) return t.apply(a, i.call(arguments, 1));       if (!b.isFunction(a)) throw new TypeError;       e = i.call(arguments, 2);       return d = function() {         if (!(this instanceof d)) return a.apply(c, e.concat(i.call(arguments)));         E.prototype = a.prototype;         var b = new E,             g = a.apply(b, e.concat(i.call(arguments)));         return Object(g) === g ? g : b       }     };     b.bindAll = function(a) {       var c = i.call(arguments, 1);       c.length == 0 && (c = b.functions(a));       j(c, function(c) {         a[c] = b.bind(a[c], a)       });       return a     };     b.memoize = function(a, c) {       var d = {};       c || (c = b.identity);       return function() {         var b = c.apply(this, arguments);         return m.call(d, b) ? d[b] : d[b] = a.apply(this, arguments)       }     };     b.delay = function(a, b) {       var d = i.call(arguments, 2);       return setTimeout(function() {         return a.apply(a, d)       }, b)     };     b.defer = function(a) {       return b.delay.apply(b, [a, 1].concat(i.call(arguments, 1)))     };     b.throttle = function(a, c) {       var d, e, f, g, h, i = b.debounce(function() {         h = g = false       }, c);       return function() {         d = this;         e = arguments;         var b;         f || (f = setTimeout(function() {           f = null;           h && a.apply(d, e);           i()         }, c));         g ? h = true : a.apply(d, e);         i();         g = true       }     };     b.debounce = function(a, b) {       var d;       return function() {         var e = this,             f = arguments;         clearTimeout(d);         d = setTimeout(function() {           d = null;           a.apply(e, f)         }, b)       }     };     b.once = function(a) {       var b = false,           d;       return function() {         if (b) return d;         b = true;         return d = a.apply(this, arguments)       }     };     b.wrap = function(a, b) {       return function() {         var d = G.apply([a], arguments);         return b.apply(this, d)       }     };     b.compose = function() {       var a = arguments;       return function() {         for (var b = arguments, d = a.length - 1; d >= 0; d--) b = [a[d].apply(this, b)];         return b[0]       }     };     b.after = function(a, b) {       return a <= 0 ? b() : function() {         if (--a < 1) return b.apply(this, arguments)       }     };     b.keys = I ||     function(a) {       if (a !== Object(a)) throw new TypeError("Invalid object");       var b = [],           d;       for (d in a) m.call(a, d) && (b[b.length] = d);       return b     };     b.values = function(a) {       return b.map(a, b.identity)     };     b.functions = b.methods = function(a) {       var c = [],           d;       for (d in a) b.isFunction(a[d]) && c.push(d);       return c.sort()     };     b.extend = function(a) {       j(i.call(arguments, 1), function(b) {         for (var d in b) b[d] !== void 0 && (a[d] = b[d])       });       return a     };     b.defaults = function(a) {       j(i.call(arguments, 1), function(b) {         for (var d in b) a[d] == null && (a[d] = b[d])       });       return a     };     b.clone = function(a) {       return !b.isObject(a) ? a : b.isArray(a) ? a.slice() : b.extend({}, a)     };     b.tap = function(a, b) {       b(a);       return a     };     b.isEqual = function(a, b) {       return r(a, b, [])     };     b.isEmpty = function(a) {       if (b.isArray(a) || b.isString(a)) return a.length === 0;       for (var c in a) if (m.call(a, c)) return false;       return true     };     b.isElement = function(a) {       return !!(a && a.nodeType == 1)     };     b.isArray = p ||     function(a) {       return l.call(a) == "[object Array]"     };     b.isObject = function(a) {       return a === Object(a)     };     b.isArguments = function(a) {       return l.call(a) == "[object Arguments]"     };     if (!b.isArguments(arguments)) b.isArguments = function(a) {       return !(!a || !m.call(a, "callee"))     };     b.isFunction = function(a) {       return l.call(a) == "[object Function]"     };     b.isString = function(a) {       return l.call(a) == "[object String]"     };     b.isNumber = function(a) {       return l.call(a) == "[object Number]"     };     b.isNaN = function(a) {       return a !== a     };     b.isBoolean = function(a) {       return a === true || a === false || l.call(a) == "[object Boolean]"     };     b.isDate = function(a) {       return l.call(a) == "[object Date]"     };     b.isRegExp = function(a) {       return l.call(a) == "[object RegExp]"     };     b.isNull = function(a) {       return a === null     };     b.isUndefined = function(a) {       return a === void 0     };     b.noConflict = function() {       s._ = F;       return this     };     b.identity = function(a) {       return a     };     b.times = function(a, b, d) {       for (var e = 0; e < a; e++) b.call(d, e)     };     b.escape = function(a) {       return ("" + a).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#x27;").replace(/\//g, "&#x2F;")     };     b.mixin = function(a) {       j(b.functions(a), function(c) {         J(c, b[c] = a[c])       })     };     var K = 0;     b.uniqueId = function(a) {       var b = K++;       return a ? a + b : b     };     b.templateSettings = {       evaluate: /<%([\s\S]+?)%>/g,       interpolate: /<%=([\s\S]+?)%>/g,       escape: /<%-([\s\S]+?)%>/g     };     b.template = function(a, c) {       var d = b.templateSettings,           d = "var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('" + a.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(d.escape, function(a, b) {           return "',_.escape(" + b.replace(/\\'/g, "'") + "),'"         }).replace(d.interpolate, function(a, b) {           return "'," + b.replace(/\\'/g, "'") + ",'"         }).replace(d.evaluate || null, function(a, b) {           return "');" + b.replace(/\\'/g, "'").replace(/[\r\n\t]/g, " ") + ";__p.push('"         }).replace(/\r/g, "\\r").replace(/\n/g, "\\n").replace(/\t/g, "\\t") + "');}return __p.join('');",           e = new Function("obj", "_", d);       return c ? e(c, b) : function(a) {         return e.call(this, a, b)       }     };     var n = function(a) {         this._wrapped = a         };     b.prototype = n.prototype;     var u = function(a, c) {         return c ? b(a).chain() : a         },         J = function(a, c) {         n.prototype[a] = function() {           var a = i.call(arguments);           H.call(a, this._wrapped);           return u(c.apply(b, a), this._chain)         }         };     b.mixin(b);     j("pop,push,reverse,shift,sort,splice,unshift".split(","), function(a) {       var b = k[a];       n.prototype[a] = function() {         b.apply(this._wrapped, arguments);         return u(this._wrapped, this._chain)       }     });     j(["concat", "join", "slice"], function(a) {       var b = k[a];       n.prototype[a] = function() {         return u(b.apply(this._wrapped, arguments), this._chain)       }     });     n.prototype.chain = function() {       this._chain = true;       return this     };     n.prototype.value = function() {       return this._wrapped     }   }).call(this); </script>
var chunk = 4;     var arr = ["a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13", "a14", "a15", "a16", "a17", "a18", "a19", "a20", "a21", "a22", "a23", "a24", "a25", "a26", "a27", "a28", "a29", "a30", "a31", "a32", "a33", "a34", "a35", "a36", "a37", "a38", "a39", "a40", "a41", "a42", "a43", "a44", "a45", "a46", "a47", "a48", "a49", "a50", "a51", "a52", "a53", "a54", "a55", "a56", "a57", "a58", "a59", "a60", "a61", "a62", "a63", "a64", "a65", "a66", "a67", "a68", "a69", "a70", "a71", "a72", "a73", "a74", "a75", "a76", "a77", "a78", "a79", "a80", "a81", "a82", "a83", "a84", "a85", "a86", "a87", "a88", "a89", "a90", "a91", "a92", "a93", "a94", "a95", "a96", "a97", "a98", "a99", "a100", "a101", "a102", "a103", "a104", "a105", "a106", "a107", "a108", "a109", "a110", "a111", "a112", "a113", "a114", "a115", "a116", "a117", "a118", "a119", "a120", "a121", "a122", "a123", "a124", "a125", "a126", "a127", "a128", "a129", "a130", "a131", "a132", "a133", "a134", "a135", "a136", "a137", "a138", "a139", "a140", "a141", "a142", "a143", "a144", "a145", "a146", "a147", "a148", "a149", "a150", "a151", "a152", "a153", "a154", "a155", "a156", "a157", "a158", "a159", "a160", "a161", "a162", "a163", "a164", "a165", "a166", "a167", "a168", "a169", "a170", "a171", "a172", "a173", "a174", "a175", "a176", "a177", "a178", "a179", "a180", "a181", "a182", "a183", "a184", "a185", "a186", "a187", "a188", "a189", "a190", "a191", "a192", "a193", "a194", "a195", "a196", "a197", "a198", "a199", "a200", "a201", "a202", "a203", "a204", "a205", "a206", "a207", "a208", "a209", "a210", "a211", "a212", "a213", "a214", "a215", "a216", "a217", "a218", "a219", "a220", "a221", "a222", "a223", "a224", "a225", "a226", "a227", "a228", "a229", "a230", "a231", "a232", "a233", "a234", "a235", "a236", "a237", "a238", "a239", "a240", "a241", "a242", "a243", "a244", "a245", "a246", "a247", "a248", "a249", "a250", "a251", "a252", "a253", "a254", "a255", "a256", "a257", "a258", "a259", "a260", "a261", "a262", "a263", "a264", "a265", "a266", "a267", "a268", "a269", "a270", "a271", "a272", "a273", "a274", "a275", "a276", "a277", "a278", "a279", "a280", "a281", "a282", "a283", "a284", "a285", "a286", "a287", "a288", "a289", "a290", "a291", "a292", "a293", "a294", "a295", "a296", "a297", "a298", "a299", "a300", "a301", "a302", "a303", "a304", "a305", "a306", "a307", "a308", "a309", "a310", "a311", "a312", "a313", "a314", "a315", "a316", "a317", "a318", "a319", "a320", "a321", "a322", "a323", "a324", "a325", "a326", "a327", "a328", "a329", "a330", "a331", "a332", "a333", "a334", "a335", "a336", "a337", "a338", "a339", "a340", "a341", "a342", "a343", "a344", "a345", "a346", "a347", "a348", "a349", "a350", "a351", "a352", "a353", "a354", "a355", "a356", "a357", "a358", "a359", "a360", "a361", "a362", "a363", "a364", "a365", "a366", "a367", "a368", "a369", "a370", "a371", "a372", "a373", "a374", "a375", "a376", "a377", "a378", "a379", "a380", "a381", "a382", "a383", "a384", "a385", "a386", "a387", "a388", "a389", "a390", "a391", "a392", "a393", "a394", "a395", "a396", "a397", "a398", "a399", "a400", "a401", "a402", "a403", "a404", "a405", "a406", "a407", "a408", "a409", "a410", "a411", "a412", "a413", "a414", "a415", "a416", "a417", "a418", "a419", "a420", "a421", "a422", "a423", "a424", "a425", "a426", "a427", "a428", "a429", "a430", "a431", "a432", "a433", "a434", "a435", "a436", "a437", "a438", "a439", "a440", "a441", "a442", "a443", "a444", "a445", "a446", "a447", "a448", "a449", "a450", "a451", "a452", "a453", "a454", "a455", "a456", "a457", "a458", "a459", "a460", "a461", "a462", "a463", "a464", "a465", "a466", "a467", "a468", "a469", "a470", "a471", "a472", "a473", "a474", "a475", "a476", "a477", "a478", "a479", "a480", "a481", "a482", "a483", "a484", "a485", "a486", "a487", "a488", "a489", "a490", "a491", "a492", "a493", "a494", "a495", "a496", "a497", "a498", "a499", "a500", "a501", "a502", "a503", "a504", "a505", "a506", "a507", "a508", "a509", "a510", "a511", "a512", "a513", "a514", "a515", "a516", "a517", "a518", "a519", "a520", "a521", "a522", "a523", "a524", "a525", "a526", "a527", "a528", "a529", "a530", "a531", "a532", "a533", "a534", "a535", "a536", "a537", "a538", "a539", "a540", "a541", "a542", "a543", "a544", "a545", "a546", "a547", "a548", "a549", "a550", "a551", "a552", "a553", "a554", "a555", "a556", "a557", "a558", "a559", "a560", "a561", "a562", "a563", "a564", "a565", "a566", "a567", "a568", "a569", "a570", "a571", "a572", "a573", "a574", "a575", "a576", "a577", "a578", "a579", "a580", "a581", "a582", "a583", "a584", "a585", "a586", "a587", "a588", "a589", "a590", "a591", "a592", "a593", "a594", "a595", "a596", "a597", "a598", "a599", "a600", "a601", "a602", "a603", "a604", "a605", "a606", "a607", "a608", "a609", "a610", "a611", "a612", "a613", "a614", "a615", "a616", "a617", "a618", "a619", "a620", "a621", "a622", "a623", "a624", "a625", "a626", "a627", "a628", "a629", "a630", "a631", "a632", "a633", "a634", "a635", "a636", "a637", "a638", "a639", "a640", "a641", "a642", "a643", "a644", "a645", "a646", "a647", "a648", "a649", "a650", "a651", "a652", "a653", "a654", "a655", "a656", "a657", "a658", "a659", "a660", "a661", "a662", "a663", "a664", "a665", "a666", "a667", "a668", "a669", "a670", "a671", "a672", "a673", "a674", "a675", "a676", "a677", "a678", "a679", "a680", "a681", "a682", "a683", "a684", "a685", "a686", "a687", "a688", "a689", "a690", "a691", "a692", "a693", "a694", "a695", "a696", "a697", "a698", "a699", "a700", "a701", "a702", "a703", "a704", "a705", "a706", "a707", "a708", "a709", "a710", "a711", "a712", "a713", "a714", "a715", "a716", "a717", "a718", "a719", "a720", "a721", "a722", "a723", "a724", "a725", "a726", "a727", "a728", "a729", "a730", "a731", "a732", "a733", "a734", "a735", "a736", "a737", "a738", "a739", "a740", "a741", "a742", "a743", "a744", "a745", "a746", "a747", "a748", "a749", "a750", "a751", "a752", "a753", "a754", "a755", "a756", "a757", "a758", "a759", "a760", "a761", "a762", "a763", "a764", "a765", "a766", "a767", "a768", "a769", "a770", "a771", "a772", "a773", "a774", "a775", "a776", "a777", "a778", "a779", "a780", "a781", "a782", "a783", "a784", "a785", "a786", "a787", "a788", "a789", "a790", "a791", "a792", "a793", "a794", "a795", "a796", "a797", "a798", "a799", "a800", "a801", "a802", "a803", "a804", "a805", "a806", "a807", "a808", "a809", "a810", "a811", "a812", "a813", "a814", "a815", "a816", "a817", "a818", "a819", "a820", "a821", "a822", "a823", "a824", "a825", "a826", "a827", "a828", "a829", "a830", "a831", "a832", "a833", "a834", "a835", "a836", "a837", "a838", "a839", "a840", "a841", "a842", "a843", "a844", "a845", "a846", "a847", "a848", "a849", "a850", "a851", "a852", "a853", "a854", "a855", "a856", "a857", "a858", "a859", "a860", "a861", "a862", "a863", "a864", "a865", "a866", "a867", "a868", "a869", "a870", "a871", "a872", "a873", "a874", "a875", "a876", "a877", "a878", "a879", "a880", "a881", "a882", "a883", "a884", "a885", "a886", "a887", "a888", "a889", "a890", "a891", "a892", "a893", "a894", "a895", "a896", "a897", "a898", "a899", "a900", "a901", "a902", "a903", "a904", "a905", "a906", "a907", "a908", "a909", "a910", "a911", "a912", "a913", "a914", "a915", "a916", "a917", "a918", "a919", "a920", "a921", "a922", "a923", "a924", "a925", "a926", "a927", "a928", "a929", "a930", "a931", "a932", "a933", "a934", "a935", "a936", "a937", "a938", "a939", "a940", "a941", "a942", "a943", "a944", "a945", "a946", "a947", "a948", "a949", "a950", "a951", "a952", "a953", "a954", "a955", "a956", "a957", "a958", "a959", "a960", "a961", "a962", "a963", "a964", "a965", "a966", "a967", "a968", "a969", "a970", "a971", "a972", "a973", "a974", "a975", "a976", "a977", "a978", "a979", "a980", "a981", "a982", "a983", "a984", "a985", "a986", "a987", "a988", "a989", "a990", "a991", "a992", "a993", "a994", "a995", "a996", "a997", "a998", "a999"];

Test cases

Test #1

var i, j, temparray = []; for (i = 0, j = arr.length; i < j; i += chunk) {   temparray.push(arr.slice(i, i + chunk)); }

Test #2

_(arr).groupBy(function(a, b) {   return Math.floor(b / chunk); });

Test #3

arr.inGroupsOf(chunk)

Test #4

_(arr).groupBy(function(a, b) {   return ~~(b / chunk); });

Test #5

var temparray = [], clone = _.clone(arr); while (clone.length) temparray.push(clone.splice(0, chunk));