package main import ( "fmt" "os" "strings" "strconv" "sort" ) func check(e error) { if e != nil { panic(e) } } func count_sorted(list []int, elem int) int { counter := 0 for i := range list { if list[i] == elem { counter++ } else if counter > 0 { break } } return counter } func main() { // read in file as lines dat, err := os.ReadFile("data.txt") check(err) lines := strings.Split(string(dat), "\n") // construct lists left_list := []int{} right_list := []int{} for i := range len(lines) - 1 { numbers := strings.Split(lines[i], " ") left_num, err := strconv.Atoi(numbers[0]) check(err) right_num, err := strconv.Atoi(numbers[1]) check(err) left_list = append(left_list, left_num) right_list = append(right_list, right_num) } // sort right_list sort.Ints(right_list) // count similarity score := 0 for i := range left_list { score += left_list[i] * count_sorted(right_list, left_list[i]) } fmt.Println(score) }