2022-19 in js

This commit is contained in:
Julien Dessaux 2022-12-28 20:03:29 +01:00
parent ece85a2e99
commit 3430a7074b
Signed by: adyxax
GPG key ID: F92E51B86E07177E
11 changed files with 358 additions and 32 deletions

View file

@ -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) {

View file

@ -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;
}
}

View file

@ -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) {