From a7ba598a54a8883c83cb9ef2b04d653eecd92e28 Mon Sep 17 00:00:00 2001 From: j-james Date: Sun, 11 Dec 2022 18:15:44 -0800 Subject: Reorganize 2019 solutions --- 2019/eight.go | 87 ---- 2019/eight.nim | 30 -- 2019/five.go | 131 ------ 2019/five.nim | 63 --- 2019/four.go | 68 ---- 2019/four.nim | 37 -- 2019/go/day01.go | 40 ++ 2019/go/day02.go | 66 +++ 2019/go/day03.go | 156 +++++++ 2019/go/day04.go | 68 ++++ 2019/go/day05.go | 131 ++++++ 2019/go/day06.go | 25 ++ 2019/go/day07.go | 141 +++++++ 2019/go/day08.go | 87 ++++ 2019/go/day09.go | 166 ++++++++ 2019/go/day10.go | 47 +++ 2019/input/eight.txt | 1 - 2019/input/five.txt | 1 - 2019/input/four.txt | 1 - 2019/input/nine.txt | 1 - 2019/input/one.txt | 100 ----- 2019/input/seven.txt | 1 - 2019/input/six.txt | 1107 -------------------------------------------------- 2019/input/ten.txt | 20 - 2019/input/three.txt | 2 - 2019/input/two.txt | 1 - 2019/nim/day01.nim | 16 + 2019/nim/day02.nim | 37 ++ 2019/nim/day04.nim | 37 ++ 2019/nim/day05.nim | 63 +++ 2019/nim/day08.nim | 30 ++ 2019/nine.go | 166 -------- 2019/one.go | 40 -- 2019/one.nim | 16 - 2019/seven.go | 141 ------- 2019/six.go | 25 -- 2019/ten.go | 47 --- 2019/three.go | 156 ------- 2019/two.go | 66 --- 2019/two.nim | 37 -- README.md | 12 +- 41 files changed, 1116 insertions(+), 2351 deletions(-) delete mode 100644 2019/eight.go delete mode 100644 2019/eight.nim delete mode 100644 2019/five.go delete mode 100644 2019/five.nim delete mode 100644 2019/four.go delete mode 100644 2019/four.nim create mode 100644 2019/go/day01.go create mode 100644 2019/go/day02.go create mode 100644 2019/go/day03.go create mode 100644 2019/go/day04.go create mode 100644 2019/go/day05.go create mode 100644 2019/go/day06.go create mode 100644 2019/go/day07.go create mode 100644 2019/go/day08.go create mode 100644 2019/go/day09.go create mode 100644 2019/go/day10.go delete mode 100644 2019/input/eight.txt delete mode 100644 2019/input/five.txt delete mode 100644 2019/input/four.txt delete mode 100644 2019/input/nine.txt delete mode 100644 2019/input/one.txt delete mode 100644 2019/input/seven.txt delete mode 100644 2019/input/six.txt delete mode 100644 2019/input/ten.txt delete mode 100644 2019/input/three.txt delete mode 100644 2019/input/two.txt create mode 100644 2019/nim/day01.nim create mode 100644 2019/nim/day02.nim create mode 100644 2019/nim/day04.nim create mode 100644 2019/nim/day05.nim create mode 100644 2019/nim/day08.nim delete mode 100644 2019/nine.go delete mode 100644 2019/one.go delete mode 100644 2019/one.nim delete mode 100644 2019/seven.go delete mode 100644 2019/six.go delete mode 100644 2019/ten.go delete mode 100644 2019/three.go delete mode 100644 2019/two.go delete mode 100644 2019/two.nim diff --git a/2019/eight.go b/2019/eight.go deleted file mode 100644 index 74be0e1..0000000 --- a/2019/eight.go +++ /dev/null @@ -1,87 +0,0 @@ -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/eight.nim b/2019/eight.nim deleted file mode 100644 index ecf291e..0000000 --- a/2019/eight.nim +++ /dev/null @@ -1,30 +0,0 @@ -# Day Eight: Space Image Format -import os, strutils, sequtils - -let - input: string = paramStr(1) - digits: string = strip(readFile(input)) - width: int = 25 - height: int = 6 - depth: int = len(digits) div (width * height) - -var min, product: int = width * height -for layer in distribute(@digits, depth): - if count(layer, '0') < min: - min = count(layer, '0') - product = count(layer, '1') * count(layer, '2') -echo product - -for column in 0 ..< height: - for row in 0 ..< width: - for layer in 0 ..< depth: - case digits[(layer * height * width) + (column * width) + row] - of '0': - write(stdout, ' ') - break - of '1': - write(stdout, 'X') - break - else: - discard - write(stdout, '\n') diff --git a/2019/five.go b/2019/five.go deleted file mode 100644 index 9ea4699..0000000 --- a/2019/five.go +++ /dev/null @@ -1,131 +0,0 @@ -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/five.nim b/2019/five.nim deleted file mode 100644 index 87c359e..0000000 --- a/2019/five.nim +++ /dev/null @@ -1,63 +0,0 @@ -# Day Five: Sunny with a Chance of Asteroids -import os, strutils, sequtils - -let input: string = paramStr(1) -var program: seq[int] = map(split(strip(readFile(input)), ','), parseInt) - -var i: int = 0 -while i < len(program): - let opcode: int = program[i] mod 100 - - var - mode: int = program[i] div 100 - one: int = i+1 - two: int = i+2 - three: int = i+3 - if len(program)-i > 1 and mode mod 10 == 0: - one = program[one] - if len(program)-i > 2 and mode div 10 mod 10 == 0: - two = program[two] - if len(program)-i > 3 and mode div 100 == 0: - three = program[three] - - case opcode - of 1: # adds - program[three] = program[one] + program[two] - i += 4 - of 2: # multiplies - program[three] = program[one] * program[two] - i += 4 - of 3: # input - write(stdout, "Input: ") - program[one] = parseInt(readLine(stdin)) - i += 2 - of 4: # output - echo program[one] - i += 2 - of 5: # jump-if-true - if program[one] != 0: - i = program[two] - else: - i += 3 - of 6: # jump-if-false - if program[one] == 0: - i = program[two] - else: - i += 3 - of 7: # less than - if program[one] < program[two]: - program[three] = 1 - else: - program[three] = 0 - i += 4 - of 8: # equals - if program[one] == program[two]: - program[three] = 1 - else: - program[three] = 0 - i += 4 - of 99: # terminate - break - else: - echo("Unsupported code ", program[i], " at ", i) - quit(QuitFailure) diff --git a/2019/four.go b/2019/four.go deleted file mode 100644 index 7c901dc..0000000 --- a/2019/four.go +++ /dev/null @@ -1,68 +0,0 @@ -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/four.nim b/2019/four.nim deleted file mode 100644 index eb6d933..0000000 --- a/2019/four.nim +++ /dev/null @@ -1,37 +0,0 @@ -# Day Four: Secure Container -import os, strutils, sequtils - -let input: string = paramStr(1) -let bounds: seq[int] = map(split(strip(readFile(input)), '-'), parseInt) -var valid, details: int = 0 - -proc criteria(password: int): bool = - var password: string = $password - for digit in 0 .. 4: - if password[digit] > password[digit+1]: - return false - for digit in 0 .. 4: - if password[digit] == password[digit+1]: - return true - return false - -proc extracriteria(password: int): bool = - var password: string = $password - for digit in 0 .. 4: - if password[digit] > password[digit+1]: - return false - for digit in 0 .. 4: - if password[digit] == password[digit+1]: - if digit == 0 or password[digit] != password[digit-1]: - if digit == 4 or password[digit] != password[digit+2]: - return true - return false - -for password in bounds[0] .. bounds[1]: - if criteria(password): inc(valid) - -for password in bounds[0] .. bounds[1]: - if extracriteria(password): inc(details) - -echo valid -echo details diff --git a/2019/go/day01.go b/2019/go/day01.go new file mode 100644 index 0000000..cf27820 --- /dev/null +++ b/2019/go/day01.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/go/day02.go b/2019/go/day02.go new file mode 100644 index 0000000..8108c87 --- /dev/null +++ b/2019/go/day02.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 +} diff --git a/2019/go/day03.go b/2019/go/day03.go new file mode 100644 index 0000000..2c79a18 --- /dev/null +++ b/2019/go/day03.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/go/day04.go b/2019/go/day04.go new file mode 100644 index 0000000..7c901dc --- /dev/null +++ b/2019/go/day04.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/go/day05.go b/2019/go/day05.go new file mode 100644 index 0000000..9ea4699 --- /dev/null +++ b/2019/go/day05.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/go/day06.go b/2019/go/day06.go new file mode 100644 index 0000000..646313d --- /dev/null +++ b/2019/go/day06.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/go/day07.go b/2019/go/day07.go new file mode 100644 index 0000000..d71d827 --- /dev/null +++ b/2019/go/day07.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/go/day08.go b/2019/go/day08.go new file mode 100644 index 0000000..74be0e1 --- /dev/null +++ b/2019/go/day08.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/go/day09.go b/2019/go/day09.go new file mode 100644 index 0000000..432d780 --- /dev/null +++ b/2019/go/day09.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/go/day10.go b/2019/go/day10.go new file mode 100644 index 0000000..562299a --- /dev/null +++ b/2019/go/day10.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/input/eight.txt b/2019/input/eight.txt deleted file mode 100644 index 046a733..0000000 --- a/2019/input/eight.txt +++ /dev/null @@ -1 +0,0 @@ -221222222022222222222222020222222222022220012102002220222222222222222222220122202222022122222222220212222122222222222222222202221222222222102222212222220222222222222222222222220222222222022220222102122220222222222222222222222122212222122122222222220202222222222222222222222212220222222222002222222222222222222122222222222222121222222222222220012202222221222222222222222222221122212222122222222222222202222222222222222222222222221222222222002222202222222222022222222222222222220222122222122221202102112222222222222222222222220022212022022222222222222212222022222222222222222202221022222222022222202222220222122022222222222222222222122222122220012002022221222222222222222222221222202022022122222222222222222022222222222222222222220022222222222222202222222222222022222222222222222222222222022222122122222221222222222222222222222222212122122122222222220222222122202222222222222222220222222222002222222222221222122022222222222222220222222222122221122022022221222222222222222222220222212122122122222222222202222222212222222222222202221220222222022222202222220222222222222222222222220222122222222222012012012220222222222222222222222022222222222022222222221212222122212222222222222202222021222222102222202222220222122222222222222222221222122222122220212112222220222220222222222222221022202222022022222222220202222122202222222222222212222221222222122222212222220222222222222222222221222222022222222221102102222221222222222222222222221022212122222022222222222202222222202222222222222222222220212222222222222222220222022222222222222220122222022222122220112022222220222222222222222222221022202222122122222122220222222022212222212222222222220220202222012222202222220122022122222222222221220222122222022221212102202221222221222222222222220122222022122122222222222222222222222222202220222212122121212222102222222222212222022022222222221222120222022222122220112002202220222220222222222222202222222122022122222122220212222122222222212221222202220222222222002222222222220122022222222222222220120222122222022222122212002222222221222222222222210222212222122222222121222202222122222222202220222202121222222222102222212222220022122022222222220222022222222222122222212222202222222220222222222222212022222122022022222121220212222222222220002222222212121221212222202222202222212222122022222222221222220222222222122222102112012221222222222222222222221122212122122222222221221222222122212221122220222212122221202222112222222222222022022222222222221220122222022222222220122202202220222222222222222222212222212122022122222021221202222222202221022222222202022220212222202222222222200022022222222222220221022222222222022221002222022220222221222222222222221222222222222122222222222202222122212221012220222211222021222222102222222222212122122122222222220220221222222222022221202222102220222221222222222222211122202122022122222220221212222222202222112221222201222121202222022222222222200122222222222222221221221222222222122221012112212222222222222222222222212222202222222122220220220212222122202221212221222221021222222222002222202222201222222122222222222220222222122222222222002022212222222220222222222222201122202022022022220220222202222222222220112221222212121120202222022222202222221022222222222222222221022222222222022220102102222221222222222222222222211222202122022022222021220222222122212220022221222220222220222222212222202222211122022222222222222221220222222222122220122202102220222222222222222222220122212222122122220122220202222122222220212221222220121022212222000222222222212022122222222222221221122222222222122222202202102220222220220222221222211022222022022222220020220212222022212220120221122200221220202222022222202222220122022022222222200220220222122222122222012212202222222221220222220022201122202222122222220121221222222022202221121220222200220222212222220222212222222122122222222222222222222222222222222221122122022220022220221222220022211222202222122122222122220222222022212220100220022220222222222222101222222222210122222222222222200222020222122222122220012002022220222220221222221122211022212222222122220021220202222222212221100221122221221120202222212222212222201022222022222222202220122222022222122221222122002222022221221222222222200222222122122122220020221222222122212221020220022211220121202222101222212222210122022022222222200222220222222222022220012012022221122221222222220222212022202122122122220120222202222222222222010220022211221122022222210222212222220222122222222222221222022222022222022222022112022222122221221222220222201122202222022222222222222202222222212222000221022212022120202222012222222222212122122022222222212221022222022222122221102202102220122220220222220022222222222122022122221121222212222122202220120212222211022021112222212222222222201222022022222222212221221222222222222222012122102222122220222222221022202022222222022022220021221202222222202222201212122211222221222222222222212222201022122122222222200221121222122222122222002202102220222220220222222122201222212022222122220122221222222022212222212201022222121122222222100222202222212022122222222222210220022222022222222221122002222220122220221222222222222122212122122022222121220222222222202220010211022212121021002222202222012222222122122022222222220222022222122222022221002112202220222221221222220022210022222122022022221222221212222122202222202210022220122120112222002222102222220122122022222222201222221222022222022221112112102220222222220222221222220122212122122122221122221212222122212221120202122210120220102222221222012222202122022022222222211222121222022222022221122222122221222222201222222022221022212122122222220222221202222222222220110222022201121222202222211222202222211222122122222222211221021222122222122220112122002222222221202222220022201122202222222122222022222202222222222222101212222220221221122222021222012222200222122122222222201221022222122222022220012002002221122220222222220022212222212222222222220220021212222122222220001201022222122022122222110222202222221222222022222222202222220222022222022222002102222222022222221222222222201122212022022022220220120202222122222222211200122200020222212222222222022222200222222022222222201221120222222222022222122112012222122220211222222022200122212022122122221222020202222022212221012202122201222122122222220222102222220122222022222222210221122222022222202220002102112222222221202222222222211022222022222022220220220202222122222222101222022212122121102222110222122222212122122122222222212220121222022222122221002222202220122221220222221022212022212022122222221022122212222122212222220202122220120022122222201222112222210122222022222222221221221222222222102222222012122222222222212222220022202222022222222122221020122202222222222222102220122210120122002222212222202222201122122122222222201221220222222202112222202102002222022222211221221022222122212022222222221120220212022022212222222221022212221221122222211222222222200022122022222222222221122222222212122221012122012222022220212220222222222122212122122022221121220222222222202222110202002220120021122222110222202122210022022022222222201221222222122212212220002122002120122221221222221122201022202222022222221020021212222222202220002210112220220221102222211222212022220122222222222222200220020222122202012221112102102022122222200201222122210022122022022022221220222202122122202222211222212202022120012222101222002122201122022222222222222220122222022202212221022112202220122220221201221022210222202122022222220022222202122222222221120202022222020022122222202222212022202122222212222222221221220222022212122220022002022021122222212212221022201222112122022022222122220212122022222220001211202220220021212222001222122122210022122002222222221222121222122222102222222202002222122220200211221022202222112022022022220122221212022222222222002200022211122022222222222222202122202122022012222220222222121222220222212221002112222222122220202220221122221222201022222222221220120202122022202222200201012211022022102222100222122122202222222102222220202221022222220212002221202102012022212220201202222022210022022022122222220020020202222122212221222011002211120122122222021222022122201222122002222222200222222222220222202221122022102021221221212212221122210122022122022122222020022222122022222221210012112222221221202222200222212022220122222212222221221220121222221112022221102202212220112220220220221022222022220222022222222020020212222222212220210002022200220122222222212222122220202122222122222221200220121222221202222221112222122021210222220212220122211122020222022122220220220222122022202220012111102212120120102222022222022221221222222022222221221220221222122002102221202202022022210220220220221022200022022122122222221021021222022122212222202101022211221122002222121222222121212222222222202220222220121222020202222221112022012022112221211222222122202222212122122122220022122212022122212222021220122222122120212222022222202022200122022202212220201221120222121122012220212002002221001222202200221022202222112222122222220122220202022022222221012002202201022120122222010222022021201022222012202221212221221222221112222222112102202120102220201210221022201022122122012222221021022222222122212221122002212201121021202222112222022120220122022012212220202222021222121112222222122002112121011220210222220122210222010022022122221021122212222020222222102210212200222022022222021222112221222222122102212220211221022222022212212220112002102021120220210211222222221122111122002022222221021222022221202222012222012221222021112222021222022221200122222212222222221221020222222022212220122222122120112222211221220022222122102222202222222021020212222121212220002002222220121020202222101222122120100222122102202220211222120222120212202221212102202220012221202222221022222222202121022022222220222212222020222221121011112220011022022222200222012220110222122002202221221221120222021202012221022002022021010221221202222022200022011221002122220222020222022122222220220020212201202022122222222222202221110022222212212222201221010222021222122222002202122221110220200212222222201022000220012222221222221212222121202222100211002222200021212222111222212022201122022112212221210222102222021112202220022012122020120210211201220122202122000020002022221022220212022222212221011222022220011021022222210222202120222022022002212202210222020222120022202222102022212122210222201220222222200122212220022022220122221222122022212221001000012222120220102222220222102022110122222122222201122222121222021012212221112102222220110200220222222222200020202121122022222222220202222022222222221010222210101020102222212222212021102022222202222221012220010222021002012220112222212122011211201201221222222120112222222122221020020202122221222222221010022201022222122222221222122020211222221212212200002212000222222012102221122022222121000200212201222022212021011120012222220120022212022120202220201100112222220221102222021222112211122222122022222212011200110222222102002222122202222220222211210200220121200120202220212022222121120222122122222220101100212221110122112222102222222020021222121012202211002212202222122002012220112122112021100202212221221120211220221221112122222221021212122020202220201100022220022220102222202222222012000222220012222222011221222222121212212221102010102220210222222202220022201221110201102022222222221202022121212222220212222201201222122222122222112021000022220022212220000210001222020202212221002202122022110222211221220121212121111002222022221220020222022021202221222011122022011222102222210222212120100122122122202220121222000222022222022222222210002220122222210210220221201022201111202222220220020202222220222220100211002001200122122222120222202202022221120012212210202201010222220022112220102100112221020222211212220221210120101110022022220121122222022220202221221001022101022221112222111222102102111022021102202220010202211222222202112220202022022020020221210200221020210221102222112222221220021222022022212222121212212211121121012222112222102101200102020202222211112202022222221202002021122211202021111200202201221021220022001020202022222020122212022122222220222000012211021122012222111222212011200021022112212212120210112202121122202221112100222122101211202202221021210022201001122022221220120212222221222222002020012011122220122222011222002220000102120222202210211220201202021222102010002221022120101211221222222120220122210210112122220121121212022022212222011010012201010222202222211222212000022102022022202212100212200212221222112112202022022220212202210221220121202020201022202022220120121222222022212220221000012202220020122222220222122121212120022012202220022212210202022022012101022120022222220200221211022220210120101001122022220120020212122020222221010210002200202222012222100222122202012111002022212201200110021222121112011111102220222120012210211200122121210120010202012022220221121202022122212221110002202021100121222222221222212101222102220012212221112222222212222122221010102202012220002220202202222222200121100222021022122021222222122122212220220022212012011122122222112222212202011100200222222222021112210202022202002120002201022122220211220201120122220121112212122022222021121212222120222222021210002120110020022222221222222000020021211112202222200000001222222222102000002222122121010211221110120122222022001221010222120022222202222021202221020011222200002022022222211222012120120020012222212201220012002202220022010112022111122121020201201000002021220122021001000122022021122222122121202221002201012011222222022222102222012012022220110022202220221121120212221012002200012020002020201202221022101110221021222021122122121000122212222221202221221011122021102221022222101212212021000100000212222221122112100212121122100121222001102220121202220220101110211122102010122222222222121202122122202222202101202120212021012222220202112102021000021002212200002221211212022002001112212110012121112221222101112211222100211211122222120112122212022121222022220011012101020020012222100212002001000120102102202201121000211212020102211222122202202121122221202112220102202002122211120022102101000202122120222121011011200101110221212222122112012012021201201022212220110120120222121112102120222202122022002212221000012122202222001110202122112112020222022022202122011001111211112021202222211002022212011210122202222201011011212212221122000210212121012020221220212002022102201212120202202122120112001212022220212220210202210121121022112222120122012222221202201222202201122201111212022101120022022210002120111212201120022010212021211222211022202010100212222220202122011100112100220020122222010102202122100110201202202211212201010222122122021220022111102122011120202211100121202120122001112222211212022212222022212222101111121022000020102222112122222202011200211002202200222002201202122222012022122022111121221012211202210210221122201202122122122201011222022220202220211112201211110221202222210102002002210221220212202222010212011202220112102210112101220121011211222010201111201200012020111122202100102202022200212012220012021002211220102222121022212202102100010212202201001012222222120221010020102021202121110010212121110200210121121210020122102002120202222210212121012222010012101222122222010012112011120220200201100101000011111000001020000010110011122111011121101102000010112021002010011100202212110010000002121101010110222221001011100100210100021201 diff --git a/2019/input/five.txt b/2019/input/five.txt deleted file mode 100644 index a97e6c1..0000000 --- a/2019/input/five.txt +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index 693a14b..0000000 --- a/2019/input/four.txt +++ /dev/null @@ -1 +0,0 @@ -123257-647015 diff --git a/2019/input/nine.txt b/2019/input/nine.txt deleted file mode 100644 index bb2d334..0000000 --- a/2019/input/nine.txt +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index 199bf78..0000000 --- a/2019/input/one.txt +++ /dev/null @@ -1,100 +0,0 @@ -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 deleted file mode 100644 index 26f287d..0000000 --- a/2019/input/seven.txt +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index cef0eb9..0000000 --- a/2019/input/six.txt +++ /dev/null @@ -1,1107 +0,0 @@ -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 deleted file mode 100644 index 716efc4..0000000 --- a/2019/input/ten.txt +++ /dev/null @@ -1,20 +0,0 @@ -.###.###.###.#####.# -#####.##.###..###..# -.#...####.###.###### -######.###.####.#### -#####..###..######## -#.##.###########.#.# -##.###.######..#.#.# -.#.##.###.#.####.### -##..#.#.##.######### -###.#######.###..##. -###.###.##.##..####. -.##.####.##########. -#######.##.###.##### -#####.##..####.##### -##.#.#####.##.#.#..# -###########.#######. -#.##..#####.#####..# -#####..#####.###.### -####.#.############. -####.#.#.##########. diff --git a/2019/input/three.txt b/2019/input/three.txt deleted file mode 100644 index fcb8502..0000000 --- a/2019/input/three.txt +++ /dev/null @@ -1,2 +0,0 @@ -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 deleted file mode 100644 index 54b87b7..0000000 --- a/2019/input/two.txt +++ /dev/null @@ -1 +0,0 @@ -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/nim/day01.nim b/2019/nim/day01.nim new file mode 100644 index 0000000..63c1219 --- /dev/null +++ b/2019/nim/day01.nim @@ -0,0 +1,16 @@ +# Day One: The Tyranny of the Rocket Equation +import os, strutils + +let input: string = paramStr(1) +var sum, fuelsum: int = 0 + +for mass in lines(input): + var fuel = parseInt(mass) div 3 - 2 + sum += fuel + fuelsum += fuel + while fuel > 0: + fuel = fuel div 3 - 2 + fuelsum += max(0, fuel) + +echo sum +echo fuelsum diff --git a/2019/nim/day02.nim b/2019/nim/day02.nim new file mode 100644 index 0000000..c0bfb9b --- /dev/null +++ b/2019/nim/day02.nim @@ -0,0 +1,37 @@ +# Day Two: 1202 Program Alarm +import os, strutils, sequtils + +let input: string = paramStr(1) +var program: seq[int] = map(split(strip(readFile(input)), ','), parseInt) +program[1] = 12 +program[2] = 2 + +proc execute(program: seq[int]): int = + var program: seq[int] = program + var i: int = 0 + while i < len(program): + case program[i] + of 1: + program[program[i+3]] = program[program[i+1]] + program[program[i+2]] + i += 4 + of 2: + program[program[i+3]] = program[program[i+1]] * program[program[i+2]] + i += 4 + of 99: + break + else: + echo("Unsupported code ", program[i], " at ", i) + quit(QuitFailure) + return program[0] + +proc grammar(program: seq[int]): int = + var program: seq[int] = program + for noun in 0 ..< len(program): + for verb in 0 ..< len(program): + program[1] = noun + program[2] = verb + if execute(program) == 19690720: + return 100 * noun + verb + +echo execute(program) +echo grammar(program) diff --git a/2019/nim/day04.nim b/2019/nim/day04.nim new file mode 100644 index 0000000..eb6d933 --- /dev/null +++ b/2019/nim/day04.nim @@ -0,0 +1,37 @@ +# Day Four: Secure Container +import os, strutils, sequtils + +let input: string = paramStr(1) +let bounds: seq[int] = map(split(strip(readFile(input)), '-'), parseInt) +var valid, details: int = 0 + +proc criteria(password: int): bool = + var password: string = $password + for digit in 0 .. 4: + if password[digit] > password[digit+1]: + return false + for digit in 0 .. 4: + if password[digit] == password[digit+1]: + return true + return false + +proc extracriteria(password: int): bool = + var password: string = $password + for digit in 0 .. 4: + if password[digit] > password[digit+1]: + return false + for digit in 0 .. 4: + if password[digit] == password[digit+1]: + if digit == 0 or password[digit] != password[digit-1]: + if digit == 4 or password[digit] != password[digit+2]: + return true + return false + +for password in bounds[0] .. bounds[1]: + if criteria(password): inc(valid) + +for password in bounds[0] .. bounds[1]: + if extracriteria(password): inc(details) + +echo valid +echo details diff --git a/2019/nim/day05.nim b/2019/nim/day05.nim new file mode 100644 index 0000000..87c359e --- /dev/null +++ b/2019/nim/day05.nim @@ -0,0 +1,63 @@ +# Day Five: Sunny with a Chance of Asteroids +import os, strutils, sequtils + +let input: string = paramStr(1) +var program: seq[int] = map(split(strip(readFile(input)), ','), parseInt) + +var i: int = 0 +while i < len(program): + let opcode: int = program[i] mod 100 + + var + mode: int = program[i] div 100 + one: int = i+1 + two: int = i+2 + three: int = i+3 + if len(program)-i > 1 and mode mod 10 == 0: + one = program[one] + if len(program)-i > 2 and mode div 10 mod 10 == 0: + two = program[two] + if len(program)-i > 3 and mode div 100 == 0: + three = program[three] + + case opcode + of 1: # adds + program[three] = program[one] + program[two] + i += 4 + of 2: # multiplies + program[three] = program[one] * program[two] + i += 4 + of 3: # input + write(stdout, "Input: ") + program[one] = parseInt(readLine(stdin)) + i += 2 + of 4: # output + echo program[one] + i += 2 + of 5: # jump-if-true + if program[one] != 0: + i = program[two] + else: + i += 3 + of 6: # jump-if-false + if program[one] == 0: + i = program[two] + else: + i += 3 + of 7: # less than + if program[one] < program[two]: + program[three] = 1 + else: + program[three] = 0 + i += 4 + of 8: # equals + if program[one] == program[two]: + program[three] = 1 + else: + program[three] = 0 + i += 4 + of 99: # terminate + break + else: + echo("Unsupported code ", program[i], " at ", i) + quit(QuitFailure) diff --git a/2019/nim/day08.nim b/2019/nim/day08.nim new file mode 100644 index 0000000..ecf291e --- /dev/null +++ b/2019/nim/day08.nim @@ -0,0 +1,30 @@ +# Day Eight: Space Image Format +import os, strutils, sequtils + +let + input: string = paramStr(1) + digits: string = strip(readFile(input)) + width: int = 25 + height: int = 6 + depth: int = len(digits) div (width * height) + +var min, product: int = width * height +for layer in distribute(@digits, depth): + if count(layer, '0') < min: + min = count(layer, '0') + product = count(layer, '1') * count(layer, '2') +echo product + +for column in 0 ..< height: + for row in 0 ..< width: + for layer in 0 ..< depth: + case digits[(layer * height * width) + (column * width) + row] + of '0': + write(stdout, ' ') + break + of '1': + write(stdout, 'X') + break + else: + discard + write(stdout, '\n') diff --git a/2019/nine.go b/2019/nine.go deleted file mode 100644 index 432d780..0000000 --- a/2019/nine.go +++ /dev/null @@ -1,166 +0,0 @@ -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 deleted file mode 100644 index cf27820..0000000 --- a/2019/one.go +++ /dev/null @@ -1,40 +0,0 @@ -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/one.nim b/2019/one.nim deleted file mode 100644 index 63c1219..0000000 --- a/2019/one.nim +++ /dev/null @@ -1,16 +0,0 @@ -# Day One: The Tyranny of the Rocket Equation -import os, strutils - -let input: string = paramStr(1) -var sum, fuelsum: int = 0 - -for mass in lines(input): - var fuel = parseInt(mass) div 3 - 2 - sum += fuel - fuelsum += fuel - while fuel > 0: - fuel = fuel div 3 - 2 - fuelsum += max(0, fuel) - -echo sum -echo fuelsum diff --git a/2019/seven.go b/2019/seven.go deleted file mode 100644 index d71d827..0000000 --- a/2019/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 -} diff --git a/2019/six.go b/2019/six.go deleted file mode 100644 index 646313d..0000000 --- a/2019/six.go +++ /dev/null @@ -1,25 +0,0 @@ -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 deleted file mode 100644 index 562299a..0000000 --- a/2019/ten.go +++ /dev/null @@ -1,47 +0,0 @@ -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 deleted file mode 100644 index 2c79a18..0000000 --- a/2019/three.go +++ /dev/null @@ -1,156 +0,0 @@ -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 deleted file mode 100644 index 8108c87..0000000 --- a/2019/two.go +++ /dev/null @@ -1,66 +0,0 @@ -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 -} diff --git a/2019/two.nim b/2019/two.nim deleted file mode 100644 index c0bfb9b..0000000 --- a/2019/two.nim +++ /dev/null @@ -1,37 +0,0 @@ -# Day Two: 1202 Program Alarm -import os, strutils, sequtils - -let input: string = paramStr(1) -var program: seq[int] = map(split(strip(readFile(input)), ','), parseInt) -program[1] = 12 -program[2] = 2 - -proc execute(program: seq[int]): int = - var program: seq[int] = program - var i: int = 0 - while i < len(program): - case program[i] - of 1: - program[program[i+3]] = program[program[i+1]] + program[program[i+2]] - i += 4 - of 2: - program[program[i+3]] = program[program[i+1]] * program[program[i+2]] - i += 4 - of 99: - break - else: - echo("Unsupported code ", program[i], " at ", i) - quit(QuitFailure) - return program[0] - -proc grammar(program: seq[int]): int = - var program: seq[int] = program - for noun in 0 ..< len(program): - for verb in 0 ..< len(program): - program[1] = noun - program[2] = verb - if execute(program) == 19690720: - return 100 * noun + verb - -echo execute(program) -echo grammar(program) diff --git a/README.md b/README.md index 510f65d..f33bcd3 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Yearly Advent of Code work. -## 2022 ⭐ 10/10 +## 2022 ⭐ 22/22 ```bash # Nim @@ -26,7 +26,7 @@ cd 2021 python3 01.py input/01.txt ``` -## 2020 ⭐ 37/50 +## 2020 ⭐ 38/50 ```bash # Nim @@ -38,13 +38,13 @@ nim compile --run one.nim input/one.txt ## 2019 ⭐ 10/50 ```bash -cd 2019 - # Go -go run one.go input/one.txt +cd 2019 +go run go/day01.go input/day01.txt # Nim -nim compile --run one.nim input/one.txt +cd .. +nim compile --run nim/day01.nim input/day01.txt ``` ## 2018 ⭐ 6/50 -- cgit v1.2.3-70-g09d2