aboutsummaryrefslogtreecommitdiff
path: root/2019
diff options
context:
space:
mode:
authorj-james2020-12-01 05:17:13 +0000
committerj-james2020-12-01 05:17:13 +0000
commitb23ea9372ae92b2add77213393041c62cba9a75b (patch)
tree0e4deb435849ff5a5fb0a4ce93bcd5beac5f386c /2019
parent73f5728472dc5ffba612b0aead3126c63dd8b7d2 (diff)
Move 2019 Advent of Code work into its own folder
Diffstat (limited to '2019')
-rw-r--r--2019/eight.go87
-rw-r--r--2019/five.go131
-rw-r--r--2019/four.go68
-rw-r--r--2019/input/eight.txt1
-rw-r--r--2019/input/five.txt1
-rw-r--r--2019/input/four.txt1
-rw-r--r--2019/input/nine.txt1
-rw-r--r--2019/input/one.txt100
-rw-r--r--2019/input/seven.txt1
-rw-r--r--2019/input/six.txt1107
-rw-r--r--2019/input/ten.txt20
-rw-r--r--2019/input/three.txt2
-rw-r--r--2019/input/two.txt1
-rw-r--r--2019/nine.go166
-rw-r--r--2019/one.go40
-rw-r--r--2019/seven.go141
-rw-r--r--2019/six.go25
-rw-r--r--2019/ten.go47
-rw-r--r--2019/three.go156
-rw-r--r--2019/two.go66
20 files changed, 2162 insertions, 0 deletions
diff --git a/2019/eight.go b/2019/eight.go
new file mode 100644
index 0000000..74be0e1
--- /dev/null
+++ b/2019/eight.go
@@ -0,0 +1,87 @@
+package main
+
+import (
+ "fmt"
+ "io/ioutil"
+ "os"
+ "strconv"
+)
+
+func main() {
+ if len(os.Args) < 2 {
+ panic("runtime error: missing operand")
+ }
+ file, err := ioutil.ReadFile(os.Args[1])
+ if err != nil {
+ panic(err)
+ }
+ image := sliceify(file, 25, 6, len(file)/(25*6))
+
+ checksum(image)
+ decode(image)
+}
+
+func sliceify(file []byte, width int, height int, depth int) [][][]int {
+ var image [][][]int
+ pointer := 0
+
+ for i := 0; i < depth; i++ {
+ var b [][]int
+ for j := 0; j < height; j++ {
+ var a []int
+ for k := 0; k < width; k++ {
+ element, err := strconv.Atoi(string(file[pointer]))
+ if err != nil {
+ panic(err)
+ }
+ a = append(a, element)
+ pointer++
+ }
+ b = append(b, a)
+ }
+ image = append(image, b)
+ }
+ return image
+}
+
+func count(layer [][]int, val int) int {
+ total := 0
+ for i := 0; i < len(layer); i++ {
+ for j := 0; j < len(layer[i]); j++ {
+ if layer[i][j] == val {
+ total++
+ }
+ }
+ }
+ return total
+}
+
+func checksum(image [][][]int) {
+ min := count(image[0], 0)
+ layer := -1
+ for i := 0; i < len(image); i++ {
+ total := count(image[i], 0)
+ if total < min {
+ min = total
+ layer = i
+ }
+ }
+ fmt.Println(count(image[layer], 1) * count(image[layer], 2))
+}
+
+func decode(image [][][]int) {
+ for i := 0; i < len(image[0]); i++ {
+ for j := 0; j < len(image[0][0]); j++ {
+ for k := 0; k < len(image); k++ {
+ if image[k][i][j] == 0 {
+ fmt.Print(" ")
+ break
+ } else if image[k][i][j] == 1 {
+ fmt.Print("X")
+ break
+ }
+ }
+ }
+ fmt.Println()
+ }
+}
diff --git a/2019/five.go b/2019/five.go
new file mode 100644
index 0000000..9ea4699
--- /dev/null
+++ b/2019/five.go
@@ -0,0 +1,131 @@
+package main
+
+import (
+ "fmt"
+ "io/ioutil"
+ "os"
+ "strconv"
+)
+
+func main() {
+ var memory []int
+ start, size := 0, 0
+ if len(os.Args) < 2 {
+ panic("runtime error: missing operand")
+ }
+ file, err := ioutil.ReadFile(os.Args[1])
+ if err != nil {
+ panic(err)
+ }
+ for i := 0; i < len(file); i++ {
+ if file[i] == ',' || file[i] == '\n' {
+ arg, err := strconv.Atoi(string(file[start:i])) // i-1??
+ if err != nil {
+ panic(err)
+ }
+ memory = append(memory, arg)
+ start = i + 1
+ size++
+ }
+ }
+
+ // fmt.Println(execute(memory, size))
+ // noun, verb := etucexe(memory, size, 19690720)
+ // fmt.Println(100*noun + verb)
+ execute(memory, size)
+}
+
+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
+}
diff --git a/2019/four.go b/2019/four.go
new file mode 100644
index 0000000..7c901dc
--- /dev/null
+++ b/2019/four.go
@@ -0,0 +1,68 @@
+package main
+
+import (
+ "fmt"
+ "io/ioutil"
+ "math"
+ "os"
+ "strconv"
+)
+
+func main() {
+ smallest, largest, total, details := -1, -1, 0, 0
+ if len(os.Args) < 2 {
+ panic("runtime error: missing operand")
+ }
+ file, err := ioutil.ReadFile(os.Args[1])
+ if err != nil {
+ panic(err)
+ }
+ for i := 0; i < len(file); i++ {
+ if string(file[i]) == "-" {
+ smallest, err = strconv.Atoi(string(file[0:i]))
+ if err != nil {
+ panic(err)
+ }
+ largest, err = strconv.Atoi(string(file[i+1 : len(file)-1]))
+ if err != nil {
+ panic(err)
+ }
+ break
+ }
+ }
+
+ for i := smallest; i <= largest; i++ {
+ if criteria(i, false) {
+ total++
+ }
+ if criteria(i, true) {
+ details++
+ }
+ }
+ fmt.Println(total)
+ fmt.Println(details)
+}
+
+func criteria(password int, stage bool) bool {
+ prev := 0
+ for i := 0; i < 6; i++ {
+ if password/int(math.Pow(10, float64(5-i)))%10 < prev {
+ return false
+ }
+ prev = password / int(math.Pow(10, float64(5-i))) % 10
+ }
+ pascii := strconv.Itoa(password)
+ for i := 0; i < len(pascii)-1; i++ {
+ if string(pascii[i]) == string(pascii[i+1]) {
+ if !(len(pascii)-i > 2 && string(pascii[i]) == string(pascii[i+2])) {
+ if !stage { // Gross hack
+ return true
+ }
+ if !(i > 0 && string(pascii[i]) == string(pascii[i-1])) {
+ return true
+ }
+ }
+ }
+ }
+ return false
+}
diff --git a/2019/input/eight.txt b/2019/input/eight.txt
new file mode 100644
index 0000000..046a733
--- /dev/null
+++ b/2019/input/eight.txt
@@ -0,0 +1 @@
+221222222022222222222222020222222222022220012102002220222222222222222222220122202222022122222222220212222122222222222222222202221222222222102222212222220222222222222222222222220222222222022220222102122220222222222222222222222122212222122122222222220202222222222222222222222212220222222222002222222222222222222122222222222222121222222222222220012202222221222222222222222222221122212222122222222222222202222222222222222222222222221222222222002222202222222222022222222222222222220222122222122221202102112222222222222222222222220022212022022222222222222212222022222222222222222202221022222222022222202222220222122022222222222222222222122222122220012002022221222222222222222222221222202022022122222222222222222022222222222222222222220022222222222222202222222222222022222222222222222222222222022222122122222221222222222222222222222222212122122122222222220222222122202222222222222222220222222222002222222222221222122022222222222222220222222222122221122022022221222222222222222222220222212122122122222222222202222222212222222222222202221220222222022222202222220222222222222222222222220222122222222222012012012220222222222222222222222022222222222022222222221212222122212222222222222202222021222222102222202222220222122222222222222222221222122222122220212112222220222220222222222222221022202222022022222222220202222122202222222222222212222221222222122222212222220222222222222222222221222222022222222221102102222221222222222222222222221022212122222022222222222202222222202222222222222222222220212222222222222222220222022222222222222220122222022222122220112022222220222222222222222222221022202222122122222122220222222022212222212222222222220220202222012222202222220122022122222222222221220222122222022221212102202221222221222222222222220122222022122122222222222222222222222222202220222212122121212222102222222222212222022022222222221222120222022222122220112002202220222220222222222222202222222122022122222122220212222122222222212221222202220222222222002222222222220122022222222222222220120222122222022222122212002222222221222222222222210222212222122222222121222202222122222222202220222202121222222222102222212222220022122022222222220222022222222222122222212222202222222220222222222222212022222122022022222121220212222222222220002222222212121221212222202222202222212222122022222222221222220222222222122222102112012221222222222222222222221122212122122222222221221222222122212221122220222212122221202222112222222222222022022222222222221220122222022222222220122202202220222222222222222222212222212122022122222021221202222222202221022222222202022220212222202222222222200022022222222222220221022222222222022221002222022220222221222222222222221222222222222122222222222202222122212221012220222211222021222222102222222222212122122122222222220220221222222222022221202222102220222221222222222222211122202122022122222220221212222222202222112221222201222121202222022222222222200122222222222222221221221222222222122221012112212222222222222222222222212222202222222122220220220212222122202221212221222221021222222222002222202222201222222122222222222220222222122222222222002022212222222220222222222222201122202022022022220220222202222222222220112221222212121120202222022222202222221022222222222222222221022222222222022220102102222221222222222222222222211222202122022022222021220222222122212220022221222220222220222222212222202222211122022222222222222221220222222222122220122202102220222222222222222222220122212222122122220122220202222122222220212221222220121022212222000222222222212022122222222222221221122222222222122222202202102220222220220222221222211022222022022222220020220212222022212220120221122200221220202222022222202222220122022022222222200220220222122222122222012212202222222221220222220022201122202222122222220121221222222022202221121220222200220222212222220222212222222122122222222222222222222222222222222221122122022220022220221222220022211222202222122122222122220222222022212220100220022220222222222222101222222222210122222222222222200222020222122222122220012002022220222220221222221122211022212222222122220021220202222222212221100221122221221120202222212222212222201022222022222222202220122222022222122221222122002222022221221222222222200222222122122122220020221222222122212221020220022211220121202222101222212222210122022022222222200222220222222222022220012012022221122221222222220222212022202122122122220120222202222222222222010220022211221122022222210222212222220222122222222222221222022222022222022222022112022222122221221222220222201122202222022222222222222202222222212222000221022212022120202222012222222222212122122022222222212221022222022222122221102202102220122220220222220022222222222122022122221121222212222122202220120212222211022021112222212222222222201222022022222222212221221222222222222222012122102222122220222222221022202022222222022022220021221202222222202222201212122211222221222222222222212222201022122122222222200221121222122222122222002202102220222220220222222122201222212022222122220122221222222022212222212201022222121122222222100222202222212022122222222222210220022222022222222221122002222220122220221222222222222122212122122022222121220222222222202220010211022212121021002222202222012222222122122022222222220222022222122222022221002112202220222221221222220022210022222122022022221222221212222122202222202210022220122120112222002222102222220122122022222222201222221222022222022221112112102220222222220222221222220122212122122122221122221212222122212221120202122210120220102222221222012222202122022022222222211222121222022222022221122222122221222222201222222022221022212122122222220222221202222222222220110222022201121222202222211222202222211222122122222222211221021222122222122220112122002222222221202222220022201122202222222122222022222202222222222222101212222220221221122222021222012222200222122122222222201221022222122222022220012002002221122220222222220022212222212222222222220220021212222122222220001201022222122022122222110222202222221222222022222222202222220222022222022222002102222222022222221222222222201122212022022022220220120202222122222222211200122200020222212222222222022222200222222022222222201221120222222222022222122112012222122220211222222022200122212022122122221222020202222022212221012202122201222122122222220222102222220122222022222222210221122222022222202220002102112222222221202222222222211022222022222022220220220202222122222222101222022212122121102222110222122222212122122122222222212220121222022222122221002222202220122221220222221022212022212022122222221022122212222122212222220202122220120022122222201222112222210122222022222222221221221222222222102222222012122222222222212222220022202222022222222122221020122202222222222222102220122210120122002222212222202222201122122122222222201221220222222202112222202102002222022222211221221022222122212022222222221120220212022022212222222221022212221221122222211222222222200022122022222222222221122222222212122221012122012222022220212220222222222122212122122022221121220222222222202222110202002220120021122222110222202122210022022022222222201221222222122212212220002122002120122221221222221122201022202222022222221020021212222222202220002210112220220221102222211222212022220122222222222222200220020222122202012221112102102022122222200201222122210022122022022022221220222202122122202222211222212202022120012222101222002122201122022222222222222220122222022202212221022112202220122220221201221022210222202122022222220022222202122222222221120202022222020022122222202222212022202122222212222222221221220222022212122220022002022021122222212212221022201222112122022022222122220212122022222220001211202220220021212222001222122122210022122002222222221222121222122222102222222202002222122220200211221022202222112022022022220122221212022222222222002200022211122022222222222222202122202122022012222220222222121222220222212221002112222222122220202220221122221222201022222222221220120202122022202222200201012211022022102222100222122122202222222102222220202221022222220212002221202102012022212220201202222022210022022022122222220020020202222122212221222011002211120122122222021222022122201222122002222222200222222222220222202221122022102021221221212212221122210122022122022122222020022222122022222221210012112222221221202222200222212022220122222212222221221220121222221112022221102202212220112220220220221022222022220222022222222020020212222222212220210002022200220122222222212222122220202122222122222221200220121222221202222221112222122021210222220212220122211122020222022122220220220222122022202220012111102212120120102222022222022221221222222022222221221220221222122002102221202202022022210220220220221022200022022122122222221021021222022122212222202101022211221122002222121222222121212222222222202220222220121222020202222221112022012022112221211222222122202222212122122122220022122212022122212222021220122222122120212222022222202022200122022202212220201221120222121122012220212002002221001222202200221022202222112222122222220122220202022022222221012002202201022120122222010222022021201022222012202221212221221222221112222222112102202120102220201210221022201022122122012222221021022222222122212221122002212201121021202222112222022120220122022012212220202222021222121112222222122002112121011220210222220122210222010022022122221021122212222020222222102210212200222022022222021222112221222222122102212220211221022222022212212220112002102021120220210211222222221122111122002022222221021222022221202222012222012221222021112222021222022221200122222212222222221221020222222022212220122222122120112222211221220022222122102222202222222021020212222121212220002002222220121020202222101222122120100222122102202220211222120222120212202221212102202220012221202222221022222222202121022022222220222212222020222221121011112220011022022222200222012220110222122002202221221221120222021202012221022002022021010221221202222022200022011221002122220222020222022122222220220020212201202022122222222222202221110022222212212222201221010222021222122222002202122221110220200212222222201022000220012222221222221212222121202222100211002222200021212222111222212022201122022112212221210222102222021112202220022012122020120210211201220122202122000020002022221022220212022222212221011222022220011021022222210222202120222022022002212202210222020222120022202222102022212122210222201220222222200122212220022022220122221222122022212221001000012222120220102222220222102022110122222122222201122222121222021012212221112102222220110200220222222222200020202121122022222222220202222022222222221010222210101020102222212222212021102022222202222221012220010222021002012220112222212122011211201201221222222120112222222122221020020202122221222222221010022201022222122222221222122020211222221212212200002212000222222012102221122022222121000200212201222022212021011120012222220120022212022120202220201100112222220221102222021222112211122222122022222212011200110222222102002222122202222220222211210200220121200120202220212022222121120222122122222220101100212221110122112222102222222020021222121012202211002212202222122002012220112122112021100202212221221120211220221221112122222221021212122020202220201100022220022220102222202222222012000222220012222222011221222222121212212221102010102220210222222202220022201221110201102022222222221202022121212222220212222201201222122222122222112021000022220022212220000210001222020202212221002202122022110222211221220121212121111002222022221220020222022021202221222011122022011222102222210222212120100122122122202220121222000222022222022222222210002220122222210210220221201022201111202222220220020202222220222220100211002001200122122222120222202202022221120012212210202201010222220022112220102100112221020222211212220221210120101110022022220121122222022220202221221001022101022221112222111222102102111022021102202220010202211222222202112220202022022020020221210200221020210221102222112222221220021222022022212222121212212211121121012222112222102101200102020202222211112202022222221202002021122211202021111200202201221021220022001020202022222020122212022122222220222000012211021122012222111222212011200021022112212212120210112202121122202221112100222122101211202202221021210022201001122022221220120212222221222222002020012011122220122222011222002220000102120222202210211220201202021222102010002221022120101211221222222120220122210210112122220121121212022022212222011010012201010222202222211222212000022102022022202212100212200212221222112112202022022220212202210221220121202020201022202022220120121222222022212220221000012202220020122222220222122121212120022012202220022212210202022022012101022120022222220200221211022220210120101001122022220120020212122020222221010210002200202222012222100222122202012111002022212201200110021222121112011111102220222120012210211200122121210120010202012022220221121202022122212221110002202021100121222222221222212101222102220012212221112222222212222122221010102202012220002220202202222222200121100222021022122021222222122122212220220022212012011122122222112222212202011100200222222222021112210202022202002120002201022122220211220201120122220121112212122022222021121212222120222222021210002120110020022222221222222000020021211112202222200000001222222222102000002222122121010211221110120122222022001221010222120022222202222021202221020011222200002022022222211222012120120020012222212201220012002202220022010112022111122121020201201000002021220122021001000122022021122222122121202221002201012011222222022222102222012012022220110022202220221121120212221012002200012020002020201202221022101110221021222021122122121000122212222221202221221011122021102221022222101212212021000100000212222221122112100212121122100121222001102220121202220220101110211122102010122222222222121202122122202222202101202120212021012222220202112102021000021002212200002221211212022002001112212110012121112221222101112211222100211211122222120112122212022121222022220011012101020020012222100212002001000120102102202201121000211212020102211222122202202121122221202112220102202002122211120022102101000202122120222121011011200101110221212222122112012012021201201022212220110120120222121112102120222202122022002212221000012122202222001110202122112112020222022022202122011001111211112021202222211002022212011210122202222201011011212212221122000210212121012020221220212002022102201212120202202122120112001212022220212220210202210121121022112222120122012222221202201222202201122201111212022101120022022210002120111212201120022010212021211222211022202010100212222220202122011100112100220020122222010102202122100110201202202211212201010222122122021220022111102122011120202211100121202120122001112222211212022212222022212222101111121022000020102222112122222202011200211002202200222002201202122222012022122022111121221012211202210210221122201202122122122201011222022220202220211112201211110221202222210102002002210221220212202222010212011202220112102210112101220121011211222010201111201200012020111122202100102202022200212012220012021002211220102222121022212202102100010212202201001012222222120221010020102021202121110010212121110200210121121210020122102002120202222210212121012222010012101222122222010012112011120220200201100101000011111000001020000010110011122111011121101102000010112021002010011100202212110010000002121101010110222221001011100100210100021201
diff --git a/2019/input/five.txt b/2019/input/five.txt
new file mode 100644
index 0000000..a97e6c1
--- /dev/null
+++ b/2019/input/five.txt
@@ -0,0 +1 @@
+3,225,1,225,6,6,1100,1,238,225,104,0,1101,65,39,225,2,14,169,224,101,-2340,224,224,4,224,1002,223,8,223,101,7,224,224,1,224,223,223,1001,144,70,224,101,-96,224,224,4,224,1002,223,8,223,1001,224,2,224,1,223,224,223,1101,92,65,225,1102,42,8,225,1002,61,84,224,101,-7728,224,224,4,224,102,8,223,223,1001,224,5,224,1,223,224,223,1102,67,73,224,1001,224,-4891,224,4,224,102,8,223,223,101,4,224,224,1,224,223,223,1102,54,12,225,102,67,114,224,101,-804,224,224,4,224,102,8,223,223,1001,224,3,224,1,224,223,223,1101,19,79,225,1101,62,26,225,101,57,139,224,1001,224,-76,224,4,224,1002,223,8,223,1001,224,2,224,1,224,223,223,1102,60,47,225,1101,20,62,225,1101,47,44,224,1001,224,-91,224,4,224,1002,223,8,223,101,2,224,224,1,224,223,223,1,66,174,224,101,-70,224,224,4,224,102,8,223,223,1001,224,6,224,1,223,224,223,4,223,99,0,0,0,677,0,0,0,0,0,0,0,0,0,0,0,1105,0,99999,1105,227,247,1105,1,99999,1005,227,99999,1005,0,256,1105,1,99999,1106,227,99999,1106,0,265,1105,1,99999,1006,0,99999,1006,227,274,1105,1,99999,1105,1,280,1105,1,99999,1,225,225,225,1101,294,0,0,105,1,0,1105,1,99999,1106,0,300,1105,1,99999,1,225,225,225,1101,314,0,0,106,0,0,1105,1,99999,108,226,226,224,102,2,223,223,1005,224,329,101,1,223,223,1107,226,677,224,1002,223,2,223,1005,224,344,101,1,223,223,8,226,677,224,102,2,223,223,1006,224,359,101,1,223,223,108,677,677,224,1002,223,2,223,1005,224,374,1001,223,1,223,1108,226,677,224,1002,223,2,223,1005,224,389,101,1,223,223,1007,677,677,224,1002,223,2,223,1006,224,404,1001,223,1,223,1108,677,677,224,102,2,223,223,1006,224,419,1001,223,1,223,1008,226,677,224,102,2,223,223,1005,224,434,101,1,223,223,107,677,677,224,102,2,223,223,1006,224,449,1001,223,1,223,1007,226,677,224,102,2,223,223,1005,224,464,101,1,223,223,7,677,226,224,102,2,223,223,1005,224,479,101,1,223,223,1007,226,226,224,102,2,223,223,1005,224,494,101,1,223,223,7,677,677,224,102,2,223,223,1006,224,509,101,1,223,223,1008,677,677,224,1002,223,2,223,1006,224,524,1001,223,1,223,108,226,677,224,1002,223,2,223,1006,224,539,101,1,223,223,8,226,226,224,102,2,223,223,1006,224,554,101,1,223,223,8,677,226,224,102,2,223,223,1005,224,569,1001,223,1,223,1108,677,226,224,1002,223,2,223,1006,224,584,101,1,223,223,1107,677,226,224,1002,223,2,223,1005,224,599,101,1,223,223,107,226,226,224,102,2,223,223,1006,224,614,1001,223,1,223,7,226,677,224,102,2,223,223,1005,224,629,1001,223,1,223,107,677,226,224,1002,223,2,223,1005,224,644,1001,223,1,223,1107,677,677,224,102,2,223,223,1006,224,659,101,1,223,223,1008,226,226,224,1002,223,2,223,1006,224,674,1001,223,1,223,4,223,99,226
diff --git a/2019/input/four.txt b/2019/input/four.txt
new file mode 100644
index 0000000..693a14b
--- /dev/null
+++ b/2019/input/four.txt
@@ -0,0 +1 @@
+123257-647015
diff --git a/2019/input/nine.txt b/2019/input/nine.txt
new file mode 100644
index 0000000..bb2d334
--- /dev/null
+++ b/2019/input/nine.txt
@@ -0,0 +1 @@
+1102,34463338,34463338,63,1007,63,34463338,63,1005,63,53,1101,0,3,1000,109,988,209,12,9,1000,209,6,209,3,203,0,1008,1000,1,63,1005,63,65,1008,1000,2,63,1005,63,902,1008,1000,0,63,1005,63,58,4,25,104,0,99,4,0,104,0,99,4,17,104,0,99,0,0,1102,32,1,1019,1101,0,500,1023,1101,0,636,1025,1102,36,1,1010,1101,0,29,1013,1102,864,1,1029,1102,21,1,1000,1102,1,507,1022,1102,1,28,1011,1102,38,1,1008,1101,0,35,1004,1101,25,0,1018,1102,24,1,1005,1102,30,1,1009,1102,1,869,1028,1101,0,37,1007,1102,1,23,1017,1102,1,20,1015,1102,1,22,1003,1101,0,39,1001,1102,1,31,1012,1101,701,0,1026,1101,0,641,1024,1101,0,34,1016,1102,1,0,1020,1102,698,1,1027,1102,33,1,1002,1102,26,1,1006,1101,0,1,1021,1101,0,27,1014,109,12,21101,40,0,0,1008,1012,40,63,1005,63,203,4,187,1105,1,207,1001,64,1,64,1002,64,2,64,109,-11,1207,7,37,63,1005,63,223,1105,1,229,4,213,1001,64,1,64,1002,64,2,64,109,14,1206,5,247,4,235,1001,64,1,64,1105,1,247,1002,64,2,64,109,-2,1207,-4,31,63,1005,63,269,4,253,1001,64,1,64,1105,1,269,1002,64,2,64,109,-6,1208,-5,35,63,1005,63,289,1001,64,1,64,1106,0,291,4,275,1002,64,2,64,109,9,21108,41,39,-1,1005,1015,311,1001,64,1,64,1105,1,313,4,297,1002,64,2,64,109,-5,2101,0,-9,63,1008,63,33,63,1005,63,339,4,319,1001,64,1,64,1106,0,339,1002,64,2,64,1205,10,351,4,343,1106,0,355,1001,64,1,64,1002,64,2,64,109,-18,2108,35,9,63,1005,63,375,1001,64,1,64,1105,1,377,4,361,1002,64,2,64,109,18,1205,9,389,1105,1,395,4,383,1001,64,1,64,1002,64,2,64,109,7,21107,42,41,-8,1005,1010,415,1001,64,1,64,1106,0,417,4,401,1002,64,2,64,109,-12,2102,1,0,63,1008,63,29,63,1005,63,437,1106,0,443,4,423,1001,64,1,64,1002,64,2,64,109,3,1208,0,30,63,1005,63,461,4,449,1105,1,465,1001,64,1,64,1002,64,2,64,109,5,1202,-5,1,63,1008,63,31,63,1005,63,489,1001,64,1,64,1106,0,491,4,471,1002,64,2,64,109,15,2105,1,-6,1001,64,1,64,1106,0,509,4,497,1002,64,2,64,109,-10,1206,2,525,1001,64,1,64,1106,0,527,4,515,1002,64,2,64,109,-18,1202,0,1,63,1008,63,39,63,1005,63,553,4,533,1001,64,1,64,1106,0,553,1002,64,2,64,109,1,2107,21,1,63,1005,63,571,4,559,1105,1,575,1001,64,1,64,1002,64,2,64,109,7,2102,1,-8,63,1008,63,39,63,1005,63,601,4,581,1001,64,1,64,1105,1,601,1002,64,2,64,109,2,1201,-7,0,63,1008,63,35,63,1005,63,623,4,607,1106,0,627,1001,64,1,64,1002,64,2,64,109,20,2105,1,-7,4,633,1106,0,645,1001,64,1,64,1002,64,2,64,109,-16,21107,43,44,-4,1005,1011,663,4,651,1105,1,667,1001,64,1,64,1002,64,2,64,109,-11,2107,36,0,63,1005,63,687,1001,64,1,64,1106,0,689,4,673,1002,64,2,64,109,19,2106,0,4,1106,0,707,4,695,1001,64,1,64,1002,64,2,64,109,-14,21108,44,44,6,1005,1015,725,4,713,1105,1,729,1001,64,1,64,1002,64,2,64,109,1,1201,-6,0,63,1008,63,36,63,1005,63,749,1106,0,755,4,735,1001,64,1,64,1002,64,2,64,109,-1,21101,45,0,10,1008,1019,42,63,1005,63,775,1105,1,781,4,761,1001,64,1,64,1002,64,2,64,109,16,21102,46,1,-7,1008,1018,44,63,1005,63,801,1105,1,807,4,787,1001,64,1,64,1002,64,2,64,109,-3,21102,47,1,-4,1008,1018,47,63,1005,63,833,4,813,1001,64,1,64,1105,1,833,1002,64,2,64,109,-14,2108,38,0,63,1005,63,851,4,839,1105,1,855,1001,64,1,64,1002,64,2,64,109,17,2106,0,3,4,861,1106,0,873,1001,64,1,64,1002,64,2,64,109,-31,2101,0,10,63,1008,63,36,63,1005,63,897,1001,64,1,64,1106,0,899,4,879,4,64,99,21101,0,27,1,21101,0,913,0,1106,0,920,21201,1,53612,1,204,1,99,109,3,1207,-2,3,63,1005,63,962,21201,-2,-1,1,21102,940,1,0,1106,0,920,21202,1,1,-1,21201,-2,-3,1,21101,955,0,0,1106,0,920,22201,1,-1,-2,1105,1,966,21201,-2,0,-2,109,-3,2106,0,0
diff --git a/2019/input/one.txt b/2019/input/one.txt
new file mode 100644
index 0000000..199bf78
--- /dev/null
+++ b/2019/input/one.txt
@@ -0,0 +1,100 @@
+81893
+122450
+81968
+135462
+127082
+94016
+100999
+88954
+111500
+89232
+149706
+70377
+114053
+116799
+57368
+117222
+134050
+58097
+113145
+67710
+115082
+109484
+76183
+87768
+85164
+141183
+120410
+85101
+139190
+120483
+89111
+122940
+103010
+127018
+85178
+73893
+145037
+115786
+149613
+122956
+96325
+123513
+126850
+124733
+116615
+131598
+94544
+94431
+97681
+86617
+56739
+104904
+129964
+80862
+92125
+127108
+110565
+131296
+88192
+81824
+134198
+87363
+122455
+123441
+60907
+95023
+113940
+98328
+79989
+146133
+122356
+70932
+106379
+125641
+124905
+89699
+129133
+112173
+127629
+135485
+140068
+95229
+141276
+109807
+69951
+100792
+62683
+145565
+149063
+99523
+88881
+64337
+145012
+142380
+60028
+131565
+53041
+88489
+81712
+132728
diff --git a/2019/input/seven.txt b/2019/input/seven.txt
new file mode 100644
index 0000000..26f287d
--- /dev/null
+++ b/2019/input/seven.txt
@@ -0,0 +1 @@
+3,8,1001,8,10,8,105,1,0,0,21,38,63,76,89,106,187,268,349,430,99999,3,9,1001,9,5,9,102,3,9,9,1001,9,2,9,4,9,99,3,9,101,4,9,9,102,3,9,9,101,4,9,9,1002,9,3,9,101,2,9,9,4,9,99,3,9,101,5,9,9,1002,9,4,9,4,9,99,3,9,101,2,9,9,1002,9,5,9,4,9,99,3,9,1001,9,5,9,1002,9,5,9,1001,9,5,9,4,9,99,3,9,1001,9,2,9,4,9,3,9,102,2,9,9,4,9,3,9,1001,9,1,9,4,9,3,9,1002,9,2,9,4,9,3,9,101,1,9,9,4,9,3,9,1001,9,2,9,4,9,3,9,1001,9,1,9,4,9,3,9,101,1,9,9,4,9,3,9,102,2,9,9,4,9,3,9,1002,9,2,9,4,9,99,3,9,101,2,9,9,4,9,3,9,101,2,9,9,4,9,3,9,101,2,9,9,4,9,3,9,1001,9,2,9,4,9,3,9,102,2,9,9,4,9,3,9,1001,9,2,9,4,9,3,9,1001,9,1,9,4,9,3,9,1002,9,2,9,4,9,3,9,1001,9,1,9,4,9,3,9,101,2,9,9,4,9,99,3,9,1002,9,2,9,4,9,3,9,1001,9,2,9,4,9,3,9,101,2,9,9,4,9,3,9,1001,9,2,9,4,9,3,9,102,2,9,9,4,9,3,9,1001,9,1,9,4,9,3,9,1002,9,2,9,4,9,3,9,101,2,9,9,4,9,3,9,102,2,9,9,4,9,3,9,102,2,9,9,4,9,99,3,9,102,2,9,9,4,9,3,9,1001,9,2,9,4,9,3,9,101,1,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1001,9,2,9,4,9,3,9,1001,9,2,9,4,9,3,9,102,2,9,9,4,9,3,9,101,1,9,9,4,9,3,9,101,1,9,9,4,9,3,9,101,2,9,9,4,9,99,3,9,1002,9,2,9,4,9,3,9,101,1,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,102,2,9,9,4,9,3,9,1001,9,1,9,4,9,3,9,101,1,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,101,1,9,9,4,9,3,9,1001,9,2,9,4,9,3,9,102,2,9,9,4,9,99
diff --git a/2019/input/six.txt b/2019/input/six.txt
new file mode 100644
index 0000000..cef0eb9
--- /dev/null
+++ b/2019/input/six.txt
@@ -0,0 +1,1107 @@
+R45)497
+TYR)159
+RJC)Z1B
+ZQB)99Z
+W6M)G8S
+KPZ)4J3
+GZ1)88C
+7DK)FWL
+1HX)LQV
+8Y6)JRY
+JBH)RLS
+TNC)SDS
+9SC)KXD
+XXN)XQC
+W3P)HHY
+L4P)3VZ
+L65)SXG
+LD4)J5Z
+8MK)88X
+1QP)TLB
+GFZ)SW1
+LQV)8Q8
+K8Q)XHQ
+6H8)JFZ
+3T3)T2L
+RGL)R81
+3HK)XWS
+GXN)KWT
+V4C)86B
+GR8)8QG
+KQ2)V4C
+JHQ)KLX
+XS5)RLY
+QZZ)RBP
+Q13)QST
+1KG)TKJ
+7DT)82Y
+3X8)WHG
+QFS)7TP
+5VW)8MK
+GMN)CD9
+T2L)YF5
+8NN)DHP
+VB7)SZL
+MJP)MZV
+18C)WS4
+SW1)3HK
+TPK)P6Z
+VG4)64H
+SVC)GXG
+9DN)RXQ
+M41)L1W
+GHN)K53
+BWG)R9H
+VHC)ZYJ
+XHF)JKB
+JN4)HTQ
+NY9)5GB
+R5Z)X5Y
+M23)2LV
+G9M)N1R
+DL5)2XD
+66B)BRZ
+DHY)FC1
+XNG)NYW
+2RV)MCV
+TH4)CZB
+27D)PQH
+6DV)TWP
+7TP)WM2
+DVZ)VVT
+C97)1PW
+JFQ)NG7
+VX4)H83
+1LP)BW4
+BRZ)HQ9
+SKX)NY9
+PSL)3P8
+41N)SVX
+G63)85M
+ZR5)W6M
+BJY)NWT
+5W3)K2T
+BS4)RQR
+3RD)KHX
+V6F)199
+MP3)QHY
+RJ8)8NN
+8XH)SCQ
+GLZ)YKY
+9JD)MB1
+SK9)ZWR
+R8S)JYR
+F31)WMG
+RXQ)5N8
+BHM)FK8
+NNQ)PBH
+G86)K8Q
+2DB)BPW
+5QX)3RD
+P6P)GXR
+JWK)L65
+TQZ)9NX
+XHQ)KGX
+X1S)QCT
+WXH)NPT
+1WM)6JV
+FK4)535
+L82)ZSR
+MC1)XW4
+WWN)YKC
+CTV)CX1
+JV5)P37
+Q93)6YW
+5TP)7MS
+YW7)GTH
+JDZ)PY3
+BSD)M39
+7BP)RYC
+CQD)9FC
+NPT)MJH
+M5C)V61
+TXL)YR8
+YF3)VW9
+6ZT)XTM
+NVF)BPK
+VZ2)WXH
+82Y)KPZ
+ZKC)DTZ
+QH2)DJ2
+TKK)729
+881)GKD
+P95)42J
+6WD)VXK
+8RY)2P6
+WXX)8J9
+LP9)7B7
+CNJ)VBY
+Z7K)VRC
+M5W)JQ7
+WK4)4V2
+ZVF)QLP
+99Z)Z7R
+9W5)6TM
+PS2)Z81
+QDD)3C7
+MF9)5CC
+6JV)DJS
+FP7)1H7
+VDH)M85
+3GF)BNF
+GT8)HPT
+K43)DSP
+8K6)QRM
+5GC)Z5Z
+6YW)H6M
+YQC)5W3
+1VG)63H
+LXH)58R
+BR6)2RB
+2S4)CKV
+SDN)ZRB
+HHY)WKD
+7QW)V52
+PC5)LYP
+9LV)P95
+LVD)Q8M
+CT8)4PS
+B8L)PND
+C32)8FS
+ZTM)V8W
+1TZ)YWS
+N1R)G2G
+729)153
+ZDJ)1PK
+LXM)TC7
+9SF)94L
+7VN)2VC
+DQS)6YD
+FCZ)DGP
+FN3)5WD
+RBP)Z86
+7VD)C97
+KBN)JWK
+L68)8ZM
+GVS)JDQ
+9G7)DCD
+QSZ)RGW
+5SY)LDK
+NKL)MHN
+ZHB)66B
+TS4)R8S
+J9R)RR7
+N67)1TZ
+HX8)XXY
+4JY)9SC
+LMP)YBH
+XS9)XXN
+RZD)WWF
+JP9)KSD
+YF5)139
+6YD)P27
+Z75)NMM
+HCC)NVC
+VVS)PHW
+8Q8)VF2
+WGX)V95
+WMC)V6F
+2TB)SDN
+P49)4VS
+K35)CF1
+4LD)YDW
+G96)M5C
+CJF)DW5
+ZRB)QMK
+QSH)P3Z
+KRV)BCJ
+DH7)3RP
+NWT)LZ5
+PND)QYX
+5QB)YBG
+ZHM)ZFT
+CJJ)BLY
+YBH)9JL
+D14)W7S
+JG9)B41
+913)CG4
+LKR)Q8W
+FNB)1DB
+BB4)RPY
+P6Z)FMX
+HPT)YV6
+DPD)G1M
+YV6)JMQ
+WW9)PVD
+349)1LJ
+BH1)LQQ
+XSM)FX9
+ZZ7)FTF
+B41)C8Z
+7XL)K2Q
+9L9)NW3
+YW1)VPF
+CYK)43W
+6NX)LP5
+H1X)Q8J
+YNQ)3CJ
+QYX)718
+VPF)DF7
+H83)PHV
+4FP)2L2
+GRD)YRN
+918)FTD
+FF4)LHM
+HQ9)HFZ
+DGP)VVS
+ZP2)9Q1
+WJC)295
+2KL)S12
+PGP)VX4
+G1M)W4F
+9WC)GMN
+YSW)G2Y
+3Y6)W2J
+BZX)Y7S
+K4W)M5W
+YJX)7DK
+2LV)N42
+GXG)DXD
+5N8)58B
+8L3)XSM
+M39)512
+QFD)5ZH
+J2S)JNX
+KBN)XCQ
+WGN)TD3
+D2H)SHC
+QZF)897
+GTJ)FTC
+3ZN)99C
+3T9)GJV
+497)FRF
+S8V)MF9
+HVY)2XK
+T31)42Y
+295)3FB
+NGP)3GF
+3HJ)MG2
+9TC)M6M
+W7S)M1L
+G1F)414
+M3K)7J5
+M9M)P3J
+93H)K1Q
+YRN)D53
+BPW)TSP
+1HX)BZW
+G3G)9ZM
+LVJ)D14
+BQJ)DPD
+C81)NPP
+WC4)3T9
+CX1)D9K
+DTZ)1SQ
+CN3)HKD
+YX5)4NQ
+DZY)RPR
+897)NKG
+FQG)BJM
+KWT)PYH
+MZV)17Y
+DSL)ZGT
+T2Q)727
+TDR)V33
+WBP)FPB
+2Y3)1KG
+12V)X1X
+9ZR)NFW
+PMN)QFD
+11H)2S4
+PHV)2WM
+JTJ)CK7
+92T)6QK
+LNG)XJM
+K8B)LVD
+9H5)94G
+1K4)X5G
+9XC)BS4
+2RB)KQ2
+MP3)SM2
+JZQ)SW2
+542)PZB
+HCR)FRW
+NDY)QFS
+DXZ)D86
+5WD)XGT
+PRB)VB4
+5DL)9H5
+XGG)LNG
+43W)5CJ
+681)RM3
+5CJ)RJ8
+DGP)QPF
+7GH)96T
+BPP)PYY
+GJ8)LVX
+2P6)4KS
+WSP)8XH
+YMN)8QQ
+9NC)Y1S
+ZCT)3FM
+8J9)K1V
+Q16)JBH
+FPB)K8B
+7PF)ZR5
+RFV)84Q
+YKQ)TPK
+M31)RXR
+Q4L)NHQ
+KSV)FPS
+JBR)TYR
+4B9)FHK
+S9X)M9M
+4HT)783
+J5D)9WC
+ZCB)6HJ
+SBH)QQ6
+VF2)PVS
+JRY)5DL
+ZY6)PNV
+ZRH)P4P
+2BQ)XTT
+CKV)SCR
+MQ7)VGW
+6SM)BZX
+MVN)1NL
+FWL)LMP
+DV9)3N2
+NG7)VG4
+7QK)8XR
+8QG)G63
+DW5)ZKC
+G8S)7GH
+DSP)T43
+X8T)FP7
+DDQ)3RN
+Q6K)CN3
+64H)X6N
+DTZ)XH2
+Z81)HTX
+YMN)SCZ
+FCL)PCC
+V6L)LQX
+KSD)RTH
+WXV)YKT
+RTH)52B
+N5B)MP1
+RRJ)8G9
+7B7)VXT
+9WW)DZY
+Y55)ZY8
+Z1B)TM8
+82Y)N8G
+C97)29K
+JXK)4N1
+WRP)BP9
+6H9)VDH
+SZP)84F
+414)NNQ
+Z6X)P3N
+P3J)9XZ
+2QB)8SJ
+VSC)8CS
+XBT)92T
+X27)6H9
+GLZ)B5L
+L13)DHJ
+J5Q)432
+69N)L2Q
+VGZ)PMN
+MCV)P9P
+34F)12V
+RX9)MJP
+QJN)BB4
+4KS)T28
+9ZB)8GT
+99C)LST
+P4P)YMG
+C9X)9XC
+M9B)KG8
+V1B)DL5
+1H7)7X8
+RK2)KPF
+KWN)M31
+718)JK9
+ZR4)7BP
+W3J)YNQ
+38B)X8T
+YBG)HF2
+NPP)GZ1
+81K)X1S
+RGW)G1F
+Y1S)5QB
+36R)BWG
+38W)131
+YTR)LJC
+71P)NR1
+H94)Z1N
+3N2)27J
+4LD)ZHM
+81K)4RT
+NPQ)RYY
+727)H4Q
+YTR)H94
+RM3)N7S
+HQ9)BZG
+3P8)GZQ
+JHP)D2V
+FXW)Q13
+7F9)56W
+7S8)NJT
+1M5)4LD
+5ZH)3YB
+KWR)RX4
+X6N)4RR
+G8S)ZR4
+RXR)6Q2
+5CC)GMC
+S9X)QSZ
+TC7)57R
+JGZ)2KL
+YR8)FQG
+QCT)BYH
+DCD)MX7
+ZD9)1TP
+LQX)JNR
+PYY)YW1
+YQ3)H7C
+R6X)XG1
+TXG)TMQ
+TWR)YF3
+MMN)M23
+5YF)9SF
+V61)PWP
+PZ6)QZF
+KG8)PRB
+L94)N7V
+XCQ)5JX
+L1C)PS2
+R81)P57
+SCZ)GMM
+TD3)3T3
+HZ4)TDR
+RR7)V6L
+4VS)R92
+Z5Z)73W
+HPR)ZVF
+G6S)5TC
+XPZ)RQZ
+42J)TWR
+X6N)XWW
+127)JN4
+BHX)9H6
+LP5)QSH
+7BT)JRR
+XTM)R9W
+JQ7)7X5
+YKY)4P5
+YMG)SQQ
+VW9)1HX
+XWW)GR8
+QGM)K55
+GHQ)XPZ
+799)21X
+NW3)6WD
+YNQ)MVX
+Q8W)YL3
+HKD)DXF
+NL6)TNC
+WKD)RP2
+FX9)6ZT
+733)41N
+SHC)FXR
+C9R)5GJ
+9TS)DCP
+4N1)W3P
+LJC)WJC
+PYH)J5Q
+8SJ)4JY
+25P)GXN
+94G)C81
+HTQ)862
+CT4)KRV
+W4F)2BQ
+HF2)V48
+458)K4W
+FYP)GLZ
+1BF)MZB
+MJK)68F
+1SQ)JV5
+BMN)JP9
+NPP)XHF
+C8Z)1LP
+LXF)HVY
+BKC)RNR
+F3H)Z6F
+PZB)38W
+NHQ)XKZ
+32T)ZP2
+MB1)D2H
+B63)MYQ
+Y31)KBN
+FC1)D43
+SCR)9TS
+6QK)DSL
+X5Y)P65
+GRG)M1M
+PBH)1K4
+HNR)ZCT
+SPP)CSB
+GXF)NM8
+J5Z)TTK
+94L)WW6
+COM)7VN
+3RN)TCS
+YQC)T16
+ZG1)VD1
+GZQ)BKC
+PYP)GJR
+KRX)WDT
+XJM)DHY
+PVS)BJY
+927)LD4
+DJH)NYX
+1DB)QLX
+3CC)4J4
+3FB)PTC
+NVC)18C
+2ZR)WGX
+29K)ZZ7
+GJV)SBH
+FTD)9ZR
+MT2)PR3
+LSS)RYT
+7FG)SL4
+9QT)27D
+FTF)G96
+DHP)DV7
+PY3)881
+KX1)L82
+KPF)V72
+D9K)LKS
+L99)NV9
+DF7)J3D
+BZG)R45
+KTR)L99
+B1X)G4G
+V77)32T
+ZP1)V5G
+V3G)7ZH
+7J6)6RB
+DXF)R8G
+8FS)GRV
+WWF)JDZ
+17Y)BMG
+DFQ)Y7W
+8VB)Y1Z
+GKD)CJJ
+88X)HNR
+Z1N)L94
+681)QJN
+4RV)HMD
+SCQ)Z75
+HH3)6TJ
+LX1)2RV
+7TX)XNG
+RQR)2Y3
+TS4)NGL
+F8L)TXG
+NM8)4HT
+PVD)5WC
+PG1)WW9
+QJY)4B9
+88C)RGL
+L1Q)1XB
+DR4)MVN
+3X2)8TP
+CG4)RVJ
+PF7)BR6
+YLJ)KX1
+KS8)SKX
+1PW)DJH
+DV9)J5D
+5JX)4LL
+H27)JW5
+PHW)127
+BYH)27N
+71V)WSP
+VL2)J64
+TC7)5TP
+JNR)DJF
+SQQ)R6X
+RMD)458
+T2Q)LSS
+9XZ)1QP
+S1H)QDP
+SST)3N8
+XKZ)FN3
+QQ6)VZ2
+DH7)DCH
+112)ZCN
+B3G)HX8
+LCZ)3WP
+4RR)3ZN
+PCC)BPP
+QST)NKL
+NYX)F3N
+84F)HKL
+CZB)2V6
+YWS)V17
+65J)FNB
+Q8W)6MP
+5TC)HCR
+8G2)NGP
+D23)4ZZ
+5WX)71P
+KHX)93H
+XH2)KS8
+Z54)112
+1LJ)GHN
+X5G)5NK
+X5Y)9LV
+JYR)253
+5GJ)HPR
+QRM)XFR
+4NQ)913
+6HJ)B63
+SFK)6SM
+7FG)RMD
+TKJ)JWT
+1XB)LXM
+WST)1VG
+NFW)HZC
+JWK)LC7
+YS8)PC5
+WXV)F8K
+27J)J7M
+KKX)HH3
+7ZH)XYD
+K53)TDK
+MX7)8NR
+RPY)PSL
+4ZZ)S61
+YYQ)519
+7VG)91Y
+918)JT8
+42Y)MRN
+8MK)WK4
+5ZY)F3H
+JNX)MP3
+RQZ)YOU
+Z7R)JG9
+FXR)5QX
+PZ4)22G
+JFZ)9JD
+QHY)9QD
+ZDJ)Q93
+2XD)RJC
+1PK)GFZ
+WKX)LXH
+G4G)6LV
+SDS)X21
+RYC)3Z8
+G2D)5ZJ
+F8K)PZ6
+96T)5YF
+3C7)VX7
+N7S)LKR
+P65)N5Q
+RLS)7F9
+1CJ)X27
+3VK)J26
+VRF)8G2
+TMQ)FK4
+LVX)Y31
+139)9QT
+7MS)PG1
+1T2)ZNN
+38W)S9X
+ZF8)681
+SZL)ZHB
+4S2)CY4
+STM)T31
+XHF)TS4
+HTX)S8V
+D43)QPN
+RYT)WKX
+BMG)MRV
+Z6F)VRF
+V72)YYQ
+G8H)Z7K
+51F)3HJ
+3CJ)TH9
+GXR)TFR
+ZFT)FXW
+S61)YKQ
+MRV)7J6
+GJR)SZP
+ZPG)JBR
+NKG)NKY
+VBD)7TX
+TZP)YS8
+LF1)8LD
+GXF)M3K
+NGL)YLJ
+512)DQS
+3HT)KWN
+KMR)CM5
+18C)SVC
+LST)7VD
+YX5)JGZ
+4P5)9DN
+KLX)JPJ
+BCJ)JG1
+LNG)RKH
+7VD)GXK
+GT1)BSD
+LHM)5LG
+H7C)5GC
+HZC)5WW
+QCF)JTJ
+V95)ZY6
+GT1)GH9
+B5L)KWR
+H6M)6DV
+NCH)PYP
+R92)LXF
+S3D)V1B
+WDT)MMN
+GXK)RXL
+QMK)8PM
+8LL)T2Q
+L2Q)W25
+V48)KZP
+LZ5)4S2
+SM2)P49
+ZNN)HCC
+63H)B3G
+9FC)7PQ
+LFY)YM8
+DCP)GVS
+JFQ)FCZ
+NVC)CT8
+K8Q)1M5
+N5Q)8K6
+MK5)5SY
+6Q2)BWQ
+17W)SK9
+K2T)MK5
+WDT)M41
+DJF)RZD
+RJ8)VSC
+GJV)NVF
+8QQ)N5B
+P37)ZTM
+FQG)CYK
+VPF)8L3
+JG1)1X2
+3VK)3X8
+199)DDQ
+2DH)HG7
+K1Q)L68
+9PK)F3T
+1VG)2ZR
+DXD)799
+FC6)2W2
+CY4)7DT
+3FM)B71
+153)YMN
+137)ZQB
+QDP)9WW
+1SW)GXF
+QHY)4M3
+2XK)HDM
+B78)XK8
+HMD)RX9
+TDX)51M
+NR4)31N
+QCT)YSW
+RLY)LNP
+R9H)BLN
+XXY)TXL
+9H6)XBT
+CD9)H1X
+GTH)K43
+NLK)7BT
+KZP)CTV
+PTC)DVZ
+TH9)9L9
+5WC)3CC
+MC1)YTR
+TLB)SDK
+FL2)SHF
+WHG)X7P
+57R)PKT
+RX4)2QB
+542)JZQ
+Y7W)918
+9QD)87J
+3LN)MT2
+TFR)FMS
+LDK)VBD
+P57)JHP
+1NL)9ZB
+G9T)YGH
+YBG)CJF
+PKT)GRG
+8LD)YX5
+XFR)MC1
+B71)3X2
+RNR)81K
+ZSR)3LN
+XGT)G8H
+YPT)KSV
+BJY)BHM
+QPN)G9T
+CH3)5G6
+YW1)DXZ
+NR1)TDX
+41Z)SST
+4RX)LF1
+58B)CNL
+CNL)7QK
+PCC)LFY
+PL8)4RX
+WS4)MJK
+XFR)7S8
+VB4)QC2
+SDK)HZ4
+N42)FCL
+TNC)QH2
+LQT)VGZ
+HG7)FC6
+7X8)YQC
+G1F)PL8
+7VD)YJX
+J7H)9TC
+X1X)WST
+5G6)69N
+4RT)V3G
+L2T)F8L
+G2Y)LCZ
+XYD)SBN
+R8G)LP9
+6RB)LDP
+H6J)NLK
+F84)WGN
+L1W)XGG
+8J9)ZPG
+FRW)PZ4
+WWX)F84
+Z86)3VK
+LYP)8LL
+GMM)BHX
+N7V)GT8
+5LH)7D3
+QLX)ZF8
+H4Q)DV9
+BW4)JXK
+SXG)H14
+MKP)927
+T28)MQ7
+YL3)K35
+253)28S
+JW5)KSR
+2RY)DR4
+MJH)NPQ
+7GH)QDD
+VBY)D6C
+783)5WX
+MRN)44R
+9ZM)D9Z
+Y1Z)WC4
+7PQ)NST
+24S)KMR
+K1V)ZP1
+J7M)SPP
+T43)JFQ
+3GF)24S
+JRR)NR4
+HN5)VL2
+JMQ)RRJ
+Z6B)9W5
+T16)5ZY
+Y7W)D7D
+519)YPT
+5WD)W3J
+Q8J)5S9
+V8W)XS9
+2WM)FYP
+NWT)VB7
+TDK)Y55
+44R)B1X
+F3N)Q6K
+ZP1)BH1
+FC6)2D9
+R9W)G2D
+NMM)RK2
+VX7)TH4
+3VZ)2DB
+BWQ)2C1
+WW6)HV4
+CX1)3HT
+M23)WVY
+PWP)4Z1
+D86)LQT
+2VC)L4P
+KGX)1SW
+5W3)NL6
+TTK)WXX
+FTC)TKK
+KPF)11H
+YKT)HN5
+TSP)H7L
+4M3)NCH
+QPF)9NC
+318)4DN
+DF7)349
+F3T)B78
+RKH)VHC
+V52)42Z
+ZGT)B7T
+MVX)QJY
+RPR)L2T
+H14)1CJ
+MP1)CQD
+D4W)KGT
+8FS)J7H
+VGW)25P
+CM5)M1V
+5WW)TQZ
+N1R)KRX
+32T)DH7
+BZW)STM
+N8G)ZD9
+51M)L1C
+2D9)9G7
+J3D)V77
+Q89)7PF
+2L2)ZCB
+RR7)Q89
+3RP)232
+Z1N)C9R
+H7L)6NX
+DJS)PGP
+VXT)65J
+7D3)1BF
+DJ2)17W
+FK4)38B
+D9Z)WMC
+4J3)PF7
+TWP)L13
+BPK)WRP
+232)318
+58R)H27
+DW5)H6J
+J26)L1Q
+WST)137
+5J9)LVJ
+C81)W1L
+CF1)5VW
+X21)5J9
+535)733
+HDM)4RV
+GR8)3Y6
+D53)TZP
+RP2)4FP
+Q4L)J2S
+27N)WWX
+B7T)YW7
+BNF)51F
+1TP)Q7L
+JK9)GTJ
+WM2)S1H
+RXL)2RY
+JWT)G86
+JT8)5LH
+XW4)G9M
+JKB)ZDJ
+7VN)1T2
+JPJ)J9R
+PR3)FF4
+D7D)SFK
+519)Q4L
+NYW)GHQ
+2G1)QGM
+Y7S)SAN
+VGZ)WWN
+NKY)G55
+LC7)BQJ
+DV7)27F
+P27)36R
+8CS)CT4
+3WP)KKX
+LNP)MKP
+V5G)WXV
+TCS)GT1
+5S9)V5N
+YKC)G3G
+FK8)GJ8
+ZNN)FL2
+68F)P6P
+M39)2DH
+MZB)LBQ
+HFZ)GRD
+PQH)8Y6
+KGT)8VB
+FPS)ZRH
+MG2)6H8
+2KL)D23
+MYQ)NDY
+159)B8L
+NJT)7VG
+87J)41Z
+V17)34F
+8GT)C9X
+ZF9)RFV
+G55)YQ3
+6JV)M9B
+4DN)CWR
+DCH)CH3
+Q89)WBP
+P3Z)XS5
+GRV)9PK
+4V2)GC4
+LBQ)7FG
+ZWR)ZG1
+RZD)N67
+7J5)542
+SHF)CNJ
+LQQ)2TB
+YDW)BMN
+8NR)8RY
+28S)QCF
+QC2)KTR
+31N)1L2
+FRF)C32
+X7P)LX1
+YGH)7QW
+XK8)7XL
+SW2)ZF9
+M6M)S3D
+8XR)DFQ
+V5N)JHQ
+MHN)Z6X
+J64)D4W
+LDP)R5Z
+W2J)G6S
+SVX)Z6B
+W1L)71V
+ZYJ)2G1
+5ZJ)D8G
+9Q1)Z54
+51M)QZZ
+Y1S)F31
+S12)Q16
+L1Q)1WM
diff --git a/2019/input/ten.txt b/2019/input/ten.txt
new file mode 100644
index 0000000..716efc4
--- /dev/null
+++ b/2019/input/ten.txt
@@ -0,0 +1,20 @@
+.###.###.###.#####.#
+#####.##.###..###..#
+.#...####.###.######
+######.###.####.####
+#####..###..########
+#.##.###########.#.#
+##.###.######..#.#.#
+.#.##.###.#.####.###
+##..#.#.##.#########
+###.#######.###..##.
+###.###.##.##..####.
+.##.####.##########.
+#######.##.###.#####
+#####.##..####.#####
+##.#.#####.##.#.#..#
+###########.#######.
+#.##..#####.#####..#
+#####..#####.###.###
+####.#.############.
+####.#.#.##########.
diff --git a/2019/input/three.txt b/2019/input/three.txt
new file mode 100644
index 0000000..fcb8502
--- /dev/null
+++ b/2019/input/three.txt
@@ -0,0 +1,2 @@
+R998,U547,L703,D251,L776,U837,R100,U240,R197,D216,L220,U606,L437,U56,R940,U800,L968,D464,L870,D797,L545,D824,R790,U5,R347,D794,R204,U538,L247,U385,L103,D260,L590,U813,L549,U309,L550,U321,R862,D686,R368,D991,R451,D836,R264,D138,L292,D319,L784,D369,R849,U865,R776,D726,R223,D118,L790,D208,L836,D592,R310,D36,R991,U674,L205,U407,R422,U350,L126,D320,L239,U353,L509,U48,R521,D544,L157,D551,R614,D493,R407,D965,R498,U248,R826,U573,L782,D589,R616,D992,L806,D745,R28,U142,L333,D849,L858,D617,R167,U341,R46,U940,L615,D997,L447,D604,R148,U561,R925,D673,R441,U200,R458,U193,L805,D723,L208,U600,L926,U614,R660,D183,L408,D834,R248,U354,L110,U391,L37,U599,L287,U28,R859,D936,L404,D952,R11,U20,R708,U218,L800,U750,R936,D213,R6,D844,R728,D391,R114,U406,R390,U791,L199,D397,R476,D583,R99,U419,R575,D836,L896,U780,L77,U964,R441,U723,R248,D170,R527,D94,L39,U645,L338,D728,R503,U641,L358,D287,R171,U368,R176,D986,R821,U912,L231,D206,L451,U900,L35,D490,R190,D180,L937,D500,R157,U989,L336,U202,R178,U52,R931,U306,L85,D866,R756,U715,L521,D977,R936,U4,R207,D384,L785,U138,L682,U488,L537,U250,L877,D446,R849,U35,R258,U784,R263,D494,L324,U601,R302,U473,L737,D143,R184,D967,R95,U51,L713,U733,R297,U740,R677,D715,R750,U143,L980,U260,R915,D535,R202,U460,R365,U956,L73,U441,R182,D982,L869,D755,L837,D933,L856,D341,R189,D519,L387,D144,R575,U682,R317,U838,R154,D201,R237,D410,L43,U853,L495,U983,L953,U220,R697,D592,R355,U377,R792,U824,L441,U783,R258,D955,R451,D178,L151,D435,L232,U923,L663,U283,L92,D229,R514
+L995,U122,R472,U470,R725,U906,L83,U672,R448,U781,L997,U107,R66,D966,L780,D181,L662,U158,R804,D837,L237,U164,L98,U582,R925,D806,L153,D843,R601,U941,L968,D528,R482,D586,R15,U370,L592,U836,R828,U676,R606,D20,R841,U117,L262,U377,R375,U503,R166,D398,R161,D9,R140,D188,R895,D226,R77,U28,L727,D72,L51,U425,R370,D377,L801,D525,R102,D568,L416,D300,R415,U199,R941,U211,R285,U719,L259,U872,L959,U350,L196,D830,R515,U899,R298,U875,R946,U797,R108,U461,R999,D49,L369,D472,R83,D265,L825,D163,R162,U906,L816,D241,L587,D801,R601,D630,R937,U954,L379,D347,R831,D337,L192,D649,L853,U270,R162,D892,L26,D663,L276,U891,R843,U67,R225,D88,R686,U662,R794,D814,L200,D887,R567,U363,L863,U16,R975,D470,R714,U771,L267,D402,R75,U98,L686,U565,R584,D402,L824,D927,R71,U39,L174,D494,L358,D626,R616,D369,R471,U881,L428,U53,R862,U749,L847,D944,L887,D695,R442,U870,L993,U315,L878,U100,L480,D354,L12,D533,L236,D364,R450,U679,L926,D391,R313,D953,L560,D740,L974,D119,L370,U404,R339,U233,R901,U514,R584,D495,R308,U170,R759,U592,R388,U396,R477,U670,R906,D687,L874,U352,R124,U700,R289,D524,L93,D817,R408,D776,L235,D928,L534,D296,R116,U995,L63,D903,R758,U881,L530,U498,R573,D626,L26,U269,R237,U287,L840,D603,R948,D567,R89,U552,L299,D774,R863,D182,R773,D108,L137,U88,L731,U793,L267,U902,L41,U258,L156,U361,R389,D839,L976,U960,L342,D489,R816,U391,L393,U601,R255,D629,R832,U877,L34,D373,L809,D679,L104,U901,R157,U468,R143,U896,L637,D577,L545,D486,L970,D130,L305,D909,R984,D500,L935,U949,R525,D547,L786,U106,L269,D511,L919
diff --git a/2019/input/two.txt b/2019/input/two.txt
new file mode 100644
index 0000000..54b87b7
--- /dev/null
+++ b/2019/input/two.txt
@@ -0,0 +1 @@
+1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,10,1,19,1,6,19,23,2,23,6,27,1,5,27,31,1,31,9,35,2,10,35,39,1,5,39,43,2,43,10,47,1,47,6,51,2,51,6,55,2,55,13,59,2,6,59,63,1,63,5,67,1,6,67,71,2,71,9,75,1,6,75,79,2,13,79,83,1,9,83,87,1,87,13,91,2,91,10,95,1,6,95,99,1,99,13,103,1,13,103,107,2,107,10,111,1,9,111,115,1,115,10,119,1,5,119,123,1,6,123,127,1,10,127,131,1,2,131,135,1,135,10,0,99,2,14,0,0
diff --git a/2019/nine.go b/2019/nine.go
new file mode 100644
index 0000000..432d780
--- /dev/null
+++ b/2019/nine.go
@@ -0,0 +1,166 @@
+package main
+
+import (
+ "fmt"
+ "io/ioutil"
+ "os"
+ "strconv"
+)
+
+func main() {
+ var memory []int
+ start, size := 0, 0
+ if len(os.Args) < 2 {
+ panic("runtime error: missing operand")
+ }
+ file, err := ioutil.ReadFile(os.Args[1])
+ if err != nil {
+ panic(err)
+ }
+ for i := 0; i < len(file); i++ {
+ if file[i] == ',' || file[i] == '\n' {
+ arg, err := strconv.Atoi(string(file[start:i])) // i-1??
+ if err != nil {
+ panic(err)
+ }
+ memory = append(memory, arg)
+ start = i + 1
+ size++
+ }
+ }
+ // fmt.Println(execute(memory, size))
+ // noun, verb := etucexe(memory, size, 19690720)
+ // fmt.Println(100*noun + verb)
+ execute(memory, size)
+}
+
+func split(memory []int, i, size, relative 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]
+ } else if mode%10 == 2 {
+ one = relative + memory[i+1]
+ }
+ if size-i > 2 {
+ if mode/10%10 == 0 {
+ two = memory[i+2]
+ } else if mode%10 == 2 {
+ two = relative + memory[i+2]
+ }
+ if size-i > 3 {
+ if mode/100 == 0 {
+ three = memory[i+3]
+ } else if mode%10 == 2 {
+ three = relative + memory[i+3]
+ }
+ }
+ }
+ }
+ return three, two, one
+}
+
+func execute(memory []int, size int) []int {
+ /* todo: said "memory" functionality could be [pos, value]int
+ * i.e. when memory outside initial bounds wants to be accessed,
+ * it writes to a new element of this slice
+ * to access elements of the array, iterate through while checking each position
+ * additionally, to ensure there aren't conflicting "positions" in the array,
+ * do the above iteration process, if not, appends (this requires a total int)
+ */
+ /*
+ var swap [][2]int
+ */
+
+ // off-topic todo: https://www.golangprograms.com/example-arrays-of-arrays-arrays-of-slices-slices-of-arrays-and-slices-of-slices.html
+ // does this mean i can remove total / size because if so YES
+ for i := 0; i < 4000; i++ { // bad (example: no auto-termination due to 0 replacing nothingness)
+ memory = append(memory, 0)
+ }
+ relative := 0 // initial value of the relative base
+ for i := 0; i < len(memory); {
+ // bounds check
+ opcode := memory[i] % 100
+ three, two, one := split(memory, i, size, relative)
+ //fmt.Println("test:", opcode)
+ // actually what might work better than replacing all below would be
+ // checking if the next three values are out of bounds or not
+ // and then replacing them
+ // no bad idea large addition exists
+ switch opcode {
+ case 1: // adds
+ memory[three] = memory[one] + memory[two]
+ i += 4
+ case 2: // multiplies
+ // if out of bounds
+ // swap = append(swap, {memory[three], memory[one] * memory[two]})
+ // else
+ memory[three] = memory[one] * memory[two]
+ i += 4
+ case 3: // input
+ var input int
+ fmt.Print("Input: ")
+ resp, err := fmt.Scanf("%d", &input) // interesting note: anything following a valid integer is run by bash
+ if err != nil {
+ fmt.Println(resp, err)
+ os.Exit(0)
+ }
+ // out of bounds check
+ 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 // instructions: _position_ given by the third parameter
+ } 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 9: // adjusts the relative base
+ relative += memory[one] // interesting behavior when changing to i+1
+ i += 2
+ 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
+}
diff --git a/2019/one.go b/2019/one.go
new file mode 100644
index 0000000..cf27820
--- /dev/null
+++ b/2019/one.go
@@ -0,0 +1,40 @@
+package main
+
+import (
+ "fmt"
+ "io/ioutil"
+ "os"
+ "strconv"
+)
+
+func main() {
+ start, sum, fuelsum := 0, 0, 0
+ if len(os.Args) < 2 {
+ panic("runtime error: missing operand")
+ }
+ file, err := ioutil.ReadFile(os.Args[1])
+ if err != nil {
+ panic(err)
+ }
+ for i := 0; i < len(file); i++ {
+ if file[i] == '\n' {
+ arg, err := strconv.Atoi(string(file[start:i])) // i-1??
+ if err != nil {
+ panic(err)
+ }
+ start = i + 1
+ sum += (arg / 3) - 2
+ fuelsum += tyranny(arg)
+ }
+ }
+ fmt.Println(sum)
+ fmt.Println(fuelsum)
+}
+
+func tyranny(mass int) int {
+ subtotal := 0
+ for fuel := (mass / 3) - 2; fuel >= 0; fuel = (fuel / 3) - 2 {
+ subtotal += fuel
+ }
+ return subtotal
+}
diff --git a/2019/seven.go b/2019/seven.go
new file mode 100644
index 0000000..d71d827
--- /dev/null
+++ b/2019/seven.go
@@ -0,0 +1,141 @@
+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
+}
diff --git a/2019/six.go b/2019/six.go
new file mode 100644
index 0000000..646313d
--- /dev/null
+++ b/2019/six.go
@@ -0,0 +1,25 @@
+package main
+
+import (
+ "io/ioutil"
+ "os"
+)
+
+func main() {
+ if len(os.Args) < 2 {
+ panic("runtime error: missing operand")
+ }
+ file, err := ioutil.ReadFile(os.Args[1])
+ if err != nil {
+ panic(err)
+ }
+
+ for i := 0
+}
+
+func orbits(planet string) []string {
+
+ var chain []string
+
+ return chain
+}
diff --git a/2019/ten.go b/2019/ten.go
new file mode 100644
index 0000000..562299a
--- /dev/null
+++ b/2019/ten.go
@@ -0,0 +1,47 @@
+package main
+
+import (
+ "fmt"
+ "io/ioutil"
+ "os"
+)
+
+func main() {
+ var region [][]bool
+ x, y, size := 0, 0, 0
+ if len(os.Args) < 2 {
+ panic("runtime error: missing operand")
+ }
+ file, err := ioutil.ReadFile(os.Args[1])
+ if err != nil {
+ panic(err)
+ }
+ for i := 0; i < len(file); i++ {
+ if file[i] == '#' {
+ region[x][y] = true
+ x++
+ } else if file[i] == '\n' {
+ x = 0
+ y++
+ }
+ }
+ max := 0
+ fmt.Println("Maximum detectable asteroids:", detect(region, x, y))
+}
+
+func detect(region [][]bool, width, height int) int {
+ for i:= 0; i < width; i++ {
+ for j := 0; j < height; j++ {
+ if region[i][j] {
+ for k:= 0; k < width; k++ {
+ for l := 0; l < width; l++ {
+
+ }
+ }
+ }
+ }
+ }
+
+ slope :=
+ return
+}
diff --git a/2019/three.go b/2019/three.go
new file mode 100644
index 0000000..2c79a18
--- /dev/null
+++ b/2019/three.go
@@ -0,0 +1,156 @@
+package main
+
+import (
+ "fmt"
+ "io/ioutil"
+ "os"
+)
+
+func main() {
+ var directions [][]string
+ var temp []string
+ start := 0
+
+ if len(os.Args) < 2 {
+ panic("runtime error: missing operand")
+ }
+ file, err := ioutil.ReadFile(os.Args[1])
+ if err != nil {
+ panic(err)
+ }
+ for i := 0; i < len(file); i++ {
+ if string(file[i]) == "," || file[i] == '\n' {
+ temp = append(temp, string(file[start:i]))
+ start = i + 1
+ if file[i] == '\n' {
+ directions[] = append(directions[], temp)
+ temp = nil
+ }
+ }
+ }
+ fmt.Println(directions)
+
+ // grid [][]int := boolgrid(directions)
+
+}
+
+// ax, ay, at := taxi(directions[0])
+// bx, by, bt := taxi(directions[1])
+// for i := 0; i < at; i++ {
+// for j := 0; j < at; j++ {
+// for k := 0; k <
+// ax[i][j]
+// }
+// }
+// abx, aby
+
+// grid = taxi(directions, taxi(directions2, grid))
+// min, x, y := 4000, 0, 0
+// for i := 0; i < len(grid); i++ {
+// for j := 0; j < len(grid); j++ {
+// x, y = int(math.Abs(float64(i-500))), int(math.Abs(float64(j-500)))
+// if grid[i][j] == 2 && x+y < min {
+// fmt.Println(i-500, j-500)
+// min = x + y
+// }
+
+// }
+// }
+// fmt.Println("Manhattan distance to intersection:", min)
+// }
+
+// func taxi(directions []string) ([]int, []int, int) {
+// var horislice, vertslice []int
+// total := 0
+// for i := 0; i < len(directions); i++ {
+// direction := directions[i][0]
+// displacement, err := strconv.Atoi(directions[i][1:])
+// if err != nil {
+// panic(err)
+// }
+// switch direction {
+// case 'L':
+// for j := 0; j < displacement; j++ {
+// horislice = append(horislice, horislice[total]-j)
+// vertslice = append(vertslice, vertslice[total])
+// total++
+// }
+// case 'R':
+// for j := 0; j < displacement; j++ {
+// horislice = append(horislice, horislice[total]+j)
+// vertslice = append(vertslice, vertslice[total])
+// total++
+// }
+// case 'U':
+// for j := 0; j < displacement; j++ {
+// vertslice = append(vertslice, vertslice[total]+j)
+// horislice = append(horislice, horislice[total])
+// total++
+// }
+// case 'D':
+// for j := 0; j < displacement; j++ {
+// vertslice = append(vertslice, vertslice[total]-j)
+// horislice = append(horislice, horislice[total])
+// total++
+// }
+// default:
+// fmt.Println("Unhandled direction", string(direction))
+// os.Exit(0)
+// }
+// }
+// return horislice, vertslice, total
+// }
+
+// func taxi(directions []string, grid [4000][4000]int) [4000][4000]int { // sign convention: an array, left to right, top to bottom, beginning in the top left corner
+// x, y := len(grid)/2, len(grid[0])/2 // start in center
+// var boolgrid [4000][4000]bool
+// for i := 0; i < len(directions); i++ {
+// direction := directions[i][0]
+// displacement, err := strconv.Atoi(directions[i][1:])
+// if err != nil {
+// panic(err)
+// }
+// switch direction {
+// case 'L':
+// for j := 0; j < displacement; j++ {
+// x--
+// if !boolgrid[x][y] {
+// boolgrid[x][y] = true
+// }
+// }
+// case 'R':
+// for j := 0; j < displacement; j++ {
+// x++
+// if !boolgrid[x][y] {
+// boolgrid[x][y] = true
+// }
+// }
+// case 'U':
+// for j := 0; j < displacement; j++ {
+// y--
+// if !boolgrid[x][y] {
+// boolgrid[x][y] = true
+// }
+// }
+// case 'D':
+// for j := 0; j < displacement; j++ {
+// y++
+// if !boolgrid[x][y] {
+// boolgrid[x][y] = true
+// }
+// }
+// default:
+// fmt.Println("Unhandled direction", string(direction))
+// os.Exit(0)
+// }
+// fmt.Println(string(direction), displacement, x, y)
+// }
+// for i := 0; i < len(grid); i++ {
+// for j := 0; j < len(grid[0]); j++ {
+// if boolgrid[i][j] {
+// grid[i][j]++
+// }
+// }
+// }
+// return grid // each element is equal to the numbers of wires on it
+// }
diff --git a/2019/two.go b/2019/two.go
new file mode 100644
index 0000000..8108c87
--- /dev/null
+++ b/2019/two.go
@@ -0,0 +1,66 @@
+package main
+
+import (
+ "fmt"
+ "io/ioutil"
+ "os"
+ "strconv"
+)
+
+func main() {
+ var slice []int
+ start, size := 0, 0
+ if len(os.Args) < 2 {
+ panic("runtime error: missing operand")
+ }
+ file, err := ioutil.ReadFile(os.Args[1])
+ if err != nil {
+ panic(err)
+ }
+ for i := 0; i < len(file); i++ {
+ if file[i] == ',' || file[i] == '\n' {
+ arg, err := strconv.Atoi(string(file[start:i])) // i-1??
+ if err != nil {
+ panic(err)
+ }
+ slice = append(slice, arg)
+ start = i + 1
+ size++
+ }
+ }
+ noun, verb := edocpo(slice, 19690720)
+ slice[1] = 12
+ slice[2] = 2
+ fmt.Println(opcode(slice)[0])
+ fmt.Println(100*noun + verb)
+}
+
+func opcode(slice []int) []int {
+ for i := 0; i < len(slice); i += 4 {
+ if slice[i] == 1 {
+ slice[slice[i+3]] = slice[slice[i+1]] + slice[slice[i+2]]
+ } else if slice[i] == 2 {
+ slice[slice[i+3]] = slice[slice[i+1]] * slice[slice[i+2]]
+ } else if slice[i] == 99 {
+ return slice
+ } else {
+ fmt.Println("Unsupported code", slice[i], "at", i)
+ os.Exit(0)
+ }
+ }
+ return slice
+}
+
+func edocpo(slice []int, output int) (int, int) {
+ var ecils []int
+ for i := 0; i < len(slice); i++ {
+ for j := 0; j < len(slice); j++ {
+ ecils = append([]int(nil), slice...) // reset ecils to slice
+ ecils[1], ecils[2] = i, j
+ if opcode(ecils)[0] == output {
+ return i, j
+ }
+ }
+ }
+ return -1, -1
+}