parent
8967218edc
commit
e4878ae47c
7 changed files with 281 additions and 0 deletions
@ -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 |
@ -0,0 +1,5 @@ |
||||
# Revision history for AdventOfCode2020 |
||||
|
||||
## 0.1.0.0 -- YYYY-mm-dd |
||||
|
||||
* First version. Released on an unsuspecting world. |
@ -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 |
@ -0,0 +1,7 @@ |
||||
cradle: |
||||
cabal: |
||||
- path: "src" |
||||
component: "lib:AdventOfCode2020" |
||||
|
||||
- path: "./Main.hs" |
||||
component: "AdventOfCode2020:exe:AdventOfCode2020" |
@ -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 |
@ -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 |
Loading…
Reference in new issue