package main import ( "bufio" "fmt" "log" "os" "strconv" "strings" ) func main() { inp := StdinToStringSlice() part1(inp) part2(inp) } func part1(inp []string) { var twos, threes int for _, v := range inp { var vintwos, vinthrees bool for i := range v { if !vintwos && strings.Count(v, string(v[i])) == 2 { twos++ vintwos = true } if !vinthrees && strings.Count(v, string(v[i])) == 3 { threes++ vinthrees = true } } } fmt.Println(twos * threes) } func part2(inp []string) { for _, v1 := range inp { for _, v2 := range inp { if v1 == v2 { continue } var diff, diffIdx int for k := range v1 { if v1[k] != v2[k] { diff++ diffIdx = k } if diff > 1 { continue } } if diff == 1 { fmt.Println(v1[:diffIdx] + v1[diffIdx+1:]) return } } } } func StdinToStringSlice() []string { var input []string scanner := bufio.NewScanner(os.Stdin) for scanner.Scan() { input = append(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 }