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