Skip to content

Instantly share code, notes, and snippets.

@jkwok91
Created January 7, 2017 00:45
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 jkwok91/ba43bc423f16daec6299938ee4af198a to your computer and use it in GitHub Desktop.
Save jkwok91/ba43bc423f16daec6299938ee4af198a to your computer and use it in GitHub Desktop.
im so fuckin' _dangerously defensive_. bite me.
// ulam spiral leggo
var start;
var N;
var sideLen;
function setup() {
createCanvas(500,500);
background(0);
sideLen = 20;
N = 401;
rectMode(CENTER);
start = createVector(width/2, height/2);
noLoop();
}
function draw() {
var loopsAround = 0;
// how the fuck do i draw a spiral
// this was a programming question that i once failed
// this is taking me absurdly long
drawSq(start.x, start.y, 1);
for (var i = 2; i < N; i++) {
var nextLargestSq = Math.ceil(Math.sqrt(i));
var spiralSide = nextLargestSq%2 == 0 ? nextLargestSq+1 : nextLargestSq;
var tier = Math.floor(spiralSide/2); // integer diviz?
var numPerSide = spiralSide-1;
var prevSpiralSide = 2*tier - 1;
var thisTierStart = Math.pow(prevSpiralSide, 2) + 1;
//console.log("i", i, "spiralside", spiralSide, "tier", tier, "number per side in this spiralside", numPerSide, "previous spiral side length", prevSpiralSide, "this tier starts at",thisTierStart);
// these names are horrible. i am truly sorry.
var sideIdx = ((i - thisTierStart)%numPerSide) + 1;
var relSideIdx = sideIdx - tier;
var side = Math.floor((i - thisTierStart)/numPerSide)+1;
var dx, dy;
// giant switch statement? lol
if (side == 1) {
dx = tier;
dy = -1*relSideIdx;
} else if (side == 2) {
dx = -1*relSideIdx;
dy = -1*tier;
} else if (side == 3) {
dx = -1*tier;
dy = relSideIdx;
} else {
dx = relSideIdx;
dy = tier;
}
var coorx = start.x + dx * sideLen;
var coory = start.y + dy * sideLen;
drawSq(coorx, coory, i);
}
}
function drawSq(x, y, num) {
// check properties of num and color accordingly
var rectColor = color(0,0,0);
if (isPrime(num)) {
rectColor = color(200,200,0);
}
fill(rectColor);
stroke(255);
rect(x, y, sideLen, sideLen);
fill(255);
noStroke();
textSize(10);
textAlign(CENTER, CENTER);
var num = "" + num;
text(num, x, y);
}
function isPrime(num) {
// yeah fuck you too this part isn't the point of this project
// #dangerouslyDefensive
if (num == 1) { return false; }
for (var i = 2; i <= Math.sqrt(num); i++) {
if (num%i == 0) {
return false;
}
}
return true;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment