Skip to content

Instantly share code, notes, and snippets.

@NHQ
Last active December 26, 2015 21:29
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 NHQ/7216101 to your computer and use it in GitHub Desktop.
Save NHQ/7216101 to your computer and use it in GitHub Desktop.
var waveform = require('jsynth-waveform')
var canvas = document.createElement('canvas');
var h = 150, w = 600;
canvas.height = h * 2;
canvas.width = w * 2;
canvas.style.display = 'block';
canvas.style.padding = canvas.style.margin = '0';
canvas.style.border = '3px solid OrangeRed';
document.body.appendChild(canvas);
var o = {};
o.canvas = canvas;
o.chunkSize = 10;
var steps = [];
for(var x = 10000; x < 1000000; x++){
steps.push(collatz(x))
}
o.buffer = steps;
normalize(steps);
waveform(o);
function findMax(set){
var max = 1
set.forEach(function(e){
var x = Math.max(e, max)
if (x > max) max = x
})
return max
}
function findMin(set){
var min = 1
set.forEach(function(e){
var x = Math.min(e, min)
if (x < min) min = x
})
return min
}
function normalize(set){
var x = 0, y = 2;
var min = findMin(set);
var max = findMax(set);
var norm = 0;
set.forEach(function(e, i){
norm = ((e + min) * (x - y)) / (max - min);
set[i] = norm
})
}
function collatz(number){
var count = 0;
return cycle(number)
function cycle(n){
if((number % 2) === 0) {
number = number / 2
}
else{
number = (number * 3) + 1
}
count++
// if(number === 1) console.log( count)
// else return collatz(number)
return number === 1 ? count : cycle(number)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment