From e4878ae47c53dc47e78be5fcc85127382bfe56c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Depreeuw?= Date: Sun, 6 Dec 2020 15:36:23 +0100 Subject: [PATCH] Solve day 1, part 1 --- AdventOfCode2020.cabal | 34 +++++++ CHANGELOG.md | 5 ++ Main.hs | 14 +++ Setup.hs | 2 + hie.yaml | 7 ++ input/day1 | 200 +++++++++++++++++++++++++++++++++++++++++ src/Day1.hs | 19 ++++ 7 files changed, 281 insertions(+) create mode 100644 AdventOfCode2020.cabal create mode 100644 CHANGELOG.md create mode 100644 Main.hs create mode 100644 Setup.hs create mode 100644 hie.yaml create mode 100644 input/day1 create mode 100644 src/Day1.hs diff --git a/AdventOfCode2020.cabal b/AdventOfCode2020.cabal new file mode 100644 index 0000000..1584ace --- /dev/null +++ b/AdventOfCode2020.cabal @@ -0,0 +1,34 @@ +cabal-version: 2.4 +-- Initial package description 'AdventOfCode2020.cabal' generated by 'cabal +-- init'. For further documentation, see +-- http://haskell.org/cabal/users-guide/ + +name: AdventOfCode2020 +version: 0.1.0.0 +-- synopsis: +-- description: +-- bug-reports: +-- license: +license-file: LICENSE +author: Gaƫl Depreeuw +maintainer: gael@depreeuw.dev +-- copyright: +-- category: +extra-source-files: CHANGELOG.md, README.md + +library + exposed-modules: Day1 + -- other-modules: + -- other-extensions: + build-depends: base ^>=4.13.0.0 + , containers ^>=0.6.4.1 + hs-source-dirs: src + default-language: Haskell2010 + +executable AdventOfCode2020 + main-is: Main.hs + -- other-modules: + -- other-extensions: + build-depends: base ^>=4.13.0.0, AdventOfCode2020 + -- hs-source-dirs: + default-language: Haskell2010 diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..86db2f6 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,5 @@ +# Revision history for AdventOfCode2020 + +## 0.1.0.0 -- YYYY-mm-dd + +* First version. Released on an unsuspecting world. diff --git a/Main.hs b/Main.hs new file mode 100644 index 0000000..f20794f --- /dev/null +++ b/Main.hs @@ -0,0 +1,14 @@ +module Main where + +import qualified Day1 (fixExpenseReport) + +day1 :: IO () +day1 = do + r <- readFile "./input/day1" + putStr "[Day 1-1] fix: " + print . Day1.fixExpenseReport . fmap read . lines $ r + + +main :: IO () +main = do + day1 diff --git a/Setup.hs b/Setup.hs new file mode 100644 index 0000000..9a994af --- /dev/null +++ b/Setup.hs @@ -0,0 +1,2 @@ +import Distribution.Simple +main = defaultMain diff --git a/hie.yaml b/hie.yaml new file mode 100644 index 0000000..2d35bd5 --- /dev/null +++ b/hie.yaml @@ -0,0 +1,7 @@ +cradle: + cabal: + - path: "src" + component: "lib:AdventOfCode2020" + + - path: "./Main.hs" + component: "AdventOfCode2020:exe:AdventOfCode2020" diff --git a/input/day1 b/input/day1 new file mode 100644 index 0000000..4c0c3b1 --- /dev/null +++ b/input/day1 @@ -0,0 +1,200 @@ +1834 +1546 +1119 +1870 +1193 +1198 +1542 +1944 +1817 +1249 +1361 +1856 +1258 +1425 +1835 +1520 +1792 +1130 +2004 +1366 +1549 +1347 +1507 +1699 +1491 +1557 +1865 +1948 +1199 +1229 +1598 +1756 +1643 +1306 +1838 +1157 +1745 +1603 +1972 +1123 +1963 +1759 +1118 +1526 +1695 +1661 +1262 +1117 +1844 +1922 +1997 +1630 +1337 +1721 +1147 +1848 +1476 +1975 +1942 +1569 +1126 +1313 +1449 +1206 +1722 +1534 +1706 +1596 +1700 +1811 +906 +1666 +1945 +1271 +1629 +1456 +1316 +1636 +1884 +1556 +1317 +1393 +1953 +1658 +2005 +1252 +1878 +1691 +60 +1872 +386 +1369 +1739 +1460 +1267 +1935 +1992 +1310 +1818 +1320 +1437 +1486 +1205 +1286 +1670 +1577 +1237 +1558 +1937 +1938 +1656 +1220 +1732 +1647 +1857 +1446 +1516 +1450 +1860 +1625 +1377 +1312 +1588 +1895 +1967 +1567 +1582 +1428 +1415 +1731 +1919 +1651 +1597 +1982 +1576 +1172 +1568 +1867 +1660 +1754 +1227 +1121 +1733 +537 +1809 +1322 +1876 +1665 +1124 +1461 +1888 +1368 +1235 +1479 +1529 +1148 +1996 +1939 +1340 +1531 +1438 +1897 +1152 +1321 +1770 +897 +1750 +1111 +1772 +1615 +1798 +1359 +1470 +1610 +1362 +1973 +1892 +1830 +599 +1341 +1681 +1572 +1873 +42 +1246 +1447 +1800 +1524 +1214 +1784 +1664 +1882 +1989 +1797 +1211 +1170 +1854 +1287 +1641 +1760 \ No newline at end of file diff --git a/src/Day1.hs b/src/Day1.hs new file mode 100644 index 0000000..716a947 --- /dev/null +++ b/src/Day1.hs @@ -0,0 +1,19 @@ +module Day1 (fixExpenseReport) where + +import qualified Data.IntSet as DIS +import Data.Maybe (mapMaybe) + +yearToFind :: Int +yearToFind = 2020 + +-- Turn the list into an IntSet. For each element in the set, look up the +-- number in the set to make it 2020. If found, return the multiplication of +-- the two numbers. +fixExpenseReport :: [Int] -> Int +fixExpenseReport expenses = + let s = DIS.fromList expenses in + head $ mapMaybe (`findOther` s) expenses + +findOther :: Int -> DIS.IntSet -> Maybe Int +findOther n s = let n' = yearToFind - n in + if DIS.member n' s then Just (n*n') else Nothing \ No newline at end of file