Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "errors"
- "fmt"
- "io/ioutil"
- "strconv"
- "strings"
- )
- const (
- expected = 19690720
- tryRange = 1000
- )
- func inputToInt(fileName string) ([]int64, error) {
- allInput, err := ioutil.ReadFile(fileName)
- if err != nil {
- return nil, err
- }
- intList := make([]int64, 0)
- for _, v := range strings.Split(string(allInput), ",") {
- intVal, err := strconv.ParseInt(v, 10, 64)
- if err != nil {
- return nil, err
- }
- intList = append(intList, intVal)
- }
- return intList, nil
- }
- type intCode struct {
- opCode int64
- srcPos1 int64
- srcPos2 int64
- destPos int64
- }
- func loadOps(data []int64, pos int) intCode {
- if pos+4 >= len(data) {
- return intCode{opCode: data[pos]}
- }
- return intCode{data[pos], data[pos+1], data[pos+2], data[pos+3]}
- }
- func doMultOp(data []int64, srcpos1 int64, srcpos2 int64, dstpos int64) {
- data[dstpos] = data[srcpos1] * data[srcpos2]
- }
- func doAddOp(data []int64, srcpos1 int64, srcpos2 int64, dstpos int64) {
- data[dstpos] = data[srcpos1] + data[srcpos2]
- }
- func performOps(data []int64) error {
- for i := 0; i < len(data); i += 4 {
- op := loadOps(data, i)
- dLen := int64(len(data))
- if op.srcPos1 >= dLen || op.srcPos2 >= dLen || op.destPos >= dLen {
- return errors.New("Out of bounds")
- }
- if op.opCode == 1 {
- doAddOp(data, op.srcPos1, op.srcPos2, op.destPos)
- }
- if op.opCode == 2 {
- doMultOp(data, op.srcPos1, op.srcPos2, op.destPos)
- }
- if op.opCode == 99 {
- return nil
- }
- }
- return nil
- }
- func main() {
- saved, err := inputToInt("input.txt")
- if err != nil {
- fmt.Println("Wimp wimp")
- }
- for noun := 0; noun < tryRange; noun++ {
- for verb := 0; verb < tryRange; verb++ {
- runData := make([]int64, len(saved))
- copy(runData, saved)
- runData[1] = int64(noun)
- runData[2] = int64(verb)
- err = performOps(runData)
- if err != nil {
- continue
- }
- if runData[0] == expected {
- fmt.Println("Found solution (verb, noun) =", verb, noun, ". (100 * noun + verb)=", 100*noun+verb)
- return
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement