aboutsummaryrefslogtreecommitdiff
path: root/2022/16-proboscidea-volcanium
diff options
context:
space:
mode:
Diffstat (limited to '2022/16-proboscidea-volcanium')
-rw-r--r--2022/16-proboscidea-volcanium/first.js3
-rw-r--r--2022/16-proboscidea-volcanium/priority_queue.js36
-rw-r--r--2022/16-proboscidea-volcanium/second.js3
3 files changed, 12 insertions, 30 deletions
diff --git a/2022/16-proboscidea-volcanium/first.js b/2022/16-proboscidea-volcanium/first.js
index a7274aa..504ad54 100644
--- a/2022/16-proboscidea-volcanium/first.js
+++ b/2022/16-proboscidea-volcanium/first.js
@@ -18,8 +18,7 @@ fs.readFileSync("input", "utf8")
rate: a[2],
computePathCostTo: function (target) {
Object.values(valves).forEach(v => v.cost = 0);
- let nq = new PriorityQueue();
- nq.enqueue(this, 0);
+ let nq = new PriorityQueue(this);
while (true) {
let n = nq.dequeue();
if (n.element.label === target) {
diff --git a/2022/16-proboscidea-volcanium/priority_queue.js b/2022/16-proboscidea-volcanium/priority_queue.js
index c1a5b65..b9be08b 100644
--- a/2022/16-proboscidea-volcanium/priority_queue.js
+++ b/2022/16-proboscidea-volcanium/priority_queue.js
@@ -6,50 +6,34 @@ export class QElement {
}
export class PriorityQueue {
- constructor() {
+ constructor(elt) {
this.items = [];
+ if (elt !== undefined) {
+ this.enqueue(elt, 0);
+ }
}
enqueue(element, priority) {
- var qElement = new QElement(element, priority);
- var contain = false;
+ let qElement = new QElement(element, priority);
- for (var i = 0; i < this.items.length; i++) {
+ for (let i = 0; i < this.items.length; ++i) {
if (this.items[i].priority > qElement.priority) {
this.items.splice(i, 0, qElement);
- contain = true;
- break;
+ return;
}
}
- if (!contain) {
- this.items.push(qElement);
- }
+ this.items.push(qElement);
}
dequeue() {
- if (this.isEmpty()){
- throw "Attempting to dequeue an empty queue";
- }
- return this.items.shift();
+ return this.items.shift(); // pop highest priority, use shift() for lower priority
}
front() {
- if (this.isEmpty()){
- throw "Attempting to front an empty queue";
- }
return this.items[0];
}
rear() {
- if (this.isEmpty()){
- throw "Attempting to rear an empty queue";
- }
return this.items[this.items.length - 1];
}
isEmpty() {
- return this.items.length == 0;
- }
- printPQueue() {
- var str = "";
- for (var i = 0; i < this.items.length; i++)
- str += this.items[i].element + " ";
- return str;
+ return this.items.length === 0;
}
}
diff --git a/2022/16-proboscidea-volcanium/second.js b/2022/16-proboscidea-volcanium/second.js
index 18c6f84..3b41645 100644
--- a/2022/16-proboscidea-volcanium/second.js
+++ b/2022/16-proboscidea-volcanium/second.js
@@ -18,8 +18,7 @@ fs.readFileSync("input", "utf8")
rate: a[2],
computePathCostTo: function (target) {
Object.values(valves).forEach(v => v.cost = 0);
- let nq = new PriorityQueue();
- nq.enqueue(this, 0);
+ let nq = new PriorityQueue(this);
while (true) {
let n = nq.dequeue();
if (n.element.label === target) {