Advent of Code 2022 Day 10
Part 1
 Ugh, assembly code
 Tracking each cycle: initial thoughts
 My algorithm in JavaScript
 My algorithm in correct pseudocode
Ugh, assembly code
 Thankfully, there are only two operations
 And only a few hundred
cycles
are needed to be run  So it seems doable for me
However, I sense a performance test in Part 2 that I will find more confusing and/or too difficult to troubleshoot and solve.
Hopefully I can earn at least one gold star today, too!
Tracking each cycle: initial thoughts

addx
takes two cycles 
noop
takes one cycle  I need to complete
220
cycles  And I need to know the value of
X
at the end of each cycle
Hmmmm.
I think I need these variables:
Set X to 1
Set cycles to 0
Set timer to 0
Set line to 1
Set records to an empty list
Set checkpoints to [20, 60, 100, 140, 180, 220]
I need to iterate through the input line by line, but some lines will need an additional turn
, so I can't use a normal loop. I think I'll need a while
loop.
I'm still not sure what order of operations I need inside the while
loop.
Here's where my head is at before moving to write code:
While cycles <= 220
Increment cycles by 1
If cycles is in checkpoints
Add the product of X and cycles to records
If timer is 0
Increment line
Check the current operation (at index line)
If it is noop
Set timer to 1
Else  it is addx
Set timer to 2
Else  timer is > 0
Decrement timer by 1
I know it's not right. But I need to start playing with code. Writing pseudocode isn't helping.
My algorithm in JavaScript
let program = input
.split('\n')
.map(line => {
if (line.split(' ').length == 1) {
return false
} else {
return +line.split(' ')[1]
}
})
let X = 1
let cycle = 0
let index = 1
let records = []
let timer = 1
let checkpoints = [20,60,100,140,180,220]
while (cycle <= 220) {
if (checkpoints.includes(cycle)) records.push(cycle * X)
cycle++
timer
if (timer == 0) {
X += typeof program[index] == 'number' ? program[index] : 0
index++
timer += typeof program[index] == 'boolean' ? 1 : 2
}
}
return records.reduce((sum, num) => sum + num)
My algorithm in correct pseudocode
Set X to 1
Set cycles to 0
Set timer to 1
Set line to 1
Set records to an empty list
Set checkpoints to [20, 60, 100, 140, 180, 220]
While cycles <= 220
If cycles is in checkpoints
Add the product of X and cycles to records
Increment cycles by 1
Decrement timer by 1 unless doing that would cause it to become less than 1  in which case, keep it 0
If timer is 0
Increment X depending on the operation:
If it's noop, by 0
If it's addx, by the number
Move forward one operation
Increment timer depending on the nowcurrent operation:
If it's noop, by 1
If it's addx, by 2
Return the sum of all values in records
Part 2
 Enter: position tracker, range and modulo
 My updated algorithm in JavaScript
Enter: position tracker, range and modulo
 Position tracker will go from 0 to 239, one less than cycle
 I need it to go from 039 six times
 And I'll check whether it is one less than, equal to, or one greater than the value of
X
each cycle
Hopefully this will be as easy as it seems to incorporate into my Part 1 algorithm.
My updated algorithm in JavaScript
// Existing variables
let pixels = []
while (cycle < 240) {
cycle++
timer
if (timer == 0) {
X += typeof program[index] == 'number' ? program[index] : 0
index++
timer += typeof program[index] == 'boolean' ? 1 : 2
}
pixels.push(
[X  1, X, X + 1].includes((cycle  1) % 40) ? '#': '.'
)
}
let CRT = []
for (let i = 0; i < pixels.length; i += 40) {
CRT.push(pixels.slice(i, i + 40).join(''))
}
return CRT.join('\n')
I used the example input to get it to output the expected 40x6 pixel grid.
Then I swapped to my input and got the expected 8capitalletter code!
I did it!!
 I solved both parts!
 I used a combination of pseudocode and trialanderror programming to work my way toward the answer to Part 1!
 I only had to make a few edits and additions to reveal the answer to Part 2!
I've made a few messagerevealing simulators in past years.
Thus, I'm not too excited to make another one for this article.
I'll hang my head high having earned two stars and rest my head for tomorrow's puzzle.
Top comments (0)