1
0
Fork 0
mirror of https://github.com/Luzifer/aoc2019.git synced 2024-10-18 03:04:19 +00:00
aoc2019/day02.go
Knut Ahlers d11d14dfb9
Add solution for Day 9
Signed-off-by: Knut Ahlers <knut@ahlers.me>
2019-12-09 18:48:40 +01:00

75 lines
1.6 KiB
Go

package aoc2019
import (
"io/ioutil"
"strings"
"github.com/pkg/errors"
)
func parseDay02Intcode(code string) ([]int64, error) { return parseIntcode(code) }
func executeDay02Intcode(code []int64) ([]int64, error) {
return executeIntcode(code, nil, nil) // Day02 intcode may not contain I/O
}
func solveDay2Part1(inFile string) (int64, error) {
raw, err := ioutil.ReadFile(inFile)
if err != nil {
return 0, errors.Wrap(err, "Unable to read input")
}
code, err := parseDay02Intcode(strings.TrimSpace(string(raw)))
if err != nil {
return 0, errors.Wrap(err, "Unable to parse Intcode")
}
// Modify data for "1202 program alarm"
code[1] = 12
code[2] = 2
// Execute Intcode
code, err = executeDay02Intcode(code)
if err != nil {
return 0, errors.Wrap(err, "Unable to execute Intcode")
}
return code[0], nil
}
func solveDay2Part2(inFile string) (int64, error) {
raw, err := ioutil.ReadFile(inFile)
if err != nil {
return 0, errors.Wrap(err, "Unable to read input")
}
const expectedResult int64 = 19690720
for noun := int64(0); noun < 100; noun++ {
for verb := int64(0); verb < 100; verb++ {
// Re-initialize "memory"
code, err := parseDay02Intcode(strings.TrimSpace(string(raw)))
if err != nil {
return 0, errors.Wrap(err, "Unable to parse Intcode")
}
// Modify code
code[1] = noun
code[2] = verb
// Execute Intcode
code, err = executeDay02Intcode(code)
if err != nil {
return 0, errors.Wrap(err, "Unable to execute Intcode")
}
if code[0] == expectedResult {
return 100*noun + verb, nil
}
}
}
return 0, errors.New("No valid result was found")
}