From a6c3bd02248717ca46ef822e362fea8c5ca76544 Mon Sep 17 00:00:00 2001 From: Vladan Popovic Date: Wed, 2 Dec 2020 01:03:33 +0100 Subject: [PATCH] day 1 --- day1.ml | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 day1.ml diff --git a/day1.ml b/day1.ml new file mode 100644 index 0000000..326ef44 --- /dev/null +++ b/day1.ml @@ -0,0 +1,57 @@ +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))