New classes work
This commit is contained in:
parent
d729141643
commit
19af0555cd
124
main.js
124
main.js
@ -1,18 +1,18 @@
|
|||||||
class Resistor {
|
class Resistor {
|
||||||
#ohmage;
|
ohmage;
|
||||||
constructor(ohmage) {
|
constructor(ohmage) {
|
||||||
this.#ohmage = ohmage;
|
this.ohmage = ohmage;
|
||||||
}
|
}
|
||||||
getOhmage() {
|
getOhmage() {
|
||||||
return this.#ohmage;
|
return this.ohmage;
|
||||||
}
|
}
|
||||||
equals(other) {
|
equals(other) {
|
||||||
return this.getOhmage() === other.getOhmage();
|
return this.getOhmage() === other.getOhmage();
|
||||||
}
|
}
|
||||||
hash() {
|
hash() {
|
||||||
return this.#ohmage;
|
return this.ohmage;
|
||||||
}
|
}
|
||||||
size() {
|
cost() {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
toString() {
|
toString() {
|
||||||
@ -21,6 +21,12 @@ class Resistor {
|
|||||||
prettyString(depth = 0) {
|
prettyString(depth = 0) {
|
||||||
return `${'--'.repeat(depth)}${this.toString()}`
|
return `${'--'.repeat(depth)}${this.toString()}`
|
||||||
}
|
}
|
||||||
|
parallel(other) {
|
||||||
|
return NewParallelResistor.smart(this, other);
|
||||||
|
}
|
||||||
|
series(other) {
|
||||||
|
return NewSeriesResistor.smart(this, other);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
class ComplexResistor extends Resistor {
|
class ComplexResistor extends Resistor {
|
||||||
left;
|
left;
|
||||||
@ -65,6 +71,109 @@ ${this.right.prettyString(depth + 1)}`
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function sum(list) {
|
||||||
|
var temp = 0;
|
||||||
|
list.forEach(e => temp += e);
|
||||||
|
return temp;
|
||||||
|
}
|
||||||
|
function harm(list) {
|
||||||
|
var temp = 0;
|
||||||
|
list.forEach(e => temp += 1 / e);
|
||||||
|
return 1 / temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
class NestedResistor extends Resistor {
|
||||||
|
children = []
|
||||||
|
|
||||||
|
constructor(l, func) {
|
||||||
|
super(func(l.map(e => e.getOhmage())));
|
||||||
|
this.func = func
|
||||||
|
this.children = l;
|
||||||
|
}
|
||||||
|
cost() {
|
||||||
|
return func(this.children.map(e => e.cost()));
|
||||||
|
}
|
||||||
|
prettyString(depth = 0) {
|
||||||
|
var childrenStrings = this.children.map(c => c.prettyString(depth + 1)).join("\n")
|
||||||
|
return `${'--'.repeat(depth)}${this.toString()}\n${childrenStrings}`
|
||||||
|
}
|
||||||
|
parallel(other) {
|
||||||
|
return NewParallelResistor.smart(this, other);
|
||||||
|
}
|
||||||
|
series(other) {
|
||||||
|
return NewSeriesResistor.smart(this, other);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class NewSeriesResistor extends Resistor {
|
||||||
|
children = []
|
||||||
|
|
||||||
|
static smart(...list) {
|
||||||
|
var thelist = []
|
||||||
|
list.forEach(e => {
|
||||||
|
if (e.constructor.name === "NewSeriesResistor") {
|
||||||
|
e.children.forEach(e => thelist.push(e));
|
||||||
|
} else {
|
||||||
|
thelist.push(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return new NewSeriesResistor(thelist);
|
||||||
|
}
|
||||||
|
constructor(l) {
|
||||||
|
super(sum(l.map(e => e.getOhmage())));
|
||||||
|
this.children = l;
|
||||||
|
}
|
||||||
|
cost() {
|
||||||
|
return sum(this.children.map(e => e.cost()));
|
||||||
|
}
|
||||||
|
prettyString(depth = 0) {
|
||||||
|
var childrenStrings = this.children.map(c => c.prettyString(depth + 1)).join("\n")
|
||||||
|
return `${'--'.repeat(depth)}${this.toString()}\n${childrenStrings}`
|
||||||
|
}
|
||||||
|
parallel(other) {
|
||||||
|
return NewParallelResistor.smart(this, other);
|
||||||
|
}
|
||||||
|
series(other) {
|
||||||
|
return NewSeriesResistor.smart(this, other);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class NewParallelResistor extends Resistor {
|
||||||
|
children = []
|
||||||
|
|
||||||
|
static smart(...list) {
|
||||||
|
var thelist = []
|
||||||
|
list.forEach(e => {
|
||||||
|
if (e.constructor.name === "NewParallelResistor") {
|
||||||
|
e.children.forEach(e => thelist.push(e));
|
||||||
|
} else {
|
||||||
|
thelist.push(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return new NewParallelResistor(thelist);
|
||||||
|
}
|
||||||
|
constructor(l) {
|
||||||
|
super(harm(l.map(e => e.getOhmage())));
|
||||||
|
this.children = l;
|
||||||
|
}
|
||||||
|
cost() {
|
||||||
|
return sum(this.children.map(e => e.cost()));
|
||||||
|
}
|
||||||
|
prettyString(depth = 0) {
|
||||||
|
var childrenStrings = this.children.map(c => c.prettyString(depth + 1)).join("\n")
|
||||||
|
return `${'--'.repeat(depth)}${this.toString()}\n${childrenStrings}`
|
||||||
|
}
|
||||||
|
parallel(other) {
|
||||||
|
return NewParallelResistor.smart(this, other);
|
||||||
|
}
|
||||||
|
series(other) {
|
||||||
|
return NewSeriesResistor.smart(this, other);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var resistors = [100]
|
var resistors = [100]
|
||||||
var N = 4
|
var N = 4
|
||||||
@ -93,9 +202,8 @@ function iterSet() {
|
|||||||
addition = new Set()
|
addition = new Set()
|
||||||
set.forEach(e1 => {
|
set.forEach(e1 => {
|
||||||
set.forEach(e2 => {
|
set.forEach(e2 => {
|
||||||
r1 = new SeriesResistor(e1, e2);
|
r1 = NewSeriesResistor.smart(e1, e2);
|
||||||
r2 = new ParallelResistor(e1, e2);
|
r2 = NewParallelResistor.smart(e1, e2);
|
||||||
//console.log(addition.size)
|
|
||||||
addition.add(r1);
|
addition.add(r1);
|
||||||
addition.add(r2);
|
addition.add(r2);
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user