package main import ( "bufio" "fmt" "os" "sort" "strconv" ) // Task1 ... func Task1(input []int) int { sort.Ints(input) for i := len(input) - 1; i >= 0; i-- { for j := i - 1; j >= 0; j-- { if input[i]+input[j] == 2020 { return input[i] * input[j] } } } return -1 } // Task2 ... func Task2(input []int) int { sort.Ints(input) for i := len(input) - 1; i >= 0; i-- { icurrent := input[i] for j := i - 1; j >= 0; j-- { jcurrent := icurrent + input[j] for k := j - 1; k >= 0; k-- { if jcurrent+input[k] == 2020 { return input[i] * input[j] * input[k] } } } } return -1 } func main() { input := make([]int, 0, 100) file, _ := os.Open("input.txt") scanner := bufio.NewScanner(file) for scanner.Scan() { val, _ := strconv.Atoi(scanner.Text()) input = append(input, val) } file.Close() input1 := make([]int, len(input)) copy(input1, input) result := Task1(input1) fmt.Printf("Task 1: %d\n", result) input2 := make([]int, len(input)) copy(input2, input) result = Task2(input2) fmt.Printf("Task 2: %d\n", result) }