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)