aoc2020/day1.ml

58 lines
2.3 KiB
OCaml
Raw Normal View History

2020-12-02 01:03:33 +01:00
let input_day1 = [
1768; 1847; 1905; 1713; 1826; 1846; 1824; 1976; 1687; 1867; 1665; 1606; 1946;
1886; 1858; 346 ; 1739; 1752; 1700; 1922; 1865; 1609; 1617; 1932; 1346; 1213;
1933; 834 ; 1598; 1191; 1979; 1756; 1216; 1820; 1792; 1537; 1341; 1390; 1709;
1458; 1808; 1885; 1679; 1977; 1869; 1614; 1938; 1622; 1868; 1844; 1969; 1822;
1510; 1994; 1337; 1883; 1519; 1766; 1554; 1825; 1828; 1972; 1380; 1878; 1345;
1469; 1794; 1898; 1805; 1911; 1913; 1910; 1318; 1862; 1921; 1753; 1823; 1896;
1316; 1381; 1430; 1962; 1958; 1702; 1923; 1993; 1789; 2002; 1788; 1970; 1955;
1887; 1870; 225 ; 1696; 1975; 699 ; 294 ; 1605; 1500; 1777; 1750; 1857; 1540;
1329; 1974; 1947; 1516; 1925; 1945; 350 ; 1669; 1775; 1536; 1871; 1917; 1249;
1971; 2009; 1585; 1986; 1701; 1832; 1754; 1195; 1697; 1941; 1919; 2006; 1667;
1816; 1765; 1631; 2003; 1861; 1000; 1791; 1786; 1843; 1939; 1951; 269 ; 1790;
1895; 1355; 1833; 1466; 1998; 1806; 1881; 1234; 1856; 1619; 1727; 1874; 1877;
195 ; 1783; 1797; 2010; 1764; 1863; 1852; 1841; 1892; 1562; 1650; 1942; 1695;
1730; 1965; 1632; 1981; 1900; 1991; 1884; 1278; 1062; 1394; 1999; 2000; 1827;
1873; 1926; 1434; 1802; 1579; 1879; 1671; 1549; 1875; 1838; 1338; 1864; 1718;
1800; 1928; 1749; 1990; 1705;
]
let rec find_match el lst =
match lst with
| [] -> None
| h :: t -> if h + el = 2020 then Some (h, el)
else find_match el t
let rec get_2020_pair l =
match l with
| [] -> 0
| h :: t -> match find_match h t with
| None -> get_2020_pair t
| Some (x , y) -> x * y
let rec get_2020_triple l =
let rec aux x xs =
match xs with
| [] -> None
| y :: ys -> match find_match (x + y) ys with
| None -> aux x ys
| Some (z , _) -> Some (x, y, z) in
match l with
| [] -> 0
| x :: xs -> match aux x xs with
| None -> get_2020_triple xs
| Some (x, y, z) -> x * y * z
let test_input = [1721; 979; 366; 299; 675; 1456;]
let () =
assert ((get_2020_pair test_input) = 514579)
let () =
print_endline (string_of_int (get_2020_pair input_day1))
let () =
assert ((get_2020_triple test_input) = 241861950)
let () =
print_endline (string_of_int (get_2020_triple input_day1))