From e105098728a163662c66dda02a672b43c0e4eac3 Mon Sep 17 00:00:00 2001 From: alexchao26 Date: Tue, 1 Dec 2020 00:31:43 -0500 Subject: [PATCH] 2020 day1 - two/three sum --- 2020/day01/input.txt | 200 ++++++++++++++++++++++++++++++++++++++++ 2020/day01/main.go | 40 +++++++- 2020/day01/main_test.go | 22 ++++- 2020/day01/prompt.md | 0 4 files changed, 257 insertions(+), 5 deletions(-) create mode 100755 2020/day01/input.txt create mode 100755 2020/day01/prompt.md diff --git a/2020/day01/input.txt b/2020/day01/input.txt new file mode 100755 index 0000000..277bb69 --- /dev/null +++ b/2020/day01/input.txt @@ -0,0 +1,200 @@ +1593 +1575 +1583 +1609 +1835 +2008 +1638 +1396 +1833 +1524 +1778 +1574 +1653 +1962 +1831 +1557 +1847 +1587 +1876 +1914 +1565 +1585 +1713 +35 +1862 +1885 +1735 +1497 +1989 +1871 +1923 +1917 +1719 +1797 +1222 +1493 +1939 +1139 +1260 +1622 +1625 +1683 +1742 +1996 +1579 +1703 +1692 +1920 +1536 +1965 +1936 +1947 +1800 +1556 +1633 +1530 +1612 +1764 +1810 +1845 +1750 +1854 +1973 +1512 +1856 +1568 +1634 +1630 +1602 +1555 +1681 +1844 +1544 +1909 +1690 +1851 +1785 +863 +1866 +1988 +1715 +1881 +1570 +1380 +1956 +777 +1693 +1717 +1724 +1975 +790 +1484 +1822 +1922 +1963 +1741 +1809 +1896 +1837 +1980 +1244 +1832 +1834 +1643 +1775 +1818 +1503 +1802 +1957 +1174 +1826 +1649 +1941 +1571 +1930 +1629 +1502 +2002 +1700 +1880 +1723 +1803 +2007 +1543 +1872 +1993 +1740 +1919 +1688 +1067 +1680 +1580 +1558 +1772 +1694 +1480 +1257 +1796 +2001 +537 +1701 +1613 +1784 +1559 +1482 +1968 +1604 +983 +1842 +1817 +1850 +1788 +1982 +1535 +1615 +453 +1895 +1443 +1308 +1533 +1714 +1765 +1037 +1992 +1843 +1883 +1981 +1525 +1038 +1540 +1766 +1886 +1546 +1716 +810 +1899 +1708 +1508 +1870 +1051 +1867 +1840 +1617 +1726 +1566 +1616 +1948 +1771 +1627 +1994 +1486 +1913 +1600 +1983 +1501 +2003 +1667 +1620 +1943 +1674 diff --git a/2020/day01/main.go b/2020/day01/main.go index 6058282..f663b11 100644 --- a/2020/day01/main.go +++ b/2020/day01/main.go @@ -3,6 +3,7 @@ package main import ( "flag" "fmt" + "strings" "github.com/alexchao26/advent-of-code-go/util" ) @@ -23,9 +24,44 @@ func main() { } func part1(input string) int { - return 0 + parsed := parseInputs(input) + + seen := map[int]bool{} + + for _, n := range parsed { + if seen[n] { + return n * (2020 - n) + } + seen[2020-n] = true + } + + return -1 // should not be hit } func part2(input string) int { - return 0 + parsed := parseInputs(input) + + // O(n^3) is fast enough + for i := 0; i < len(parsed); i++ { + for j := i + 1; j < len(parsed); j++ { + for k := j + 1; k < len(parsed); k++ { + if parsed[i]+parsed[j]+parsed[k] == 2020 { + return parsed[i] * parsed[j] * parsed[k] + } + } + } + } + + return -1 // should not be hit +} + +func parseInputs(input string) []int { + split := strings.Split(input, "\n") + + nums := []int{} + for _, n := range split { + nums = append(nums, util.StrToInt(n)) + } + + return nums } diff --git a/2020/day01/main_test.go b/2020/day01/main_test.go index e267bfa..7438091 100644 --- a/2020/day01/main_test.go +++ b/2020/day01/main_test.go @@ -1,6 +1,10 @@ package main -import "testing" +import ( + "testing" + + "github.com/alexchao26/advent-of-code-go/util" +) var tests1 = []struct { name string @@ -8,7 +12,13 @@ var tests1 = []struct { input string // add extra args if needed }{ - // {"actual", ACTUAL_ANSWER, util.ReadFile("input.txt")}, + {"example", 514579, `1721 +979 +366 +299 +675 +1456`}, + {"actual", 1019371, util.ReadFile("input.txt")}, } func TestPart1(t *testing.T) { @@ -28,7 +38,13 @@ var tests2 = []struct { input string // add extra args if needed }{ - // {"actual", ACTUAL_ANSWER, util.ReadFile("input.txt")}, + {"example", 241861950, `1721 +979 +366 +299 +675 +1456`}, + {"actual", 278064990, util.ReadFile("input.txt")}, } func TestPart2(t *testing.T) { diff --git a/2020/day01/prompt.md b/2020/day01/prompt.md new file mode 100755 index 0000000..e69de29