aboutsummaryrefslogtreecommitdiff
path: root/seven.go
diff options
context:
space:
mode:
authorj-james2020-12-01 05:17:13 +0000
committerj-james2020-12-01 05:17:13 +0000
commitb23ea9372ae92b2add77213393041c62cba9a75b (patch)
tree0e4deb435849ff5a5fb0a4ce93bcd5beac5f386c /seven.go
parent73f5728472dc5ffba612b0aead3126c63dd8b7d2 (diff)
Move 2019 Advent of Code work into its own folder
Diffstat (limited to 'seven.go')
-rw-r--r--seven.go141
1 files changed, 0 insertions, 141 deletions
diff --git a/seven.go b/seven.go
deleted file mode 100644
index d71d827..0000000
--- a/seven.go
+++ /dev/null
@@ -1,141 +0,0 @@
-package main
-
-import (
- "fmt"
- "os"
- "strconv"
-)
-
-func main() {
- var memory []int
- size := 0
- for i := 1; i < len(os.Args); i++ {
- arg, err := strconv.Atoi(os.Args[i])
- if err != nil {
- panic(err)
- }
- memory = append(memory, arg)
- size++
- }
- // fmt.Println(execute(memory, size))
- // noun, verb := etucexe(memory, size, 19690720)
- // fmt.Println(100*noun + verb)
- // execute(memory, size)
- fmt.Println(thrust(memory, size))
-}
-
-func thrust(memory []int, size int) int { // 120 total
- max := 0
- for a := 0; a < 5; a++ {
- for b:=0; b < 4; b++ {
- for c:=0;
- }
-
-
-
- a, b, c, d, e := i/10000, i/1000%10, i/100%100, i/10%1000, i%10000
- a = execute(memory, size) // stdin fill this with a, 0
- b = execute(memory, size) // stdin fill this with b, 0
- c = execute(memory, size) // stdin fill this with c, 0
- d = execute(memory, size) // stdin fill this with d, 0
- e = execute(memory, size) // stdin fill this with e, 0
- if (e > max) {
- max = e
- }
- return max
-}
-
-func split(memory []int, i, size int) (int, int, int) {
- mode := memory[i] / 100
- three, two, one := i+3, i+2, i+1
- if size-i > 1 {
- if mode%10 == 0 {
- one = memory[i+1]
- }
- if size-i > 2 {
- if mode/10%10 == 0 {
- two = memory[i+2]
- }
- if size-i > 3 {
- if mode/100 == 0 {
- three = memory[i+3]
- }
- }
- }
- }
- return three, two, one
-}
-
-func execute(memory []int, size int) []int {
- for i := 0; i < len(memory); {
- opcode := memory[i] % 100
- three, two, one := split(memory, i, size)
- switch opcode {
- case 1: // adds
- memory[three] = memory[one] + memory[two]
- i += 4
- case 2: // multiplies
- memory[three] = memory[one] * memory[two]
- i += 4
- case 3: // input
- var input int
- fmt.Print("Input: ")
- resp, err := fmt.Scanf("%d", &input)
- if err != nil {
- fmt.Println(resp, err)
- os.Exit(0)
- }
- memory[one] = input // not affected by modes
- i += 2
- case 4: // output
- fmt.Println(memory[one])
- i += 2
- case 5: // jump-if-true
- if memory[one] != 0 {
- i = memory[two] // ???
- } else {
- i += 3
- }
- case 6: // jump-if-false
- if memory[one] == 0 {
- i = memory[two] // ???
- } else {
- i += 3
- }
- case 7: // less than
- if memory[one] < memory[two] {
- memory[memory[i+3]] = 1
- } else {
- memory[memory[i+3]] = 0
- }
- i += 4
- case 8: // equals
- if memory[one] == memory[two] {
- memory[memory[i+3]] = 1
- } else {
- memory[memory[i+3]] = 0
- }
- i += 4
- case 99: // terminate
- return memory
- default:
- fmt.Println("Unsupported code", opcode, "at", i)
- os.Exit(0)
- }
- }
- return memory
-}
-
-func etucexe(memory []int, size, output int) (int, int) {
- var volatile []int
- for i := 0; i < len(memory); i++ {
- for j := 0; j < len(memory); j++ {
- volatile = append([]int(nil), memory...) // reset volatile to memory
- volatile[1], volatile[2] = i, j
- if execute(volatile, size)[0] == output {
- return i, j
- }
- }
- }
- return -1, -1
-}