Public
Edited
Mar 15, 2023
Importers
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
// toTheLimit
// returns an array of every number min...max that can be found using only cartesian products of min...limit
// requires plusOne, multiplyArray
// to-do: maybe implement d3.cross

toTheLimit = (min,limit,max) => {
var baseset = plusOne(limit) // starts with 1, filtered later
var fullset = []
var uniqueset = []
var hardstop = 5 // realistic performance hard stop
function checkMin(num){return (num >= min)}
function checkMax(num){return (num <= max)}
function compareNumbers (a,b) {return a-b}
// filters out numbers below min
var baliset = baseset.filter(checkMin)

for (var i=0; i <= hardstop; i++){
// break if went over
var highest = baliset[baliset.length - 1]
if (baliset[highest] > max){break}

// multiply each element in the array by itself
fullset = multiplyArray(baseset,baliset)

// only keep unique values at or equal max
uniqueset = [...new Set(fullset)]
baliset = uniqueset.filter(checkMax)

}
// sort ascending, or 10 comes before 9
baliset.sort(compareNumbers)
return baliset
}
Insert cell
// Unlimited
// finds all numbers excluded by a limit
// requires plusOne, toTheLimit

unlimited = (min, limit, max) => {
// generate a list of every number min...max
var baseset = plusOne(max)
var fullset = baseset.filter(x => x >= min)
// get the array with limit
var limited = toTheLimit(min,limit,max)
// filter out the limited set
var unlimited = fullset.filter(x=> !limited.includes(x))

return unlimited
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
// couldn't get it to pull local values with an import, so just copied over the code
// by Jon Sadka 2020
// https://observablehq.com/@jonsadka/sierpinski-triangle#color

function color(d, i) {
for (let mod = 2; mod < numberOfDivisors + 2; mod++){
if (selectedMod.includes(`${mod}`) && largeMod(d.value, mod)) {
return chromaColors(mod);
}
}
return "#F1F2F5";
}
Insert cell
// idem, by Jon Sadka 2020
function largeMod(number, mod) {
return Number(BigNumber(number).modulo(mod).valueOf());
}
Insert cell
// idem, by Jon Sadka 2020
chromaColors = function(mod) {
const value = reverseColors === 'Yes' ? Math.abs(1 - (mod - 2) / (numberOfDivisors - 1)) : (mod - 2) / (numberOfDivisors - 1)
return d3[colorScheme](value)
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more