Skip to content

Instantly share code, notes, and snippets.

@cjsheets
Last active March 10, 2017 05:25
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save cjsheets/7026cebaa7153ab544e5301e7b7868ea to your computer and use it in GitHub Desktop.
Reverse or rotate #jsbench #jsperf (http://jsbench.github.io/#7026cebaa7153ab544e5301e7b7868ea) #jsbench #jsperf
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Reverse or rotate #jsbench #jsperf</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/benchmark/1.0.0/benchmark.min.js"></script>
<script src="./suite.js"></script>
</head>
<body>
<h1>Open the console to view the results</h1>
<h2><code>cmd + alt + j</code> or <code>ctrl + alt + j</code></h2>
</body>
</html>
"use strict";
(function (factory) {
if (typeof Benchmark !== "undefined") {
factory(Benchmark);
} else {
factory(require("benchmark"));
}
})(function (Benchmark) {
var suite = new Benchmark.Suite;
suite.add("function revrot(str, sz) {", function () {
function revrot(str, sz) {
if (sz < 1 || sz > str.length)
return '';
let reverse = s => s.split('').reverse().join('');
let rotate = s => s.slice(1) + s.slice(0, 1);
let sum_cubes = c => c.split('').reduce((a, b) => (a + +b) ** 3, 0);
return str
.match(new RegExp('.{' + sz + '}', 'g'))
.map(c => sum_cubes(c) % 2 ? rotate(c) : reverse(c))
.join('');
}
var s = "563000655734469485"
revrot(s, 4)
s = "56300065573446948588855"
revrot(s, 3)
s = "56300065573446948588855200928875449742090"
revrot(s, 6)
s = "56300065573446948588855200928875449742090827299285754137212"
revrot(s, 11)
});
suite.add("function revrot(str, sz) {", function () {
function revrot(str, sz) {
if(!sz||sz<0||sz>str.length)return '';
var arr=str.match(new RegExp('\\d{'+sz+'}','g'));
return arr.map(function(v){
if(v.toString().split('').reduce((s,v)=>s+v*1,0)%2===0){
return v.split('').reverse().join('');
}
else return v.slice(1)+v[0];
}).join('');
}
var s = "563000655734469485"
revrot(s, 4)
s = "56300065573446948588855"
revrot(s, 3)
s = "56300065573446948588855200928875449742090"
revrot(s, 6)
s = "56300065573446948588855200928875449742090827299285754137212"
revrot(s, 11)
});
suite.add("function revrot(str, sz){", function () {
function revrot(str, sz){
if(sz <= 0 || str.length <= 0 || sz > str.length)
return '';
var nums = [];
while(str.length >= sz){
nums.push(str.slice(0, sz));
str = str.slice(sz);
}
nums = nums.map(function(num){
var sum = num.replace(/[02468]/g, '').length;
if(sum % 2 == 0)
return num.split('').reverse().join('');
else
return num.slice(1) + num.slice(0, 1);
});
return nums.join('');
}
var s = "563000655734469485"
revrot(s, 4)
s = "56300065573446948588855"
revrot(s, 3)
s = "56300065573446948588855200928875449742090"
revrot(s, 6)
s = "56300065573446948588855200928875449742090827299285754137212"
revrot(s, 11)
});
suite.add("function revrot(str, sz) {", function () {
function revrot(str, sz) {
return ( sz<=0 || sz > str.length || str=="" ) ? ""
: str2chunks(str,sz).map( chunk => isSumOfCubesOfDigitsOdd(chunk) ? rotate(chunk) : reverse(chunk) ).join("")
}
const str2chunks = (s,c) => s.match( new RegExp(".{"+c+"}", "g"))||[];
const isSumOfCubesOfDigitsOdd = str => str.replace(/[02468]/g,'').length%2;
const rotate = str => str.slice(1)+str[0];
const reverse = str => str.split('').reverse().join('')
var s = "563000655734469485"
revrot(s, 4)
s = "56300065573446948588855"
revrot(s, 3)
s = "56300065573446948588855200928875449742090"
revrot(s, 6)
s = "56300065573446948588855200928875449742090827299285754137212"
revrot(s, 11)
});
suite.add("function revrot(str, sz) {", function () {
function revrot(str, sz) {
function aux(u) {
var v = u.map(function(c) { return Math.pow(+c, 3); });
return v.reduce(function(a, b) { return a + b; });
}
if ((sz <= 0) || (str === "") || (sz > str.length)) return "";
var s = str.match(new RegExp('.{'+ sz + '}', 'g'));
var t = s.map(function(r) {
var u = r.split("");
if (aux(u) % 2 === 0) return u.reverse().join('');
else
return r.substring(1) + r.charAt(0);
});
return t.join("")
}
var s = "563000655734469485"
revrot(s, 4)
s = "56300065573446948588855"
revrot(s, 3)
s = "56300065573446948588855200928875449742090"
revrot(s, 6)
s = "56300065573446948588855200928875449742090827299285754137212"
revrot(s, 11)
});
suite.add("function revrot(str, sz) {", function () {
function revrot(str, sz) {
let new_str = '';
if(sz>0) {
for(let i=0; i<Math.floor(str.length/sz); i++){
let current_str = str.substr(i*sz, sz);
let odds = current_str.split('').reduce((a,v) => { return a += v % 2 }, 0);
console.log(odds)
if(odds % 2) {
new_str += current_str.substr(1) + current_str.substr(0,1);
} else {
new_str += current_str.split('').reverse().join('');
}
}
}
return new_str;
}
var s = "563000655734469485"
revrot(s, 4)
s = "56300065573446948588855"
revrot(s, 3)
s = "56300065573446948588855200928875449742090"
revrot(s, 6)
s = "56300065573446948588855200928875449742090827299285754137212"
revrot(s, 11)
});
suite.on("cycle", function (evt) {
console.log(" - " + evt.target);
});
suite.on("complete", function (evt) {
console.log(new Array(30).join("-"));
var results = evt.currentTarget.sort(function (a, b) {
return b.hz - a.hz;
});
results.forEach(function (item) {
console.log((idx + 1) + ". " + item);
});
});
console.log("Reverse or rotate #jsbench #jsperf");
console.log(new Array(30).join("-"));
suite.run();
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment