This commit is contained in:
2022-12-23 19:45:56 -08:00
commit 8792e5275a
77 changed files with 31154 additions and 0 deletions

92
solutions/day3/day3.go Normal file
View File

@@ -0,0 +1,92 @@
package day3
import (
"bufio"
"fmt"
"os"
)
func in_set(target rune, set []rune) bool {
for _, char := range set {
if char == target {
return true
}
}
return false
}
func priority(value rune) int {
var base_value int = 0
if value >= 'A' && value <= 'Z' {
base_value = int('A') - 27
}
if value >= 'a' && value <= 'z' {
base_value = int('a') - 1
}
return int(value) - base_value
}
func part1_addition(runes []rune) int {
var total int = 0
midpoint := len(runes) / 2
left_runes := runes[0:midpoint]
right_runes := runes[midpoint:]
for pos, char := range left_runes {
if !in_set(char, left_runes[0:pos]) {
if in_set(char, right_runes) {
total += priority(char)
}
}
}
return total
}
func score_badge(set1 []rune, set2 []rune, set3 []rune) int {
for pos, char := range set1 {
if !in_set(char, set1[0:pos]) {
if in_set(char, set2) && in_set(char, set3) {
return priority(char)
}
}
}
fmt.Println("PANIC: Couldn't find overlapping badge item")
return 0
}
func Run(filename string) {
file, err := os.Open(filename)
if err != nil {
fmt.Println("Error opening file:", err)
return
}
scanner := bufio.NewScanner(file)
scanner.Split(bufio.ScanLines)
var total_overlap int = 0
var total_badge int = 0
var grouping [][]rune = [][]rune{}
for scanner.Scan() {
line := scanner.Text()
runes := []rune(line)
total_overlap += part1_addition(runes)
grouping = append(grouping, runes)
if len(grouping) == 3 {
total_badge += score_badge(grouping[0], grouping[1], grouping[2])
grouping = [][]rune{}
}
}
file.Close()
fmt.Println("Total initial score is", total_overlap)
fmt.Println("Total badge score is", total_badge)
}