-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday2-2.ts
48 lines (41 loc) · 1.01 KB
/
day2-2.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import * as fs from "fs"
const targetOutput = 19690720
function run(noun: number, verb: number) {
const mem = fs.readFileSync("input-day2.txt", "utf8")
.split(",")
.map(l => parseInt(l))
mem[1] = noun
mem[2] = verb
let instrPtr = 0
while(true) {
const opCode = mem[instrPtr]
switch(opCode) {
case 1:
add(mem, mem[instrPtr+1], mem[instrPtr+2], mem[instrPtr+3])
break
case 2:
mul(mem, mem[instrPtr+1], mem[instrPtr+2], mem[instrPtr+3])
break
case 99:
return mem[0]
break
default: throw new Error(`unknown instruction ${mem[instrPtr]}`)
}
instrPtr += 4
}
}
function add(mem: number[], src1: number, src2: number, dst: number) {
mem[dst] = mem[src1] + mem[src2]
}
function mul(mem: number[], src1: number, src2: number, dst: number) {
mem[dst] = mem[src1] * mem[src2]
}
for(let noun = 0; noun < 100; noun++) {
for(let verb = 0; verb < 100; verb++) {
const output = run(noun, verb)
if(output === targetOutput) {
console.log(100*noun + verb)
process.exit(0)
}
}
}