Add lab 11 skeleton

This commit is contained in:
Isaac Shoebottom 2022-10-24 08:44:46 -03:00
parent ee767d8067
commit 869e89188d
6 changed files with 97 additions and 0 deletions

View File

@ -0,0 +1,9 @@
Title: Lab Eleven
Date: 2022-10-19T08:30:00
Tags: cs2613, lab, javascript
Sample description
<!-- more -->
## Sample Body
Sample Body

0
labs/L11/deep-equal.js Normal file
View File

View File

@ -0,0 +1,16 @@
describe("equal", function () {
let obj = {here: {is: "an"}, object: 2};
it("self", function () {
expect(deepEqual(obj,obj)).toBe(true);
});
it("null", function () {
expect(deepEqual(null,null)).toBe(true);
});
it("different", function () {
expect(deepEqual(obj, {here: 1, object: 2})).toBe(false);
});
it("equivalent", function () {
expect(deepEqual(obj, {here: {is: "an"}, object: 2})).toBe(true);
});
});

View File

@ -0,0 +1,13 @@
{
"spec_dir": "spec",
"spec_files": [
"**/*[sS]pec.?(m)js"
],
"helpers": [
"helpers/**/*.?(m)js"
],
"env": {
"stopSpecOnExpectationFailure": false,
"random": true
}
}

View File

59
labs/L11/village.js Normal file
View File

@ -0,0 +1,59 @@
const roads = [
"Alice's House-Bob's House", "Alice's House-Cabin",
"Alice's House-Post Office", "Bob's House-Town Hall",
"Daria's House-Ernie's House", "Daria's House-Town Hall",
"Ernie's House-Grete's House", "Grete's House-Farm",
"Grete's House-Shop", "Marketplace-Farm",
"Marketplace-Post Office", "Marketplace-Shop",
"Marketplace-Town Hall", "Shop-Town Hall"
];
function buildGraph(edges) {
let graph = Object.create(null);
function addEdge(from, to) {
if (graph[from] == null) {
graph[from] = [to];
} else {
graph[from].push(to);
}
}
for (let [from, to] of edges.map(r => r.split("-"))) {
addEdge(from, to);
addEdge(to, from);
}
return graph;
}
const roadGraph = buildGraph(roads);
class VillageState {
constructor(place, parcels) {
this.place = place;
this.parcels = parcels;
}
move(destination) {
if (!roadGraph[this.place].includes(destination)) {
return this;
} else {
let parcels = this.parcels.map(p => {
if (p.place != this.place) return p;
return { place: destination, address: p.address };
}).filter(p => p.place != p.address);
return new VillageState(destination, parcels);
}
}
}
let first = new VillageState(
"Post Office",
[{ place: "Post Office", address: "Alice's House" }]
);
let next = first.move("Alice's House");
console.log(next.place);
// → Alice's House
console.log(next.parcels);
// → []
console.log(first.place);
// → Post Office