Untitled
unknown
javascript
3 years ago
1.6 kB
12
Indexable
let use_test_input = Deno.args.join('').match(/test/)?.[0]
let file = './input' + (use_test_input == "test" ? '.test' : '')
let part_1_or_2 = Deno.args.join('').match(/\d/)?.[0]
let input;
input = await Deno.readTextFile(file)
input = input.split('\n')
let cycles = 1
let register = 1
let signals = []
let multiplier = 1
let screen = new Array(6 * 40).fill('.')
input.forEach(line => {
let op = line == 'noop\r' ? 'noop' : 'addx'
let [_, number] = line.split(' ')
number = parseInt(number)
add_cycle(op, number)
function add_cycle(op, addx_arg = 0, on_cycle_num = 1) {
const row = Math.floor(cycles/40)
const x_pos = (register + (row * 40))
const draw_center = cycles-1 == x_pos
const draw_left = cycles-1 == x_pos - 1
const draw_right = cycles-1 == x_pos + 1
let does_a_pixel_light_up = draw_center || draw_left || draw_right
if(does_a_pixel_light_up) screen[cycles -1] = '#'
if(on_cycle_num == 2) {
register = register + addx_arg
}
cycles = cycles + 1
if(20 * multiplier == cycles && multiplier < 12) {
signals.push({cycles, register, signal_strength: cycles * register})
multiplier = multiplier + 2
}
if(op == 'addx' && on_cycle_num == 1) return add_cycle('addx', addx_arg, 2)
}
})
let part1 = signals.reduce((acc, cur) => { return acc+cur.signal_strength}, 0)
let part2 = '\n' + screen.join('').match(/[\.#]{40}/g).join('\n')
let result = part_1_or_2 == '1' ? part1 : part2
console.log(
`Part ${part_1_or_2} ${use_test_input ? 'Test ' : ''}Results: ` +
'\x1b[33m%s\x1b[0m',
result
)Editor is loading...