Skip to content

Commit b008964

Browse files
feat(2018 day-14): simplify initialization steps for recipes and elves
Initialize recipes with an array instead of a single value Breaks foo = new Recipes(x), use foo = new Recipes([x,y]) instead
1 parent a822069 commit b008964

File tree

3 files changed

+27
-129
lines changed

3 files changed

+27
-129
lines changed

2018/day-14/recipes.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@
22
* Circular linked list of recipes
33
*/
44
class Recipes {
5-
constructor (recipe) {
5+
constructor (recipes) {
66
this.head = null
77
this.tail = null
88
this.length = 0
9-
this.addFirst(recipe)
9+
this.addFirst(recipes[0])
10+
for (let x = 1; x < recipes.length; x++) {
11+
this.addRecipe(recipes[x])
12+
}
1013
}
1114

1215
addFirst (recipe) {

2018/day-14/recipes.test.js

Lines changed: 19 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,29 @@ const {
99
} = require('./recipes')
1010

1111
describe('--- Day 14: Chocolate Charts ---', () => {
12+
let recipes
13+
let elves
1214
describe('Part 1:', () => {
15+
beforeEach(() => {
16+
elves = [3, 7]
17+
recipes = new Recipes(elves)
18+
elves[0] = recipes.tail
19+
elves[1] = recipes.head
20+
})
1321
describe('new Recipes()', () => {
1422
it('builds a linked list', () => {
15-
const recipes = new Recipes(0)
23+
expect(recipes.head.value).to.equal(7)
1624
for (let x = 1; x <= 5; x++) {
1725
recipes.addRecipe(x)
1826
}
19-
expect(recipes.length).to.equal(6)
27+
expect(recipes.length).to.equal(7)
2028
expect(recipes.head.value).to.equal(5)
21-
expect(recipes.tail.value).to.equal(0)
29+
expect(recipes.tail.value).to.equal(3)
2230
expect(recipes.tail.prev).to.equal(recipes.head) // circular linked list for prev
2331
expect(recipes.head.next).to.equal(recipes.tail) // circular linked list for next
2432
})
2533
describe('scoreRecipes()', () => {
2634
it('adds new recipes based on the provided score', () => {
27-
const recipes = new Recipes(0)
2835
for (let x = 1; x <= 5; x++) {
2936
recipes.addRecipe(x)
3037
}
@@ -47,18 +54,8 @@ describe('--- Day 14: Chocolate Charts ---', () => {
4754
describe('loopRecipeForEleves()', () => {
4855
it('loops through the recipe object for the specified elves the specified number of times', () => {
4956
const expected = '37101012451589167792' // list of recipe values in the last iteration of the example
50-
const elves = [3, 7]
51-
const recipes = new Recipes(elves[0])
5257
let actual = ''
5358

54-
elves.forEach((elf, idx) => {
55-
if (idx === 0) {
56-
elves[0] = recipes.head
57-
} else {
58-
elves[idx] = recipes.addRecipe(elf)
59-
}
60-
})
61-
6259
loopRecipesForElves(elves, recipes, 15)
6360

6461
let iterator = recipes.tail.next
@@ -73,139 +70,43 @@ describe('--- Day 14: Chocolate Charts ---', () => {
7370
})
7471
describe('calculateXAfterY(x, y, recipe, elves)', () => {
7572
it('predicts the next X results after the elves have executed Y', () => {
76-
const elves = [3, 7]
77-
const recipes = new Recipes(elves[0])
78-
let actual = ''
79-
80-
elves.forEach((elf, idx) => {
81-
if (idx === 0) {
82-
elves[0] = recipes.head
83-
} else {
84-
elves[idx] = recipes.addRecipe(elf)
85-
}
86-
})
87-
88-
actual = calculateXAfterY(10, 9, recipes, elves)
73+
let actual = calculateXAfterY(10, 9, recipes, elves)
8974
expect(actual).to.equal('5158916779')
9075
})
9176
it('predicts the next X results after the elves have executed Y', () => {
92-
const elves = [3, 7]
93-
const recipes = new Recipes(elves[0])
94-
let actual = ''
95-
96-
elves.forEach((elf, idx) => {
97-
if (idx === 0) {
98-
elves[0] = recipes.head
99-
} else {
100-
elves[idx] = recipes.addRecipe(elf)
101-
}
102-
})
103-
104-
actual = calculateXAfterY(10, 5, recipes, elves)
77+
const actual = calculateXAfterY(10, 5, recipes, elves)
10578
expect(actual).to.equal('0124515891')
10679
})
10780
it('predicts the next X results after the elves have executed Y', () => {
108-
const elves = [3, 7]
109-
const recipes = new Recipes(elves[0])
110-
let actual = ''
111-
112-
elves.forEach((elf, idx) => {
113-
if (idx === 0) {
114-
elves[0] = recipes.head
115-
} else {
116-
elves[idx] = recipes.addRecipe(elf)
117-
}
118-
})
119-
120-
actual = calculateXAfterY(10, 18, recipes, elves)
81+
const actual = calculateXAfterY(10, 18, recipes, elves)
12182
expect(actual).to.equal('9251071085')
12283
})
12384
it('predicts the next X results after the elves have executed Y', () => {
124-
const elves = [3, 7]
125-
const recipes = new Recipes(elves[0])
126-
let actual = ''
127-
128-
elves.forEach((elf, idx) => {
129-
if (idx === 0) {
130-
elves[0] = recipes.head
131-
} else {
132-
elves[idx] = recipes.addRecipe(elf)
133-
}
134-
})
135-
136-
actual = calculateXAfterY(10, 2018, recipes, elves)
85+
const actual = calculateXAfterY(10, 2018, recipes, elves)
13786
expect(actual).to.equal('5941429882')
13887
})
13988
})
14089
describe('findPattern()', () => {
14190
it('counts the number of recipes to the left of the specified pattern', () => {
142-
const elves = [3, 7]
143-
const recipes = new Recipes(elves[0])
144-
let actual = ''
145-
146-
elves.forEach((elf, idx) => {
147-
if (idx === 0) {
148-
elves[0] = recipes.head
149-
} else {
150-
elves[idx] = recipes.addRecipe(elf)
151-
}
152-
})
153-
154-
actual = findPattern('51589', recipes, elves)
91+
const actual = findPattern('51589', recipes, elves)
15592
expect(actual).to.equal(9)
15693
})
15794
})
15895
describe('findPattern()', () => {
15996
it('counts the number of recipes to the left of the specified pattern', () => {
160-
const elves = [3, 7]
161-
const recipes = new Recipes(elves[0])
162-
let actual = ''
163-
164-
elves.forEach((elf, idx) => {
165-
if (idx === 0) {
166-
elves[0] = recipes.head
167-
} else {
168-
elves[idx] = recipes.addRecipe(elf)
169-
}
170-
})
171-
172-
actual = findPattern('01245', recipes, elves)
97+
const actual = findPattern('01245', recipes, elves)
17398
expect(actual).to.equal(5)
17499
})
175100
})
176101
describe('findPattern()', () => {
177102
it('counts the number of recipes to the left of the specified pattern', () => {
178-
const elves = [3, 7]
179-
const recipes = new Recipes(elves[0])
180-
let actual = ''
181-
182-
elves.forEach((elf, idx) => {
183-
if (idx === 0) {
184-
elves[0] = recipes.head
185-
} else {
186-
elves[idx] = recipes.addRecipe(elf)
187-
}
188-
})
189-
190-
actual = findPattern('92510', recipes, elves)
103+
const actual = findPattern('92510', recipes, elves)
191104
expect(actual).to.equal(18)
192105
})
193106
})
194107
describe('findPattern()', () => {
195108
it('counts the number of recipes to the left of the specified pattern', () => {
196-
const elves = [3, 7]
197-
const recipes = new Recipes(elves[0])
198-
let actual = ''
199-
200-
elves.forEach((elf, idx) => {
201-
if (idx === 0) {
202-
elves[0] = recipes.head
203-
} else {
204-
elves[idx] = recipes.addRecipe(elf)
205-
}
206-
})
207-
208-
actual = findPattern('59414', recipes, elves)
109+
const actual = findPattern('59414', recipes, elves)
209110
expect(actual).to.equal(2018)
210111
})
211112
})

2018/day-14/solution.js

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,9 @@ const {
77
const input = 540561
88

99
let elves = [3, 7]
10-
let recipes = new Recipes(elves[0])
11-
12-
elves.forEach((elf, idx) => {
13-
if (idx === 0) {
14-
elves[0] = recipes.head
15-
} else {
16-
elves[idx] = recipes.addRecipe(elf)
17-
}
18-
})
10+
let recipes = new Recipes(elves)
11+
elves[0] = recipes.tail
12+
elves[1] = recipes.head
1913

2014
const answer = calculateXAfterY(10, input, recipes, elves)
2115

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy