Initial commit. Basic functionality working

This commit is contained in:
Dominic Zimmer 2020-11-18 11:52:14 +01:00
commit d729141643
2 changed files with 124 additions and 0 deletions

5
index.html Normal file
View File

@ -0,0 +1,5 @@
<html>
<body>
</body>
<script src="main.js"></script>
</html>

119
main.js Normal file
View File

@ -0,0 +1,119 @@
class Resistor {
#ohmage;
constructor(ohmage) {
this.#ohmage = ohmage;
}
getOhmage() {
return this.#ohmage;
}
equals(other) {
return this.getOhmage() === other.getOhmage();
}
hash() {
return this.#ohmage;
}
size() {
return 1;
}
toString() {
return `${this.constructor.name}(${this.getOhmage()})`;
}
prettyString(depth = 0) {
return `${'--'.repeat(depth)}${this.toString()}`
}
}
class ComplexResistor extends Resistor {
left;
constructor(other) {
super(other.getOhmage());
this.left = other;
}
}
class SeriesResistor extends Resistor {
left;
right;
constructor(r1, r2) {
super(r1.getOhmage() + r2.getOhmage());
this.left = r1;
this.right = r2;
}
size() {
return this.left.size() + this.right.size();
}
prettyString(depth = 0) {
var leftString = this.left.prettyString(depth + 1)
var leftString = this.left.constructor.name === "SeriesResistor" ? `${this.left.left.prettyString(depth + 1)}\n${this.left.right.prettyString(depth + 1)}` : this.left.prettyString(depth + 1);
var rightString = this.right.constructor.name === "SeriesResistor" ? `${this.right.left.prettyString(depth + 1)}\n${this.right.right.prettyString(depth + 1)}` : this.right.prettyString(depth + 1);
return `${'--'.repeat(depth)}${this.toString()}\n${leftString}\n${rightString}`;
}
}
class ParallelResistor extends Resistor {
left
right
constructor(r1, r2) {
super(1 / ((1/r1.getOhmage()) + (1/r2.getOhmage())));
this.left = r1;
this.right = r2;
}
size() {
return this.left.size() + this.right.size();
}
prettyString(depth = 0) {
return `${'--'.repeat(depth)}${this.toString()}
${this.left.prettyString(depth + 1)}
${this.right.prettyString(depth + 1)}`
}
}
var resistors = [100]
var N = 4
var maxValue = Math.max(...resistors)
numberline = new Array(N * maxValue + 1)
numberline.fill(-1)
set = new Map()
for (i = 0; i < resistors.length; i++) {
var value = resistors[i];
var resistor = new Resistor(value);
set.set(value, resistor);
numberline[value] = resistor;
}
for (i = 0; i < N; i++) {
iterSet();
console.log("After iteration", i, set.size, "entries");
}
console.log(set)
function iterSet() {
addition = new Set()
set.forEach(e1 => {
set.forEach(e2 => {
r1 = new SeriesResistor(e1, e2);
r2 = new ParallelResistor(e1, e2);
//console.log(addition.size)
addition.add(r1);
addition.add(r2);
});
});
addition.forEach( e => {
value = Math.round(e.getOhmage());
if (!set.has(value)) {
set.set(value, e)
numberline[value] = e;
}
});
}
function missings() {
missing = new Set()
for (i = 0; i < N * maxValue + 1; i++) {
if (numberline[i] == -1)
missing.add(i);
}
return missing;
}