package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
  "slices"
)

func totalDistance(firstList, secondList []int) int {
  slices.Sort(firstList)
  slices.Sort(secondList)
//  fmt.Println(thirdList)
  result := 0
  for i := range firstList {
    if firstList[i] > secondList[i] {
      result = result + firstList[i] - secondList[i]
    } else {
      result = result + secondList[i] - firstList[i]
    }
  }
  return result
}

func similarityScore(firstList, secondList []int) int {
  result := 0
  appearances := []int{}
  for i:=range firstList {
    count := 0
    for j:=range secondList {
      if firstList[i] == secondList[j] {
        count = count + 1
      }
    }
    appearances = append(appearances, count)
    result = result + firstList[i] * count
  }
  return result
}

func main() {
	filePath := "input"
	file, err := os.Open(filePath)
	if err != nil {
		fmt.Printf("Error opening file: %v\n", err)
		return
	}
	defer file.Close()
	var firstList []int
	var secondList []int
	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		// Split the line into parts
		line := scanner.Text()
		parts := strings.Fields(line) // Fields splits by whitespace
		// Convert parts to integers
		first, err1 := strconv.Atoi(parts[0])
		second, err2 := strconv.Atoi(parts[1])
		if err1 != nil || err2 != nil {
			fmt.Printf("Error parsing numbers on line: %s\n", line)
			continue
		}
		firstList = append(firstList, first)
		secondList = append(secondList, second)
	}
  fmt.Println(totalDistance(firstList, secondList))
  fmt.Println(similarityScore(firstList, secondList))
}

