75 lines
1.2 KiB
Go
75 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
|
)
|
|
|
|
func main() {
|
|
inp := h.StdinToStringSlice()
|
|
fmt.Println("# Part 1")
|
|
fmt.Println(part1(inp))
|
|
fmt.Println("# Part 2")
|
|
fmt.Println(part2(inp))
|
|
}
|
|
|
|
func part1(inp []string) int {
|
|
var ret int
|
|
for i := range inp {
|
|
sack := inp[i]
|
|
c1, c2 := sack[:len(sack)/2], sack[len(sack)/2:]
|
|
var dupe byte
|
|
for _, c1w := range c1 {
|
|
for _, c2w := range c2 {
|
|
if c1w == c2w {
|
|
dupe = byte(c1w)
|
|
break
|
|
}
|
|
}
|
|
if dupe != 0 {
|
|
break
|
|
}
|
|
}
|
|
if dupe >= 'a' {
|
|
ret += int(dupe - 'a' + 1)
|
|
} else if dupe >= 'A' {
|
|
ret += int(dupe - 'A' + 27)
|
|
}
|
|
}
|
|
return ret
|
|
}
|
|
|
|
func part2(inp []string) int {
|
|
var ret int
|
|
elves := []string{"", "", ""}
|
|
for i := range inp {
|
|
elves[i%3] = inp[i]
|
|
if i%3 == 2 {
|
|
var badge byte
|
|
// Check 'em
|
|
for _, e1 := range elves[0] {
|
|
for _, e2 := range elves[1] {
|
|
for _, e3 := range elves[2] {
|
|
if e1 == e2 && e2 == e3 {
|
|
badge = byte(e1)
|
|
}
|
|
}
|
|
if badge != 0 {
|
|
break
|
|
}
|
|
}
|
|
if badge != 0 {
|
|
break
|
|
}
|
|
}
|
|
if badge >= 'a' {
|
|
ret += int(badge - 'a' + 1)
|
|
} else if badge >= 'A' {
|
|
ret += int(badge - 'A' + 27)
|
|
}
|
|
}
|
|
}
|
|
return ret
|
|
}
|