Skip to content

Instantly share code, notes, and snippets.

@clumma
Last active January 9, 2017 07:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save clumma/be1d16f6838bbcca504cd12019b4aa59 to your computer and use it in GitHub Desktop.
Save clumma/be1d16f6838bbcca504cd12019b4aa59 to your computer and use it in GitHub Desktop.
Don't write loops?
var range = function(min, max) {
arr = [];
for (var i = min; i <= max; i++) {
arr.push(i);
}
return arr;
}
var fbMod = function(n) {
var msg = '';
var result = new Array(n);
for (var i=1; i <= n; i++, msg='') {
(i % 3) || (msg += 'fizz');
(i % 5) || (msg += 'buzz');
result[i-1] = msg || i;
}
return result;
}
var binarySearch = function(value, arr) { // arr must be sorted
var low = -1;
var high = arr.length;
while (high - low > 1) {
var mid = Math.floor((low + high)/2);
(arr[mid] < value) ? low = mid : high = mid;
}
return high;
}
// helper function
var binaryInsert = function(itm, arr) {
var index = binarySearch(itm, arr);
if (itm === arr[index]) return arr;
arr.splice(index, 0, itm);
return arr;
}
// helper function
var random = function(min, max) {
return Math.floor((Math.random() * (1 + max - min)) + min);
}
var fisherYates = function(arr) { // mutates input!
var j, tmp;
for (var i = arr.length - 1; i > 0; i--) {
j = random(0, i);
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
// randomly draws n unique integers between min and max (inclusive)
var draw = function(n, min, max) {
if (n > (1 + max - min)) throw new Error('draw: range too small');
var result = [];
while (result.length < n) {
binaryInsert(random(min, max), result);
}
return result;
}
var powerSet = function(arr) {
var result = [[]];
for (var i=0; i < arr.length; i++) {
for (var j=0, len=result.length; j < len; j++) {
result.push(result[j].concat(arr[i]));
}
}
return result;
}
// returns the traspose of matrix
var transpose = function(matrix) {
var result = [];
for (var row=0; row < matrix[0].length; row++) {
result[row] = [];
for (var col=0; col < matrix.length; col++) {
result[row][col] = matrix[col][row];
}
}
return result;
}
var eratosthenes = function(n) {
var mask = new Array(n);
var limit = Math.sqrt(n);
var result = [];
for (var i = 2; i <= limit; i++) {
if (!mask[i]) {
for (var j = i * i; j <= n; j += i) {
mask[j] = true;
}
}
}
for (i = 2; i <= n; i++) {
mask[i] || result.push(i);
}
return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment