Skip to content

Instantly share code, notes, and snippets.

@eyecatchup
Created May 13, 2017 23:52
Show Gist options
  • Select an option

  • Save eyecatchup/746de77623527178726d4a6cb59d4380 to your computer and use it in GitHub Desktop.

Select an option

Save eyecatchup/746de77623527178726d4a6cb59d4380 to your computer and use it in GitHub Desktop.
// ---------------------------------------
// 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