From e51c8425e5c77abc40124a4711d4e8a2ab4cfc94 Mon Sep 17 00:00:00 2001 From: Michael Bobbitt Date: Thu, 19 Dec 2024 20:24:24 -0500 Subject: [PATCH] paused on day5 --- day5/main.go | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++ day5/run | 4 ++ 2 files changed, 106 insertions(+) create mode 100644 day5/main.go create mode 100755 day5/run diff --git a/day5/main.go b/day5/main.go new file mode 100644 index 0000000..c04858c --- /dev/null +++ b/day5/main.go @@ -0,0 +1,102 @@ +package main + +import ( + "fmt" + "os" + "strconv" + "strings" +) + +func main() { + if len(os.Args) < 2 { + panic("Provide input file") + } + inputFile := os.Args[1] + + part1, part2 := solution(inputFile) + fmt.Printf("(%s) Part 1: %d\n(%s) Part 2: %d\n:", inputFile, part1, inputFile, part2) +} + +type Rule struct { + Left int + Right int +} + +func solution(inputFile string) (int, int) { + input, err := os.Open(inputFile) + if err != nil { + panic(err) + } + defer input.Close() + + var rules []Rule + for { + var x, y int + _, err := fmt.Fscanf(input, "%d|%d\n", &x, &y) + if err != nil { + break + } + rules = append(rules, Rule{Left: x, Right: y}) + } + + // for _, rule := range rules { + // fmt.Printf("%d|%d\n", rule.Left, rule.Right) + // } + + // checking if the updates are correct + var validSum, invalidSum int + for { + var numStr string + _, err := fmt.Fscanf(input, "%s\n", &numStr) + if err != nil { + break + } + parts := strings.Split(numStr, ",") + updatePages := make([]int, 0) + for _, part := range parts { + partInt, _ := strconv.Atoi(part) + updatePages = append(updatePages, partInt) + } + + validUpdate := true + for curr := 0; curr < len(updatePages); curr++ { + for check := 0; check < len(updatePages); check++ { + if curr == check { + continue + } + if curr < check { + valid := isValid(rules, updatePages[curr], updatePages[check]) + if !valid { + fmt.Printf("Invalid %v\n", updatePages) + validUpdate = false + break + } + } else { + valid := isValid(rules, updatePages[check], updatePages[curr]) + if !valid { + fmt.Printf("Invalid %v\n", updatePages) + validUpdate = false + } + } + } + if !validUpdate { + break + } + } + + if validUpdate { + validSum += updatePages[len(updatePages)/2] + } + } + + return validSum, invalidSum +} + +func isValid(rules []Rule, left, right int) bool { + for _, rule := range rules { + if rule.Left == right && rule.Right == left { + return false + } + } + return true +} diff --git a/day5/run b/day5/run new file mode 100755 index 0000000..2ea19e2 --- /dev/null +++ b/day5/run @@ -0,0 +1,4 @@ +#!/bin/bash + +go build -o ./bin/solution ./main.go +./bin/solution "$1"