package main

import (
	"bufio"
	"fmt"
	"log"
	"os"
	"strconv"
)

const MIGHTY = 2020

func main() {
	if err := realMain(); err != nil {
		log.Println(err)
	}
}

func realMain() error {
	nums, err := readFile()
	if err != nil {
		return err
	}

	n, err := findPair(nums)
	if err != nil {
		return err
	}
	log.Println("PAIR:", n)

	t, err := findThree(nums)
	if err != nil {
		return err
	}
	log.Println("THREE:", t)

	return nil
}

func findThree(nums []int) (int, error) {
	for i, n := range nums {
		for j := i + 1; j < len(nums); j++ {
			for k := j + 1; k < len(nums); k++ {
				if n+nums[j]+nums[k] == MIGHTY {
					return n * nums[j] * nums[k], nil
				}
			}
		}
	}
	return 0, fmt.Errorf("triplet have not found")
}

func findPair(nums []int) (int, error) {
	for i, n := range nums {
		for j := i + 1; j < len(nums); j++ {
			if n+nums[j] == MIGHTY {
				return n * nums[j], nil
			}
		}
	}
	return 0, fmt.Errorf("pair have not found")
}

func readFile() ([]int, error) {
	fd, err := os.Open("input.txt")
	if err != nil {
		return nil, err
	}
	defer fd.Close()

	ret := []int{}
	buff := bufio.NewScanner(fd)
	for buff.Scan() {
		curr, err := strconv.Atoi(buff.Text())
		if err != nil {
			return nil, err
		}
		ret = append(ret, curr)
	}
	return ret, nil
}