package day03 import ( "strings" // "fmt" mapset "github.com/deckarep/golang-set/v2" ) func Part1(input string) int { var sum int = 0 lines := strings.Split(input, "\n") for _, line := range lines { c1 := []rune(line[:len(line)/2]) c1set := mapset.NewSet[rune](c1...) c2 := []rune(line[len(line)/2:]) c2set := mapset.NewSet[rune](c2...) for _, v := range c1set.Intersect(c2set).ToSlice() { sum += getValue(v) } } return sum } func getValue(v rune) int { if v >= 'a' && v <= 'z' { return int(v) - int('a') + 1 } if v >= 'A' && v <= 'Z' { return int(v) - int('A') + 27 } return 0 } func Part2(input string) int { var sum int = 0 var idx int = 0 lines := strings.Split(input, "\n") for idx=0; idx < len(lines); idx += 3 { c1 := []rune(lines[idx]) c1set := mapset.NewSet[rune](c1...) c2 := []rune(lines[idx+1]) c2set := mapset.NewSet[rune](c2...) c3 := []rune(lines[idx+2]) c3set := mapset.NewSet[rune](c3...) for _, v := range c1set.Intersect(c2set).Intersect(c3set).ToSlice() { sum += getValue(v) } } return sum }