Skip to content

Instantly share code, notes, and snippets.

@bozdoz
Created November 17, 2025 21:22
Show Gist options
  • Select an option

  • Save bozdoz/adde80952d9880618db39ace9d7ad986 to your computer and use it in GitHub Desktop.

Select an option

Save bozdoz/adde80952d9880618db39ace9d7ad986 to your computer and use it in GitHub Desktop.
AOC 2019 / Day 5
package main
func intcode(data []int, input int) (ans []int) {
for i := 0; i < len(data); {
opcode := data[i+0]
if opcode == 99 {
// exit
return
}
a := data[i+1]
b := data[i+2]
// might not have a c?
c := data[i : i+4][3]
switch opcode {
case 1:
data[c] = data[a] + data[b]
i += 4
case 2:
data[c] = data[a] * data[b]
i += 4
case 3:
// give input
data[a] = input
i += 2
case 4:
ans = append(ans, data[a])
i += 2
case 5:
if data[a] != 0 {
// jump if not 0
i = data[b]
} else {
i += 3
}
case 6:
if data[a] == 0 {
i = data[b]
} else {
i += 3
}
case 7:
if data[a] < data[b] {
data[c] = 1
} else {
data[c] = 0
}
i += 4
case 8:
if data[a] == data[b] {
data[c] = 1
} else {
data[c] = 0
}
i += 4
default:
// parameter modes
oc := opcode % 10
opcode /= 100
amode := opcode % 10
opcode /= 10
bmode := opcode % 10
opcode /= 10
// cmode := opcode % 10
if amode == 0 {
// a is a position
a = data[a]
}
if bmode == 0 && len(data) > b {
// position
b = data[b]
}
switch oc {
case 1:
data[c] = a + b
i += 4
case 2:
data[c] = a * b
i += 4
case 3:
// give input
data[a] = input
i += 2
case 4:
ans = append(ans, a)
i += 2
case 5:
if a != 0 {
// jump if not 0
i = b
} else {
i += 3
}
case 6:
if a == 0 {
i = b
} else {
i += 3
}
case 7:
if a < b {
data[c] = 1
} else {
data[c] = 0
}
i += 4
case 8:
if a == b {
data[c] = 1
} else {
data[c] = 0
}
i += 4
}
}
}
return
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment