package main import ( "bufio" "fmt" "log" "math" "os" "strconv" ) func main() { inp := StdinToString() part1(inp) part2(inp) } func part1(inp string) { sum := 0 for k := range inp { tstIdx := getCompareIndex(k, 1, len(inp)) sum += getCompareResult(inp[k], inp[tstIdx]) } fmt.Println("Part 1:", sum) } func part2(inp string) { sum := 0 for k := range inp { tstIdx := getCompareIndex(k, (len(inp) / 2), len(inp)) sum += getCompareResult(inp[k], inp[tstIdx]) } fmt.Println("Part 2:", sum) } func getCompareIndex(curr, add, max int) int { return int(math.Mod(float64(curr+add), float64(max))) } func getCompareResult(c1, c2 byte) int { if c1 != c2 { return 0 } return Atoi(string(c1)) } func StdinToString() string { var input string scanner := bufio.NewScanner(os.Stdin) for scanner.Scan() { input += scanner.Text() } return input } func Atoi(i string) int { var ret int var err error if ret, err = strconv.Atoi(i); err != nil { log.Fatal("Invalid Atoi") } return ret }