package main import ( "fmt" h "git.bullercodeworks.com/brian/adventofcode/helpers" ) func main() { inp := h.StdinToStringSlice() part1(inp) part2(inp) } func part1(inp []string) { var res int for i := range inp { wrk := inp[i] best, tPos := []byte{'0', '0'}, -1 for j := range best { best[j], tPos = findBest(wrk, (len(best)-j)-1) wrk = wrk[tPos+1:] } res += h.Atoi(string(best)) } fmt.Println("# Part 1") fmt.Println(res) } func part2(inp []string) { var res int for i := range inp { wrk := inp[i] best, tPos := []byte{'0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'}, -1 for j := range best { best[j], tPos = findBest(wrk, (len(best)-j)-1) wrk = wrk[tPos+1:] } res += h.Atoi(string(best)) } fmt.Println("# Part 2") fmt.Println(res) } func findBest(inp string, rem int) (byte, int) { var best byte var pos int for i := 0; i < len(inp)-rem; i++ { if inp[i] > best { best, pos = inp[i], i } } return best, pos }