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)
}