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
}