From 205ecb4acc78093bdf9f8f19f72783ec709a3107 Mon Sep 17 00:00:00 2001 From: David Ashby Date: Sun, 25 Dec 2022 20:42:52 -0700 Subject: [PATCH] day 25 --- 25/main.go | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 25/main.go diff --git a/25/main.go b/25/main.go new file mode 100644 index 0000000..5456a6c --- /dev/null +++ b/25/main.go @@ -0,0 +1,77 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "strconv" + "time" +) + +func mustAtoi(line string) int { + i, _ := strconv.Atoi(line) + return i +} + +func main() { + start := time.Now() + partOne() + duration := time.Since(start) + fmt.Printf("p1: %s\n", duration) +} + +func makeScanner(test bool) *bufio.Scanner { + var f *os.File + if test { + f, _ = os.Open("inputs/testinput") + } else { + f, _ = os.Open("inputs/input") + } + reader := bufio.NewReader(f) + return bufio.NewScanner(reader) +} + +func parseSNAFU(str string) int { + num := 0 + place := 1 + for i := len(str) - 1; i >= 0; i-- { + switch str[i] { + case '2': + num += place * 2 + case '1': + num += place + case '0': + // noop + case '-': + num -= place + case '=': + num -= place * 2 + default: + panic("oh no") + } + place *= 5 + } + return num +} + +func toSNAFU(normal int) string { + num := "" + digits := []string{"0", "1", "2", "=", "-"} + for { + num = digits[normal%5] + num + if normal == 0 { + return num + } + normal = (normal + 2) / 5 + } +} + +func partOne() { + scanner := makeScanner(false) + sum := 0 + for scanner.Scan() { + line := scanner.Text() + sum += parseSNAFU(line) + } + fmt.Println(toSNAFU(sum)[1:]) +}