Skip to content

Commit 59f02c9

Browse files
feat(2013 day-14): solution to part 1, calculate X recipes after Y recipes
1 parent 513eac0 commit 59f02c9

File tree

3 files changed

+120
-1
lines changed

3 files changed

+120
-1
lines changed

2018/day-14/recipes.js

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,39 @@ const loopRecipesForElves = (elves, recipes, repeat) => {
7272
}
7373
elves[idx] = elf
7474
})
75+
}
76+
}
77+
78+
/**
79+
* Determines the next X recipes after the elves have generated Y recipes
80+
*/
81+
const calculateXAfterY = (x, y, recipes, elves) => {
82+
let iterator = recipes.head
83+
while (recipes.length <= y) {
84+
loopRecipesForElves(elves, recipes, 1)
85+
}
86+
87+
if (recipes.length === y + 1) {
88+
iterator = recipes.head
89+
} else {
90+
// In case multidigit recipe results created more than Y
91+
iterator = recipes.head.prev
92+
}
93+
94+
while (recipes.length < x + y) {
95+
loopRecipesForElves(elves, recipes, 1)
96+
}
7597

76-
console.log(recipes.head.value)
98+
let result = ''
99+
while (result.length < x) {
100+
result += iterator.value.toString()
101+
iterator = iterator.next
77102
}
103+
return result
78104
}
79105

80106
module.exports = {
107+
calculateXAfterY,
81108
loopRecipesForElves,
82109
Recipes,
83110
totalDigitsInArray

2018/day-14/recipes.test.js

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/* eslint-env mocha */
22
const expect = require('chai').expect
33
const {
4+
calculateXAfterY,
45
loopRecipesForElves,
56
Recipes,
67
totalDigitsInArray
@@ -69,5 +70,71 @@ describe('--- Day 14: Chocolate Charts ---', () => {
6970
expect(expected).to.equal(actual)
7071
})
7172
})
73+
describe('calculateXAfterY(x, y, recipe, elves)', () => {
74+
it('predicts the next X results after the elves have executed Y', () => {
75+
const elves = [3, 7]
76+
const recipes = new Recipes(elves[0])
77+
let actual = ''
78+
79+
elves.forEach((elf, idx) => {
80+
if (idx === 0) {
81+
elves[0] = recipes.head
82+
} else {
83+
elves[idx] = recipes.addRecipe(elf)
84+
}
85+
})
86+
87+
actual = calculateXAfterY(10, 9, recipes, elves)
88+
expect(actual).to.equal('5158916779')
89+
})
90+
it('predicts the next X results after the elves have executed Y', () => {
91+
const elves = [3, 7]
92+
const recipes = new Recipes(elves[0])
93+
let actual = ''
94+
95+
elves.forEach((elf, idx) => {
96+
if (idx === 0) {
97+
elves[0] = recipes.head
98+
} else {
99+
elves[idx] = recipes.addRecipe(elf)
100+
}
101+
})
102+
103+
actual = calculateXAfterY(10, 5, recipes, elves)
104+
expect(actual).to.equal('0124515891')
105+
})
106+
it('predicts the next X results after the elves have executed Y', () => {
107+
const elves = [3, 7]
108+
const recipes = new Recipes(elves[0])
109+
let actual = ''
110+
111+
elves.forEach((elf, idx) => {
112+
if (idx === 0) {
113+
elves[0] = recipes.head
114+
} else {
115+
elves[idx] = recipes.addRecipe(elf)
116+
}
117+
})
118+
119+
actual = calculateXAfterY(10, 18, recipes, elves)
120+
expect(actual).to.equal('9251071085')
121+
})
122+
it('predicts the next X results after the elves have executed Y', () => {
123+
const elves = [3, 7]
124+
const recipes = new Recipes(elves[0])
125+
let actual = ''
126+
127+
elves.forEach((elf, idx) => {
128+
if (idx === 0) {
129+
elves[0] = recipes.head
130+
} else {
131+
elves[idx] = recipes.addRecipe(elf)
132+
}
133+
})
134+
135+
actual = calculateXAfterY(10, 2018, recipes, elves)
136+
expect(actual).to.equal('5941429882')
137+
})
138+
})
72139
})
73140
})

2018/day-14/solution.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
const {
2+
calculateXAfterY,
3+
Recipes
4+
} = require('./recipes')
5+
6+
const input = 540561
7+
8+
const elves = [3, 7]
9+
const recipes = new Recipes(elves[0])
10+
11+
elves.forEach((elf, idx) => {
12+
if (idx === 0) {
13+
elves[0] = recipes.head
14+
} else {
15+
elves[idx] = recipes.addRecipe(elf)
16+
}
17+
})
18+
19+
const answer = calculateXAfterY(10, input, recipes, elves)
20+
const answer2 = ''
21+
22+
console.log(`-- Part 1 --`)
23+
console.log(`Answer: ${answer}`)
24+
console.log(`-- Part 2 --`)
25+
console.log(`Answer: ${answer2}`)

0 commit comments

Comments
 (0)