Created
May 13, 2017 23:52
-
-
Save eyecatchup/746de77623527178726d4a6cb59d4380 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // --------------------------------------- | |
| // By Steven Levithan <stevenlevithan.com> | |
| // <blog.stevenlevithan.com/archives/fast-string-multiply> | |
| // --------------------------------------- | |
| var mul_sl_0 = function (str, num) { | |
| if (!num) return ""; | |
| var newStr = str; | |
| while (--num) newStr += str; | |
| return newStr; | |
| }; | |
| var mul_sl_1 = function (str, num) { | |
| return num ? Array(num + 1).join(str) : ""; | |
| }; | |
| var mul_sl_2 = function () { | |
| function mul (str, num) { | |
| return Array(num + 1).join(str); | |
| } | |
| return function (str, num) { | |
| return num ? str.replace(/^/, mul("$'", num - 1)) : ""; | |
| }; | |
| }(); | |
| var mul_sl_3 = function (str, num) { | |
| if (!num) return ""; | |
| var orig = str, | |
| soFar = [str], | |
| added = 1, | |
| left, i; | |
| while (added < num) { | |
| left = num - added; | |
| str = orig; | |
| for (i = 2; i < left; i *= 2) { | |
| str += str; | |
| } | |
| soFar.push(str); | |
| added += (i / 2); | |
| } | |
| return soFar.join(""); | |
| }; | |
| // --------------------------------------- | |
| // By Kris Kowal <cixar.com/~kris.kowal/> | |
| // --------------------------------------- | |
| var mul_kk_0 = function (str, num) { | |
| var acc = []; | |
| for (var i = 0; (1 << i) <= num; i++) { | |
| if ((1 << i) & num) | |
| acc.push(str); | |
| str += str; | |
| } | |
| return acc.join(""); | |
| }; | |
| // --------------------------------------- | |
| // By LiuCougar <liucougar.net> | |
| // <liucougar.net/blog/archives/76> | |
| // --------------------------------------- | |
| var mul_lc_0 = function (str, num) { | |
| var r = []; | |
| /*@cc_on //for IE | |
| var t = [str]; | |
| while (num) { | |
| if (num % 2) | |
| r.push.apply(r, t); | |
| t.push.apply(t, t); | |
| num >>= 1; | |
| } | |
| return r.join(""); | |
| @*/ | |
| while (num) { | |
| if (num % 2) | |
| r.push(str); | |
| str += str; | |
| num >>= 1; | |
| } | |
| return r.join(""); | |
| }; | |
| // --------------------------------------- | |
| // By David Andersson <web-graphics.com> | |
| // --------------------------------------- | |
| var mul_da_0 = function (str, num) { | |
| var res = "", | |
| bits = [str], | |
| i = Math.log(num) / Math.LN2 >> 0, | |
| j = i; | |
| do { | |
| bits.push(str+=str); | |
| } while (0 < --i); | |
| do { | |
| res += (1 << j) & num ? bits[j] : ""; | |
| } while(j-- > 0); | |
| return res; | |
| }; | |
| var mul_da_1 = function (str, num) { | |
| var acc = [], | |
| i = Math.log(num) / Math.LN2 >> 0, | |
| c = 2 << i; | |
| j = 1; | |
| do { | |
| if (j & num) | |
| acc.push(str); | |
| str += str; | |
| } while ((j <<= 1) < c); | |
| return acc.join(""); | |
| }; | |
| var mul_da_2 = function (str, num) { | |
| var acc = [], | |
| c = Math.log(num) / Math.LN2 >> 0, | |
| i = 0; | |
| do { | |
| if ((1 << i) & num) | |
| acc.push(str); | |
| str += str; | |
| } while (i++ < c); | |
| return acc.join(""); | |
| }; | |
| var mul_da_3 = function (str, num) { | |
| var i = Math.ceil(Math.log(num) / Math.LN2), | |
| res = str; | |
| do { | |
| res += res; | |
| } while (0 < --i); | |
| return res.slice(0, str.length * num); | |
| }; | |
| function Y (le) { | |
| return function (f) { | |
| return f(f); | |
| }(function (f) { | |
| return le(function () { | |
| return f(f).apply(this, arguments); | |
| }); | |
| }); | |
| } | |
| function mkMul (h) { | |
| return function(str, num){ | |
| var m = num >>> 1; | |
| return ((num & 1) ? str : "") + | |
| ((m > 0) ? h (str + str, m) : ""); | |
| }; | |
| } | |
| var mul_da_4 = Y(mkMul); | |
| var mul_da_5 = function (str, num) { | |
| function accMul (s) { | |
| return function (p) { | |
| var t = (p === "1" ? s : ""); | |
| s += s; | |
| return t; | |
| }; | |
| } | |
| var t = num.toString(2).split(/(?:)/g).reverse().join(""); | |
| return t.replace(/[10]/g, accMul(str)); | |
| }; | |
| var mul_da_6 = function (str, num) { | |
| function subst (p) { | |
| var t = bits.pop(); | |
| return (p === "1" ? t : ""); | |
| } | |
| var t = num.toString(2), | |
| bits = [str], | |
| i = t.length; | |
| while (0 < --i) { | |
| bits.push(str += str); | |
| } | |
| return t.replace(/[10]/g, subst); | |
| }; | |
| // --------------------------------------- | |
| // By rasmus <phloe.net> | |
| // --------------------------------------- | |
| var mul_rm_0 = function (str, num) { | |
| var pre = [str], | |
| b = num.toString(2).split("").reverse(), | |
| l = b.length, | |
| i = 1; | |
| while (i < l) { | |
| var s = pre[i - 1]; | |
| pre.push(s + s); | |
| i++; | |
| } | |
| var i = 0; | |
| while (i < l) { | |
| if (b[i] == "0") pre[i] = ""; | |
| i++; | |
| } | |
| return pre.join(""); | |
| }; | |
| // --------------------------------------- | |
| // By Daghan Dinc | |
| // --------------------------------------- | |
| var mul_dd_0 = function (str, num) { | |
| if (num == 0) return ""; | |
| var binaryCount = num.toString(2), | |
| numDegree = binaryCount.length, | |
| resultStr = ""; | |
| for (var i = 0; i < numDegree; i++) { | |
| resultStr += resultStr; // for both 0 and 1 | |
| if (binaryCount.charAt(i) == "1") { | |
| resultStr += str; | |
| } | |
| } | |
| return resultStr; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment