From 7c828a410496da7893750cf821a1d0502bc0d4ab Mon Sep 17 00:00:00 2001 From: George Wensor Date: Sun, 5 Dec 2021 17:18:04 +0000 Subject: [PATCH] days 1-5 --- .gitignore | 1 - 01/input.txt | 2000 +++++++++++++++++++++++++++++++++ 01/main.js | 16 + 02/input.txt | 1000 +++++++++++++++++ 02/main.js | 23 + 03/input.txt | 1000 +++++++++++++++++ 03/main.go | 92 ++ 04/input.txt | 601 ++++++++++ 04/main.js | 51 + 05/input.txt | 500 +++++++++ 05/main.go | 109 ++ boilerplate/cc/boilerplate.cc | 19 +- boilerplate/cc/boilerplate.hh | 1 + 13 files changed, 5411 insertions(+), 2 deletions(-) create mode 100644 01/input.txt create mode 100644 01/main.js create mode 100644 02/input.txt create mode 100644 02/main.js create mode 100644 03/input.txt create mode 100644 03/main.go create mode 100644 04/input.txt create mode 100644 04/main.js create mode 100644 05/input.txt create mode 100644 05/main.go diff --git a/.gitignore b/.gitignore index 1e79089..722d5e7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ .vscode -*.txt diff --git a/01/input.txt b/01/input.txt new file mode 100644 index 0000000..ad0a3bd --- /dev/null +++ b/01/input.txt @@ -0,0 +1,2000 @@ +130 +142 +148 +147 +157 +160 +162 +160 +165 +164 +171 +169 +160 +165 +167 +195 +197 +193 +192 +188 +192 +190 +189 +193 +215 +214 +191 +189 +191 +199 +188 +191 +196 +200 +215 +175 +176 +187 +178 +169 +172 +168 +181 +180 +163 +173 +206 +192 +175 +177 +180 +186 +216 +220 +212 +211 +213 +215 +208 +207 +208 +206 +204 +201 +196 +191 +192 +213 +211 +217 +213 +225 +232 +237 +236 +241 +249 +250 +244 +243 +256 +260 +253 +252 +278 +275 +279 +293 +292 +290 +302 +300 +297 +296 +306 +302 +292 +298 +297 +301 +302 +305 +312 +310 +305 +306 +313 +331 +332 +330 +335 +333 +329 +328 +345 +347 +346 +334 +331 +332 +333 +336 +338 +344 +342 +348 +357 +360 +366 +368 +367 +357 +358 +355 +356 +360 +364 +374 +366 +371 +346 +333 +332 +333 +350 +351 +350 +351 +360 +364 +365 +355 +380 +381 +386 +381 +384 +386 +388 +390 +416 +415 +440 +438 +436 +438 +439 +440 +443 +448 +460 +459 +455 +453 +445 +447 +444 +439 +446 +457 +454 +455 +451 +450 +449 +450 +454 +456 +450 +449 +471 +474 +476 +480 +479 +486 +493 +495 +505 +504 +514 +515 +519 +521 +516 +506 +507 +525 +541 +529 +528 +549 +556 +560 +578 +584 +592 +591 +593 +583 +552 +536 +531 +532 +538 +536 +542 +541 +545 +549 +563 +565 +567 +573 +572 +570 +569 +570 +550 +545 +561 +553 +554 +536 +537 +538 +539 +540 +543 +576 +575 +578 +570 +581 +584 +585 +590 +588 +590 +595 +590 +592 +590 +587 +588 +594 +590 +592 +584 +589 +600 +602 +606 +607 +606 +607 +608 +623 +621 +623 +632 +637 +633 +630 +631 +622 +619 +627 +619 +585 +573 +574 +578 +574 +573 +574 +579 +581 +595 +596 +617 +626 +628 +613 +618 +623 +612 +602 +601 +605 +586 +594 +604 +606 +608 +609 +606 +607 +615 +578 +587 +592 +597 +598 +594 +555 +549 +550 +549 +550 +549 +548 +540 +532 +525 +526 +538 +548 +547 +548 +553 +555 +560 +555 +553 +557 +566 +563 +564 +558 +561 +566 +563 +562 +559 +548 +551 +543 +561 +550 +569 +570 +568 +569 +571 +572 +571 +574 +575 +577 +576 +579 +580 +577 +579 +572 +559 +568 +569 +565 +559 +560 +582 +581 +573 +570 +571 +555 +566 +558 +548 +565 +580 +589 +585 +586 +585 +580 +579 +573 +557 +559 +558 +535 +539 +537 +550 +549 +586 +590 +591 +592 +593 +594 +595 +592 +591 +593 +599 +615 +611 +620 +631 +632 +619 +621 +623 +657 +656 +655 +663 +664 +669 +673 +676 +677 +681 +677 +680 +681 +685 +683 +682 +681 +680 +679 +688 +686 +685 +665 +684 +691 +711 +718 +719 +725 +719 +723 +716 +711 +710 +715 +717 +724 +726 +725 +733 +731 +734 +754 +755 +760 +759 +754 +755 +759 +765 +756 +769 +768 +764 +763 +765 +774 +777 +768 +778 +786 +784 +792 +785 +783 +788 +794 +795 +776 +777 +778 +777 +774 +786 +785 +795 +800 +799 +798 +801 +815 +822 +833 +839 +837 +797 +799 +804 +795 +827 +833 +832 +824 +828 +825 +832 +841 +869 +867 +866 +865 +861 +863 +867 +834 +831 +838 +844 +865 +869 +866 +882 +887 +906 +900 +922 +914 +916 +917 +914 +908 +924 +934 +942 +934 +936 +948 +930 +925 +923 +931 +934 +909 +910 +909 +902 +903 +907 +909 +907 +908 +909 +905 +900 +901 +907 +908 +932 +924 +916 +917 +916 +913 +912 +911 +910 +940 +930 +929 +935 +945 +942 +959 +952 +953 +948 +944 +962 +961 +927 +942 +943 +946 +958 +977 +976 +973 +982 +986 +992 +989 +986 +995 +1010 +1023 +1018 +1019 +1015 +1002 +1005 +990 +1000 +967 +970 +985 +986 +988 +1034 +1039 +1034 +1031 +1028 +1029 +1030 +1033 +1014 +1004 +1006 +991 +1003 +1000 +1003 +1005 +994 +996 +995 +996 +1008 +1003 +1004 +1018 +1013 +1004 +999 +984 +974 +975 +973 +974 +978 +979 +992 +994 +1000 +995 +994 +1029 +1020 +1019 +1018 +1017 +1006 +1005 +1009 +977 +999 +996 +978 +997 +998 +999 +1020 +1017 +1018 +1019 +1017 +1026 +1027 +1031 +1032 +1035 +1040 +1038 +1045 +1048 +1052 +1038 +1041 +1040 +1039 +1040 +1039 +1040 +1027 +1031 +1036 +1059 +1047 +1050 +1038 +1036 +1039 +1044 +1047 +1040 +1057 +1049 +1050 +1053 +1051 +1045 +1036 +1035 +1032 +1045 +1034 +1026 +996 +995 +993 +995 +985 +984 +991 +989 +990 +993 +995 +986 +980 +979 +986 +991 +978 +986 +967 +977 +969 +964 +966 +959 +952 +963 +960 +961 +962 +943 +948 +944 +957 +958 +944 +937 +941 +927 +918 +919 +912 +925 +896 +899 +898 +888 +902 +903 +907 +906 +888 +891 +892 +891 +872 +873 +888 +892 +893 +914 +917 +940 +938 +922 +921 +920 +901 +904 +901 +872 +887 +893 +890 +891 +909 +890 +893 +884 +892 +893 +903 +918 +921 +927 +915 +926 +927 +947 +944 +956 +962 +970 +982 +977 +986 +968 +976 +978 +980 +986 +988 +981 +980 +979 +983 +990 +1000 +1002 +1000 +1002 +1003 +1004 +1007 +1005 +1013 +1016 +997 +996 +989 +1023 +1027 +1023 +1010 +1009 +1011 +1012 +994 +993 +1009 +1022 +1024 +1037 +1050 +1059 +1056 +1055 +1054 +1055 +1054 +1053 +1047 +1044 +1046 +1044 +1057 +1059 +1061 +1060 +1063 +1056 +1054 +1053 +1059 +1056 +1051 +1055 +1056 +1050 +1049 +1054 +1070 +1079 +1082 +1081 +1082 +1084 +1081 +1087 +1103 +1077 +1078 +1054 +1056 +1057 +1065 +1067 +1068 +1069 +1086 +1072 +1055 +1060 +1092 +1095 +1096 +1111 +1115 +1111 +1116 +1140 +1154 +1155 +1150 +1162 +1140 +1108 +1111 +1112 +1142 +1128 +1161 +1166 +1159 +1202 +1203 +1204 +1198 +1199 +1205 +1244 +1245 +1271 +1275 +1268 +1275 +1273 +1272 +1300 +1316 +1313 +1326 +1331 +1339 +1342 +1344 +1349 +1339 +1344 +1345 +1352 +1356 +1353 +1356 +1345 +1354 +1356 +1357 +1367 +1368 +1362 +1363 +1376 +1389 +1391 +1374 +1373 +1349 +1348 +1350 +1347 +1348 +1347 +1338 +1340 +1341 +1340 +1344 +1370 +1373 +1371 +1372 +1375 +1391 +1380 +1369 +1371 +1370 +1360 +1342 +1343 +1340 +1339 +1335 +1317 +1310 +1315 +1320 +1346 +1349 +1318 +1331 +1309 +1336 +1345 +1350 +1349 +1347 +1350 +1347 +1346 +1347 +1374 +1373 +1351 +1348 +1345 +1349 +1363 +1365 +1364 +1367 +1371 +1404 +1407 +1408 +1410 +1403 +1410 +1418 +1417 +1416 +1417 +1423 +1427 +1424 +1419 +1410 +1412 +1413 +1381 +1382 +1379 +1382 +1385 +1382 +1383 +1381 +1384 +1393 +1407 +1400 +1397 +1390 +1389 +1367 +1375 +1373 +1372 +1373 +1377 +1381 +1384 +1387 +1384 +1406 +1412 +1414 +1390 +1392 +1390 +1365 +1363 +1365 +1370 +1371 +1373 +1363 +1366 +1379 +1380 +1377 +1375 +1370 +1386 +1383 +1380 +1400 +1401 +1427 +1428 +1401 +1405 +1407 +1398 +1399 +1427 +1429 +1454 +1455 +1459 +1458 +1452 +1440 +1430 +1431 +1424 +1417 +1416 +1421 +1424 +1422 +1430 +1434 +1446 +1467 +1468 +1477 +1478 +1481 +1475 +1462 +1463 +1464 +1454 +1447 +1425 +1440 +1429 +1417 +1431 +1423 +1438 +1412 +1441 +1437 +1448 +1449 +1464 +1458 +1450 +1449 +1456 +1446 +1455 +1456 +1447 +1448 +1442 +1440 +1425 +1424 +1431 +1465 +1462 +1466 +1465 +1447 +1442 +1447 +1423 +1420 +1421 +1419 +1430 +1419 +1416 +1418 +1421 +1415 +1420 +1417 +1418 +1416 +1415 +1419 +1425 +1431 +1434 +1435 +1438 +1441 +1429 +1427 +1428 +1427 +1435 +1438 +1430 +1424 +1425 +1415 +1412 +1415 +1405 +1403 +1404 +1402 +1399 +1405 +1406 +1414 +1425 +1429 +1433 +1393 +1414 +1430 +1435 +1438 +1423 +1424 +1425 +1427 +1428 +1429 +1426 +1427 +1428 +1431 +1428 +1430 +1433 +1421 +1420 +1414 +1421 +1423 +1415 +1416 +1420 +1424 +1435 +1422 +1408 +1401 +1405 +1418 +1412 +1398 +1399 +1433 +1430 +1431 +1430 +1431 +1429 +1425 +1446 +1447 +1434 +1426 +1433 +1434 +1432 +1445 +1443 +1452 +1451 +1443 +1441 +1415 +1416 +1439 +1456 +1460 +1454 +1460 +1477 +1479 +1460 +1488 +1474 +1457 +1459 +1463 +1468 +1465 +1463 +1467 +1479 +1472 +1475 +1474 +1475 +1476 +1477 +1481 +1475 +1481 +1480 +1478 +1448 +1476 +1475 +1476 +1461 +1485 +1484 +1485 +1478 +1477 +1476 +1479 +1475 +1456 +1458 +1465 +1458 +1464 +1461 +1477 +1502 +1482 +1483 +1484 +1485 +1495 +1493 +1511 +1513 +1518 +1530 +1521 +1525 +1528 +1530 +1531 +1533 +1559 +1560 +1566 +1574 +1573 +1557 +1563 +1569 +1561 +1559 +1556 +1560 +1574 +1575 +1578 +1580 +1579 +1576 +1600 +1603 +1567 +1574 +1573 +1569 +1574 +1583 +1582 +1581 +1577 +1582 +1587 +1583 +1576 +1579 +1578 +1584 +1585 +1600 +1590 +1582 +1574 +1570 +1578 +1575 +1572 +1583 +1584 +1569 +1566 +1559 +1534 +1526 +1542 +1539 +1544 +1546 +1539 +1540 +1541 +1566 +1569 +1570 +1573 +1567 +1570 +1571 +1574 +1583 +1579 +1585 +1584 +1581 +1598 +1603 +1607 +1609 +1611 +1612 +1615 +1616 +1623 +1627 +1638 +1637 +1644 +1645 +1646 +1647 +1646 +1653 +1651 +1652 +1666 +1663 +1668 +1666 +1660 +1665 +1661 +1677 +1690 +1691 +1692 +1701 +1702 +1703 +1714 +1710 +1715 +1714 +1713 +1723 +1707 +1708 +1724 +1728 +1748 +1759 +1760 +1758 +1757 +1758 +1760 +1764 +1773 +1753 +1750 +1751 +1758 +1769 +1766 +1751 +1742 +1728 +1733 +1732 +1740 +1742 +1743 +1769 +1750 +1761 +1762 +1764 +1765 +1761 +1765 +1769 +1778 +1779 +1777 +1778 +1759 +1740 +1741 +1742 +1740 +1741 +1740 +1739 +1744 +1758 +1757 +1785 +1788 +1798 +1793 +1799 +1780 +1804 +1807 +1813 +1815 +1804 +1813 +1818 +1819 +1806 +1807 +1808 +1807 +1808 +1810 +1824 +1840 +1847 +1840 +1838 +1841 +1815 +1826 +1832 +1825 +1813 +1809 +1826 +1835 +1834 +1830 +1831 +1841 +1838 +1819 +1824 +1815 +1808 +1812 +1811 +1812 +1813 +1793 +1792 +1794 +1787 +1779 +1770 +1761 +1759 +1768 +1769 +1768 +1767 +1766 +1765 +1766 +1779 +1775 +1771 +1765 +1767 +1772 +1770 +1775 +1776 +1783 +1773 +1767 +1771 +1775 +1778 +1781 +1803 +1802 +1803 +1804 +1791 +1794 +1774 +1762 +1764 +1793 +1792 +1798 +1796 +1801 +1809 +1818 +1820 +1822 +1818 +1804 +1803 +1821 +1822 +1820 +1822 +1815 +1816 +1809 +1810 +1833 +1845 +1815 +1824 +1823 +1806 +1808 +1813 +1804 +1805 +1797 +1798 +1800 +1791 +1790 +1789 +1783 +1785 +1786 +1790 +1780 +1786 +1814 +1815 +1816 +1818 +1807 +1785 +1789 +1790 +1780 +1791 +1792 +1793 +1794 +1813 +1800 +1795 +1809 +1810 +1813 +1791 +1793 +1792 +1790 +1792 +1795 +1816 +1835 +1851 +1856 +1855 +1856 +1869 +1868 +1872 +1876 +1872 +1866 +1865 +1868 +1871 +1860 +1862 +1860 +1862 +1863 +1876 +1884 +1890 +1893 +1892 +1891 +1892 +1891 +1893 +1900 +1901 +1915 +1926 +1921 +1928 +1905 +1906 +1894 +1890 +1884 +1885 +1880 +1883 +1887 +1882 +1881 +1882 +1885 +1884 +1883 +1889 +1897 +1902 +1906 +1911 +1893 +1898 +1897 +1885 +1891 +1892 +1882 +1903 +1906 +1911 +1905 +1885 +1886 +1880 +1884 +1860 +1868 +1876 +1877 +1870 +1877 +1895 +1896 +1897 +1900 +1905 +1910 +1902 +1894 +1895 +1892 +1897 +1893 +1890 +1891 +1883 +1884 +1867 +1866 +1857 +1839 +1835 +1836 +1833 +1846 +1849 +1860 +1861 +1858 +1856 +1857 +1870 +1858 +1862 +1881 +1882 +1883 +1887 +1865 +1864 +1854 +1855 +1858 +1871 +1869 +1856 +1857 +1862 +1868 +1870 +1868 +1873 +1854 +1850 +1849 +1848 +1849 +1858 +1861 +1862 +1868 +1866 +1878 +1879 +1878 +1879 +1887 +1886 +1891 +1886 +1888 +1890 +1889 +1885 +1921 +1929 +1923 +1925 +1922 +1923 +1922 +1926 +1936 +1948 +1943 +1945 +1946 +1948 +1947 +1956 +1963 +1979 +1985 +1987 +1974 +1976 +1966 +1968 +1936 +1929 +1927 +1921 +1938 +1919 +1920 +1909 +1908 +1920 +1910 +1892 +1895 +1908 +1911 +1916 +1922 +1923 +1938 +1941 +1937 +1952 +1955 +1966 +1960 +1961 +1983 +1953 +1960 +1961 +1959 +1917 +1918 +1911 +1915 +1939 +1941 +1938 +1917 +1928 +1930 +1924 +1922 +1921 +1925 +1924 +1923 +1927 +1913 +1926 +1945 +1954 +1944 +1918 +1922 +1914 +1915 +1916 +1917 +1882 +1873 +1857 +1856 +1852 +1858 +1860 +1874 +1864 +1865 +1867 +1872 +1880 +1879 +1887 +1890 +1874 +1875 +1877 +1895 +1917 +1909 +1941 +1963 +1969 +1971 +1988 +1989 +1985 +1986 +1979 +1985 +1986 +1988 +1997 +1994 +2000 +2002 +2005 +1999 +1996 +1995 +2014 +2009 +1994 +1983 +1995 +1994 +1998 +2001 +1996 +2015 +2003 +1998 +2012 +2013 +2000 +1997 +1999 +2003 +2006 +2008 +2011 +1992 +1989 +1988 +1989 +1976 +1978 +1998 +2003 +2001 +2004 +2001 +1983 +1984 +1983 +1985 +1986 +1983 +1981 +1980 +1993 +1998 +1991 +1998 +2019 +2010 +2009 +2035 +2032 +2031 +2022 +2019 +2020 +2022 +2021 +2018 +2019 +2020 +2029 +2028 +2030 +2033 +2038 +2031 +2037 +2075 +2064 +2048 +2049 +2061 +2060 +2061 +2059 +2061 +2068 +2088 +2097 diff --git a/01/main.js b/01/main.js new file mode 100644 index 0000000..405916a --- /dev/null +++ b/01/main.js @@ -0,0 +1,16 @@ +const fs = require("fs") + +const input = fs.readFileSync("input.txt", "utf-8", err => { + err && console.error(err) +}).split("\n").map(num => parseInt(num)) + +let partOne = 0, partTwo = 0 + +for (let i = 0; i < input.length; i++){ + if (input[i - 1] && input[i] > input[i - 1]) + partOne++ + if (input[i - 3] && input[i] > input[i - 3]) + partTwo++ +} + +console.log(partOne, partTwo) \ No newline at end of file diff --git a/02/input.txt b/02/input.txt new file mode 100644 index 0000000..ea79e47 --- /dev/null +++ b/02/input.txt @@ -0,0 +1,1000 @@ +forward 4 +down 9 +forward 6 +down 5 +up 2 +forward 5 +forward 7 +up 5 +down 9 +up 6 +down 6 +down 1 +down 1 +up 2 +down 3 +up 3 +forward 8 +forward 7 +down 6 +down 7 +forward 6 +forward 9 +forward 7 +up 9 +down 4 +down 6 +down 5 +down 9 +forward 8 +down 9 +forward 9 +forward 4 +forward 4 +up 3 +up 8 +down 9 +down 8 +down 4 +forward 5 +forward 4 +up 6 +forward 6 +up 3 +up 8 +up 3 +up 4 +down 3 +down 5 +down 5 +up 1 +forward 9 +down 4 +forward 6 +down 6 +up 2 +up 9 +forward 1 +forward 2 +forward 7 +down 6 +up 6 +forward 1 +forward 7 +down 7 +forward 9 +forward 4 +forward 6 +down 5 +up 9 +down 1 +up 5 +up 5 +up 9 +down 5 +forward 7 +down 1 +up 9 +down 7 +forward 2 +down 4 +down 4 +forward 8 +forward 8 +down 6 +down 3 +up 7 +down 3 +forward 9 +down 7 +forward 2 +down 1 +forward 5 +up 9 +down 2 +up 2 +down 3 +up 7 +forward 9 +forward 7 +down 4 +down 5 +up 3 +down 3 +down 5 +forward 9 +down 3 +forward 9 +down 3 +up 9 +down 5 +forward 4 +down 4 +up 8 +forward 7 +up 1 +down 2 +forward 4 +down 7 +down 9 +down 4 +down 4 +forward 6 +down 7 +down 2 +down 1 +forward 1 +down 2 +forward 1 +down 7 +forward 5 +up 3 +forward 6 +up 9 +down 3 +down 3 +down 9 +forward 4 +down 4 +forward 9 +forward 6 +down 7 +up 9 +up 6 +forward 4 +down 5 +forward 2 +down 7 +down 7 +forward 4 +forward 5 +down 8 +down 5 +up 4 +forward 7 +up 8 +down 8 +forward 4 +forward 5 +down 6 +down 1 +down 1 +down 9 +forward 4 +up 1 +down 8 +up 7 +down 1 +up 2 +forward 4 +down 7 +down 7 +down 2 +forward 7 +down 2 +up 1 +up 4 +down 6 +forward 5 +forward 2 +up 1 +forward 2 +forward 9 +up 9 +up 7 +forward 9 +down 8 +up 5 +down 6 +down 6 +up 8 +down 1 +forward 6 +down 5 +forward 2 +down 9 +down 9 +up 4 +forward 4 +forward 2 +forward 7 +forward 3 +down 1 +forward 8 +up 9 +down 7 +forward 9 +forward 1 +forward 5 +up 6 +down 6 +forward 6 +up 3 +forward 9 +down 3 +forward 2 +down 7 +down 3 +up 9 +down 2 +down 3 +forward 5 +down 9 +forward 8 +down 2 +forward 1 +down 9 +down 7 +forward 2 +forward 6 +forward 4 +forward 5 +down 5 +down 1 +forward 5 +up 4 +down 4 +up 8 +down 4 +up 4 +down 1 +down 2 +down 9 +down 2 +up 4 +down 1 +forward 2 +forward 1 +forward 9 +down 5 +up 4 +up 1 +forward 8 +forward 6 +forward 9 +up 9 +forward 4 +forward 4 +down 1 +forward 6 +forward 7 +forward 3 +up 5 +up 7 +down 1 +forward 4 +down 3 +down 5 +up 7 +down 4 +up 9 +down 3 +down 5 +forward 7 +forward 8 +up 5 +up 1 +forward 3 +up 8 +forward 3 +down 2 +forward 1 +forward 9 +forward 1 +down 2 +forward 7 +down 5 +forward 6 +down 9 +up 9 +forward 5 +forward 7 +forward 6 +down 2 +up 2 +forward 3 +forward 4 +forward 3 +down 5 +forward 1 +forward 2 +forward 6 +down 4 +forward 2 +forward 6 +up 8 +forward 2 +up 4 +forward 7 +down 2 +forward 1 +forward 7 +down 6 +forward 4 +down 3 +down 2 +down 2 +forward 4 +down 8 +forward 6 +forward 6 +down 2 +up 3 +up 1 +forward 1 +down 5 +down 2 +forward 4 +forward 7 +forward 3 +down 3 +forward 9 +down 1 +down 7 +forward 6 +forward 1 +up 6 +forward 7 +forward 1 +down 5 +down 4 +forward 6 +up 1 +down 1 +up 9 +down 2 +down 2 +forward 3 +up 4 +down 5 +down 5 +down 3 +down 6 +up 8 +forward 2 +forward 2 +down 6 +down 1 +up 4 +up 1 +down 5 +up 4 +up 2 +forward 4 +forward 6 +forward 3 +down 7 +forward 8 +up 5 +forward 5 +down 1 +forward 2 +forward 6 +down 8 +up 6 +down 1 +down 7 +forward 4 +forward 2 +up 1 +down 6 +forward 3 +forward 1 +forward 5 +forward 9 +forward 9 +down 4 +forward 2 +down 1 +forward 1 +forward 7 +forward 5 +down 9 +down 8 +down 1 +down 6 +down 1 +up 7 +down 3 +forward 3 +up 6 +up 4 +down 7 +down 7 +forward 6 +up 7 +down 7 +forward 9 +down 9 +down 3 +forward 6 +forward 9 +forward 1 +down 4 +forward 5 +down 4 +down 2 +down 3 +up 3 +forward 9 +forward 7 +forward 5 +down 5 +forward 7 +up 4 +down 1 +forward 3 +down 3 +forward 4 +down 9 +forward 2 +down 5 +down 1 +forward 8 +down 3 +forward 7 +up 1 +down 3 +forward 2 +up 8 +down 2 +forward 4 +forward 4 +forward 4 +down 5 +up 6 +down 3 +forward 5 +down 4 +up 5 +forward 1 +forward 6 +up 1 +down 3 +forward 2 +forward 9 +down 7 +down 4 +forward 5 +up 3 +up 6 +up 1 +forward 4 +forward 1 +forward 1 +down 7 +up 4 +down 3 +down 8 +down 3 +forward 8 +forward 3 +down 6 +down 9 +forward 3 +forward 9 +forward 7 +down 8 +down 6 +down 4 +forward 2 +up 4 +forward 8 +down 1 +forward 9 +forward 1 +down 9 +forward 2 +down 7 +down 2 +up 7 +down 1 +up 8 +forward 8 +down 7 +forward 1 +down 1 +forward 3 +forward 1 +up 2 +down 7 +down 5 +forward 5 +down 8 +forward 4 +down 1 +up 2 +up 8 +down 8 +down 1 +down 5 +up 3 +forward 3 +forward 5 +down 2 +up 4 +down 2 +forward 7 +forward 9 +up 9 +up 7 +forward 1 +up 4 +forward 3 +up 5 +forward 9 +forward 9 +forward 6 +forward 2 +down 7 +forward 8 +forward 4 +forward 7 +down 8 +down 5 +down 6 +forward 6 +down 4 +down 1 +down 9 +down 1 +forward 3 +forward 5 +down 6 +down 7 +down 9 +down 8 +down 4 +up 5 +forward 7 +down 9 +forward 6 +down 7 +forward 5 +down 5 +forward 1 +down 5 +down 3 +up 9 +up 3 +forward 2 +up 9 +forward 6 +down 1 +down 5 +down 9 +down 4 +up 6 +forward 9 +down 4 +down 9 +down 5 +down 8 +down 5 +down 4 +up 5 +down 8 +up 8 +forward 5 +down 9 +forward 2 +up 2 +down 6 +forward 2 +forward 4 +forward 6 +down 6 +down 1 +forward 8 +down 5 +down 5 +forward 2 +down 7 +down 5 +down 6 +down 9 +forward 4 +up 9 +down 3 +down 7 +forward 3 +down 5 +up 1 +forward 5 +up 2 +down 2 +forward 2 +up 3 +up 6 +forward 2 +forward 7 +down 8 +forward 8 +forward 7 +forward 6 +down 5 +down 6 +down 6 +down 9 +up 5 +down 3 +up 1 +up 9 +up 5 +down 4 +down 4 +down 8 +forward 8 +up 5 +down 9 +forward 1 +up 1 +forward 2 +down 9 +forward 5 +up 9 +forward 7 +down 7 +down 5 +up 1 +up 2 +down 8 +down 7 +up 4 +forward 9 +down 4 +up 8 +down 5 +down 1 +forward 9 +down 6 +up 8 +down 6 +forward 7 +up 6 +up 5 +forward 2 +up 7 +forward 7 +forward 5 +down 1 +forward 9 +down 8 +forward 9 +down 3 +down 3 +forward 9 +up 1 +down 2 +forward 9 +down 7 +forward 4 +forward 3 +forward 4 +down 5 +forward 9 +forward 9 +down 5 +forward 4 +down 5 +down 2 +down 6 +forward 5 +forward 8 +forward 6 +up 9 +down 9 +forward 7 +down 6 +down 7 +down 4 +forward 1 +forward 3 +forward 6 +forward 4 +forward 3 +forward 4 +down 1 +forward 2 +forward 3 +forward 9 +up 8 +forward 6 +down 1 +up 5 +down 1 +down 4 +down 7 +down 5 +down 9 +down 2 +down 9 +forward 2 +down 2 +up 5 +forward 2 +forward 3 +forward 5 +up 8 +up 1 +down 9 +forward 2 +down 4 +down 9 +down 6 +down 5 +down 8 +forward 3 +forward 8 +forward 7 +up 3 +up 5 +down 9 +down 5 +up 6 +forward 4 +forward 4 +forward 4 +down 9 +down 2 +down 7 +down 1 +down 2 +down 4 +forward 7 +down 9 +forward 4 +forward 5 +up 5 +forward 4 +forward 9 +forward 1 +forward 5 +down 3 +forward 1 +forward 5 +up 9 +down 7 +forward 7 +forward 6 +down 2 +down 3 +forward 9 +down 1 +forward 4 +forward 9 +up 7 +forward 7 +down 5 +forward 9 +forward 2 +up 3 +down 3 +down 7 +down 5 +up 7 +up 9 +up 7 +forward 3 +forward 3 +forward 8 +up 9 +forward 8 +forward 9 +forward 4 +down 2 +forward 7 +down 6 +up 3 +up 9 +forward 8 +forward 2 +down 9 +down 7 +forward 1 +up 4 +up 7 +forward 2 +up 4 +forward 4 +up 1 +forward 3 +down 7 +forward 5 +down 4 +forward 2 +forward 7 +up 4 +down 1 +down 6 +forward 1 +forward 9 +up 6 +forward 7 +forward 7 +down 8 +forward 7 +down 8 +down 9 +up 3 +forward 3 +forward 3 +down 8 +up 2 +down 2 +down 4 +up 3 +down 3 +forward 7 +down 4 +up 8 +down 9 +down 9 +up 7 +down 1 +forward 2 +up 1 +down 3 +up 9 +down 6 +up 2 +forward 6 +up 8 +up 1 +down 6 +down 1 +up 6 +up 4 +up 2 +forward 6 +down 6 +down 1 +forward 7 +up 9 +up 1 +forward 4 +forward 5 +up 6 +forward 9 +down 1 +down 9 +down 3 +down 7 +forward 7 +down 1 +down 4 +forward 6 +down 5 +up 4 +forward 9 +up 5 +down 1 +down 2 +down 2 +up 4 +forward 1 +forward 3 +down 7 +forward 4 +down 4 +down 8 +down 5 +forward 3 +up 4 +forward 5 +down 2 +down 4 +down 4 +down 1 +forward 2 +forward 1 +forward 8 +forward 4 +up 4 +down 9 +up 6 +forward 9 +up 5 +down 5 +forward 3 +up 1 +forward 7 +down 4 +forward 7 +down 9 +up 8 +down 5 +forward 1 +down 5 +down 8 +forward 3 +up 6 +forward 3 +up 7 +forward 6 +forward 9 +up 1 +down 3 +down 9 +up 4 +up 6 +forward 5 +down 6 +down 3 +down 4 +up 1 +forward 5 +down 5 +down 2 +forward 6 +down 8 +down 3 +up 8 +forward 5 +forward 6 +down 6 +down 6 +down 6 +forward 7 +up 4 +forward 7 +up 4 +down 2 +forward 4 +forward 2 +down 6 +up 1 +down 1 +down 4 +up 8 +down 6 +forward 3 +forward 6 +down 6 +forward 5 +down 4 +up 2 +up 3 +down 3 +up 1 +forward 2 +up 1 +forward 4 +up 5 +up 2 +down 7 +forward 3 +up 2 +forward 5 +down 1 +down 3 +down 2 +forward 5 +down 1 +up 5 +forward 4 +down 7 +up 8 +up 3 +down 7 +down 7 +forward 9 +forward 1 +up 6 +down 4 +down 7 +forward 1 +down 4 +forward 9 +up 1 +forward 3 +down 1 +up 3 +down 6 +down 8 +down 6 +forward 6 +forward 6 +up 2 +down 8 +forward 5 diff --git a/02/main.js b/02/main.js new file mode 100644 index 0000000..5d801a7 --- /dev/null +++ b/02/main.js @@ -0,0 +1,23 @@ +const fs = require("fs") + +const input = fs.readFileSync("input.txt", "utf-8", err => { + err && console.error(err) +}).split("\n").map(line => line.split(" ")) + +let horizontalPosition = 0, depth = 0, aim = 0 + +for (let [direction, distance] of input){ + distance = parseInt(distance) + switch(direction){ + case "forward": + horizontalPosition += distance + depth += aim * distance + break + case "up": + aim -= distance + break + case "down": + aim += distance + } +} +console.log(horizontalPosition * aim, horizontalPosition * depth) \ No newline at end of file diff --git a/03/input.txt b/03/input.txt new file mode 100644 index 0000000..ebaf337 --- /dev/null +++ b/03/input.txt @@ -0,0 +1,1000 @@ +111010101100 +100001001100 +000111101100 +100100000000 +001001001110 +100110101011 +001001100101 +010000010110 +011011001001 +001001000101 +001000101011 +000111101111 +011000000001 +111111010100 +101101010010 +100111100111 +101000110100 +011101101101 +010101110010 +001011101010 +010001001100 +011001001100 +000110011100 +011001011100 +000101110110 +010011110111 +011101001001 +000001000111 +111110010100 +010011000000 +101001000010 +011001010011 +101011101010 +111000100111 +011110010110 +111111111010 +100011100101 +011100110000 +010011010011 +110110110010 +001110111011 +110100011111 +101011001110 +000001100101 +101001010000 +110001111011 +011101011100 +001100100001 +000100111111 +000110110111 +011100100010 +110101100111 +100110011110 +110011110010 +010111110110 +011010100010 +100100100010 +001000111011 +100101101110 +001001111101 +111000001100 +100011000100 +101011010010 +011100011001 +111100011001 +110000000011 +101110011010 +101000010011 +111011100111 +101111111100 +101111111101 +010000101101 +011111011011 +100011001100 +010011100010 +101100101011 +010011111010 +111010010101 +000011101100 +110011110101 +101000000101 +101101001110 +010111110101 +010001011001 +100000000011 +111111010000 +001110010010 +011110111101 +111010110001 +010001011010 +100101011100 +101100000100 +000001000110 +010010101001 +110101100101 +010000001111 +001010000100 +111011111100 +011111101000 +111100111101 +011100001111 +001101111010 +110100010000 +011111001101 +111001110001 +110010000100 +000110100011 +010000100010 +110010111001 +111100111010 +110110101011 +111011001110 +111000110101 +101110100110 +011100100001 +111110100010 +001010000001 +111000111111 +110010110101 +010101010100 +100101010111 +111111101110 +100101100111 +001011101000 +110010110001 +101010000111 +000000000100 +100000100100 +110001001000 +001101010100 +010101101010 +111100100000 +111100110010 +110100111000 +111110011000 +110001100111 +100111101100 +000001100110 +110111000111 +010011000111 +110111101100 +100111100000 +010101001011 +010011100101 +110000100010 +000010001010 +010001101010 +101010011101 +100011001011 +011000111001 +011010100001 +011011011110 +010000011101 +001010101101 +110011101011 +001111011110 +111111110110 +000101100110 +001110100011 +001010111001 +011010111101 +011000001001 +010101000010 +101100011011 +001110110101 +010111010100 +010110011100 +010101000111 +110000010010 +111011110110 +100101100110 +000011110010 +100111110000 +101110100010 +100010001101 +011111010100 +111101011000 +010010111010 +011111001111 +011100000010 +111000100011 +001010000110 +000101110001 +101001000111 +111111101011 +001010000010 +110011101101 +111000100100 +010111111100 +010000100101 +000111000101 +101001000100 +000001100011 +011011111100 +100011110000 +011100011111 +000011010100 +001110111101 +101001011110 +111100011000 +001100111011 +101101010100 +110101001000 +100010000011 +001101100110 +111100101011 +001101100101 +100000000111 +011001111101 +000111110101 +100100001000 +100001000010 +011011001110 +110000110010 +010110101111 +111001111000 +100110010111 +101111100000 +110000110110 +100010000100 +001110001110 +111010110111 +010111010000 +001110111000 +000101110010 +111011001011 +000011011011 +110100011001 +101010100101 +010001111110 +011101000000 +011001111100 +101101100010 +010000101111 +010010100011 +010010010001 +100000110000 +010100111011 +011101001011 +111001011110 +010100011111 +011111111100 +110110000100 +111001010000 +111000110011 +101110010111 +011001110010 +111111000100 +000001010000 +001011010101 +000000011101 +111111110001 +100011100010 +001101011101 +011111110101 +100101111001 +100100111110 +011110010010 +010110110000 +011101000101 +001000001110 +100111011001 +100110101111 +010001001111 +110011011111 +010100000001 +111100110001 +011101000111 +010110101000 +000110110000 +111101101101 +010010111011 +010011011100 +111110101101 +101001101111 +101110001111 +010101110110 +110100100011 +000000111000 +011100011100 +111001010111 +111000000111 +001101110000 +000000110010 +000110110011 +100101110010 +000100101010 +100000110110 +111100110100 +101001101110 +011100101110 +000111011111 +100111101010 +010011000101 +011000100111 +011100011011 +011110000011 +110110111001 +011111111111 +001010101111 +110111011011 +111111000111 +101010000000 +001100001001 +101001000001 +101100111110 +011000001101 +011101001010 +011011101100 +110111000000 +100100010011 +000111110111 +000101010010 +010000001010 +010010100101 +110001100101 +010101011110 +001100110001 +001111111000 +110000001111 +001101101110 +100111000101 +001010010001 +100100110110 +010011100111 +111101010001 +010010101010 +000010101001 +100111100101 +001100011011 +011101111010 +110010000111 +011101110000 +001011001010 +110101110010 +110111100001 +111000000011 +010010111111 +010011110101 +011000101000 +000101000010 +001110000000 +101010001100 +010011101010 +101100111101 +011110101011 +011110110010 +110101100110 +010001110000 +000011000100 +011110100110 +110101101010 +100110001000 +111100000001 +001000111000 +110001000110 +000111100111 +111111011101 +000001101010 +111101011110 +110011010011 +010100101011 +110010110010 +011011111101 +101110101001 +100011001101 +010110110010 +111001100011 +101101101001 +000100110001 +001011001110 +010011000011 +101111100001 +110011010000 +000011010101 +011100111110 +110100110100 +010100001001 +100010100111 +100101000111 +011010011000 +000000101101 +001111100000 +110001101110 +110110111111 +110100111100 +001010110001 +010001100010 +100000110100 +011110011100 +111010001110 +101111110001 +110000011011 +000100001011 +110110001101 +010000100001 +011001010000 +010110100110 +001100101010 +100101101011 +111110111001 +101011110000 +000101001010 +111001001101 +110100001111 +000111110000 +000010001111 +111101011010 +000011100111 +101000100000 +100011001000 +000000100011 +011011001101 +111101111101 +010001010110 +010001100100 +110111101110 +101111101001 +011101010101 +011000001011 +000100011110 +100100100011 +000110011111 +010001010101 +001110000011 +011100100100 +101111100111 +110101010000 +000101110100 +001011100010 +101000010101 +100000100111 +100111100001 +111100001011 +100101001100 +100000000001 +101110110100 +000101011100 +010111000101 +111010001010 +100111001010 +101011110001 +100111010101 +001101111000 +110011101100 +011011011111 +111100010100 +011101011111 +001011010110 +000101100111 +001010110110 +101000000100 +110010111011 +001011000100 +110000111100 +101001001111 +011000101110 +101111110010 +110101001110 +010100111110 +110100101100 +100011010110 +011101001100 +110101101001 +110111110110 +101001011010 +001100111100 +001010100111 +100001001001 +110110100011 +010111101011 +100000010101 +011000010010 +111000100010 +100111101011 +010101011101 +111100011111 +001010111111 +010111111010 +010000111000 +000011000101 +110100110011 +101101111110 +101110000101 +011101111110 +010000011000 +011111110111 +100001000100 +010101100110 +001001000010 +010011111000 +101111111011 +001000110101 +101110101101 +100101001101 +010001111111 +000001000001 +100000010010 +001010101110 +000111110100 +011100110011 +000100001110 +011100010011 +110100111101 +000111001100 +001011011100 +000110001000 +011100011110 +100101111010 +111110011110 +101001111010 +011000010111 +011111010010 +001101101011 +100001010010 +110110001001 +101000100110 +100000000100 +111010000100 +000010101000 +111011101000 +010110100101 +100110010110 +110110000101 +011011110011 +111110101010 +011000101101 +001010011101 +001001101001 +000010010110 +100010001010 +100001101111 +110010111000 +100011100110 +011011110110 +001000010001 +011000011110 +011011010001 +100100000001 +011111001011 +001100001111 +110010111010 +000101000111 +100011011010 +011110110001 +101001000101 +111111010111 +110000010101 +101111001000 +000010111011 +100000011001 +111111111110 +101111011110 +010000101000 +010011011101 +000100000111 +110100101011 +101101100110 +011111011000 +101001001101 +000110111110 +101001010011 +011100011010 +010100110111 +101001000011 +001000101010 +011110111111 +000101100101 +111111111001 +111011100110 +000100000001 +001001001100 +110100001011 +000001001111 +111000011101 +000111001110 +010000110101 +011011110101 +000101011010 +110110111101 +010011000100 +001111011000 +001001110101 +100110000110 +010110100011 +110010101110 +001111011010 +000010110011 +110010001000 +110001000010 +100100000100 +000110000110 +001000011010 +111100001000 +011001101010 +110100110010 +111001101001 +101111001100 +101100111001 +100010100010 +101011001011 +001010111100 +111001101110 +111110011001 +001100110101 +110110010010 +001100001101 +001100110110 +101100010101 +110111110000 +100011011001 +100001111011 +010000000011 +011101011110 +010011110001 +101101011011 +000011101000 +010111011010 +111000101101 +000111000001 +111000001110 +010110011111 +100110111101 +101111001101 +101100100101 +111000110111 +110010011100 +111010000010 +011100111011 +101010001101 +000000111101 +100000100110 +001011110110 +111010111110 +100110111100 +001111001110 +010110100001 +110011110100 +000110101110 +011011000100 +010000010010 +000100110101 +100100011100 +001100001100 +101110000001 +000101000000 +110001011111 +111001101100 +111100101111 +100010110001 +111111000101 +111100111111 +011010011001 +010001000110 +011011111111 +100101001111 +010000001000 +101011101001 +011011000001 +000100000000 +101110101010 +100100110011 +010110000001 +100101000101 +000100110000 +111101010111 +000100100010 +100110100000 +011000010100 +111010100010 +010101100000 +101000001000 +011011010100 +110101001011 +101000101011 +111100000011 +001101000101 +001011110010 +111111011011 +111001001001 +001001001000 +000000000010 +111100111110 +010100101111 +110111110101 +111101000011 +100101010100 +000110001111 +110000001101 +011010011010 +000001011001 +011000111000 +011111111011 +101101101010 +110110011001 +100000111011 +110000111111 +101101010111 +001001001010 +100011011000 +101001110101 +100000101111 +100011010000 +000000001110 +101010011010 +000101111011 +110101110001 +000010011011 +000110011011 +101100101010 +100111111110 +110111111100 +110000011001 +001011001100 +111010010001 +111010101110 +111000100000 +001100110100 +110100010101 +011000011010 +011101000100 +000011100101 +101111100011 +011110000110 +000100010001 +111101000100 +111000000100 +000001111001 +100000111111 +001000001101 +100110001110 +010010111110 +000001011111 +110001011101 +101010010000 +111110110010 +111010010000 +101101000111 +111110110111 +001110100001 +111110000011 +110001001101 +001000101101 +000100110110 +110111010111 +100010100100 +110100001101 +111100110011 +001100000101 +101011001101 +000000111011 +101110011000 +100100100000 +001101001111 +001110000111 +011100011000 +001100000011 +101001011100 +110100010010 +011011110001 +000100110010 +001000010101 +101000011110 +001100100010 +010100100011 +100110001101 +111111001101 +011000111101 +101101011010 +001100000100 +101100011100 +000010110000 +100110110010 +011100110111 +111001111101 +001110010111 +101010111111 +100011101011 +110010000011 +111000010101 +101101101101 +001111100110 +000101110000 +110100000111 +010100010110 +111000010010 +101011111110 +111101010010 +011010000101 +000100010000 +001010100101 +000000110111 +010011010111 +110010101001 +110010001100 +100001111101 +011100000011 +010000000100 +111000000000 +010000100011 +101111001011 +101011110110 +110110101000 +111111011010 +001001000100 +101001011000 +001000001001 +101001111101 +110000110001 +101001010111 +110101100010 +101101111111 +101101011110 +111111011001 +111010110011 +101111000001 +010001010111 +110100000011 +100110101100 +100100101011 +010100001110 +101111101111 +111111001110 +111110111000 +010101110011 +101101001010 +100100111101 +110100100010 +100011101001 +110100111001 +101000000000 +110111101011 +101111001001 +000000101011 +111011101110 +110110001011 +001111110011 +111101100011 +100100011111 +000010000110 +000010011100 +000000101001 +000001001101 +000010101111 +100100001101 +011010101000 +001001110001 +001111101110 +010110111001 +000011011100 +010101011100 +110111111011 +011101101100 +010000001001 +001011000010 +011110001010 +101011101110 +011100111100 +000010011101 +011110010100 +010010110111 +010000000001 +100111101000 +111100001100 +101100110001 +111101000001 +100111111111 +000101101000 +111010011100 +111000001010 +011001110101 +111101111100 +110011111111 +000011000010 +101000110011 +100111011010 +110011011010 +000011101110 +111100101110 +101000001001 +011110010000 +010001110111 +101100001100 +011101101001 +001110101111 +101011011011 +001110010101 +110000100111 +111110001011 +000010110111 +100001010111 +101000010110 +101100110111 +000001010110 +100001110000 +010110010110 +000110010100 +001101011010 +001100010001 +110101011100 +111101110000 +001000111111 +001101010101 +000000011111 +000001110011 +001101010011 +100001011011 +011110101010 +010100111101 +111110100011 +110100001110 +111001001000 +101000011101 +000100011001 +111101001010 +011001100111 +101010111010 +001011110000 +110100111111 +101111011111 +000011000110 +100001110011 +110110110100 +000010010101 +001010101001 +010010110010 +111011000001 +011011011001 +000110111001 +101111010110 +100111111000 +010010111101 +101011101011 +110110011000 +101001011011 +110010001001 +001100110000 +111110110110 +001111011111 +000110010010 +111100010010 +100010101011 +110100000110 +011111011110 +001111011011 +111010011111 +010001110100 +011010101001 +011100111010 +110110011111 +101000000110 +100010101101 +011101111101 +100100001010 +110111000001 +101010111101 +010000111010 +110011111001 +001000100100 +011001111001 +000111010110 +010100001111 +111100000111 +111011111111 +001101011100 +111000100001 +010100000110 +010010110001 +000011011010 +111100011110 +101000101101 +110011110111 +000110011000 +011000011011 +110000110100 +010110011001 +101110010010 +110000111001 +001011110001 +100101100100 +110011010111 +100111110111 +111001100010 +110011000000 +011101111011 +101001111111 +111011000100 +100100011000 +010110100100 +111100010011 +101100010000 +111101111010 +111101100100 +000011101001 +101111010011 +001100011110 +010100000100 +000001110111 +011111000000 +101011010101 diff --git a/03/main.go b/03/main.go new file mode 100644 index 0000000..e2c78f5 --- /dev/null +++ b/03/main.go @@ -0,0 +1,92 @@ +package main + +import ( + "bufio" + "log" + "os" + "sort" + "strconv" +) + +const bitSize = 40 + +func bitComplement(num uint64) uint64 { + return ^num & (1< averageThreshold { + var add uint64 = 1 << (bitSize - 1 - index) + gammaRate += add + } + } + + epsilonRate := bitComplement(gammaRate) + return gammaRate, epsilonRate +} + +func reduce(slice []string, depth int, max bool) int64 { + var s []string + half := len(slice) / 2 + if half == 0 { + ret, _ := strconv.ParseInt(slice[0], 2, 64) + return ret + } + maxDigit := slice[half][depth] + + for _, str := range slice { + if max && str[depth] == maxDigit { + s = append(s, str) + } + if !max && str[depth] != maxDigit { + s = append(s, str) + } + } + return reduce(s, depth+1, max) +} + +func partTwo(s []string) (int64, int64) { + sort.Strings(s) + return reduce(s, 0, true), reduce(s, 0, false) +} + +func solve() { + file, err := os.Open("bigboi.txt") + if err != nil { + log.Fatal(err) + } + defer file.Close() + + scanner := bufio.NewScanner(file) + scanner.Split(bufio.ScanLines) + + var counts [bitSize]int + var s []string + + total := 0 + + for scanner.Scan() { + line := scanner.Text() + for index, character := range line { + if character == '1' { + counts[index]++ + } + } + s = append(s, line) + total++ + } + + partOne(&counts, &total) + //fmt.Println(int64(g) * int64(e)) + partTwo(s) + //fmt.Println(o * c) +} + +func main() { + solve() +} diff --git a/04/input.txt b/04/input.txt new file mode 100644 index 0000000..65db1f6 --- /dev/null +++ b/04/input.txt @@ -0,0 +1,601 @@ +12,28,0,63,26,38,64,17,74,67,51,44,77,32,6,10,52,47,61,46,50,29,15,1,39,37,13,66,45,8,68,96,53,40,76,72,21,93,16,83,62,48,11,9,20,36,91,19,5,42,99,84,4,95,92,89,7,71,34,35,55,22,59,18,49,14,54,85,82,58,24,73,31,97,69,43,65,27,81,56,87,70,33,88,60,2,75,90,57,94,23,30,78,80,41,3,98,25,79,86 + +50 79 88 34 0 +56 46 5 17 31 +29 6 38 78 68 +75 57 15 44 83 +89 45 43 85 72 + +29 8 56 15 33 + 7 14 51 88 67 +91 32 62 18 73 +53 63 49 34 46 +70 25 77 87 31 + +38 92 26 65 77 +59 39 4 57 16 +91 45 35 36 2 +34 40 89 8 62 +96 28 31 88 33 + +93 96 73 40 13 +57 59 88 32 78 +48 72 23 42 62 +41 7 85 84 44 +95 91 52 61 8 + +23 42 58 38 46 +41 91 92 81 68 +12 51 50 64 71 +32 13 55 44 35 +74 4 40 15 77 + +19 79 7 65 77 +56 98 93 86 87 + 5 68 8 2 49 +83 45 74 92 6 +46 88 33 58 28 + +79 82 12 77 30 +68 6 70 23 80 +24 85 69 91 90 +57 15 1 52 8 +43 26 44 17 53 + +73 88 70 31 44 +58 86 16 11 97 +36 13 40 79 83 +78 25 2 5 91 +62 4 29 71 95 + +51 96 81 78 86 +49 77 12 21 26 +66 2 52 31 68 +56 74 84 91 45 +19 0 8 87 92 + + 3 13 58 50 17 + 4 78 69 16 38 +91 2 23 21 51 +49 79 31 97 90 +37 46 12 80 28 + +61 11 73 50 39 +30 29 0 4 59 +18 78 6 27 22 +38 14 75 48 43 + 3 65 82 56 92 + +69 11 32 30 1 +59 27 4 10 61 +28 92 26 6 36 +25 76 70 33 97 +16 49 84 31 73 + +43 77 14 33 87 +40 32 97 9 76 +59 54 6 73 84 +86 44 42 52 38 +57 3 16 24 83 + +16 55 45 39 1 +94 25 75 22 32 + 3 60 13 91 26 +93 86 18 77 8 + 4 67 5 54 14 + +18 87 33 79 26 +77 73 95 67 82 +70 92 91 43 29 +55 71 97 28 59 + 5 84 81 15 22 + +49 29 48 69 83 +56 70 39 71 72 +68 74 9 94 88 +77 96 38 98 14 +55 7 16 80 31 + +63 51 88 50 9 +48 89 75 43 11 +27 77 22 80 53 +56 4 1 36 52 +87 85 30 35 54 + +53 39 34 88 51 +56 43 19 10 0 +85 22 26 25 54 +98 62 31 66 48 + 1 6 58 21 17 + +34 47 43 4 16 +10 0 1 21 54 + 3 84 83 51 12 +67 35 62 72 11 +93 13 30 9 22 + + 2 67 51 17 36 +77 25 73 80 16 +33 31 61 41 72 +71 98 45 29 15 +60 97 69 58 87 + +88 46 55 19 68 +13 53 71 95 60 +75 3 58 82 41 +28 16 15 57 81 +39 9 34 4 54 + +72 38 5 25 57 +45 30 33 70 15 +43 12 8 1 96 +29 52 3 73 78 +76 35 40 90 77 + +30 18 10 81 74 +89 28 32 70 87 + 1 71 73 36 12 +16 78 48 98 53 + 9 37 49 52 22 + +88 21 69 78 59 +81 5 6 46 72 +76 93 96 50 36 +83 19 51 22 68 +34 20 39 53 63 + +87 64 61 38 28 +21 14 11 6 12 +51 70 78 40 57 + 5 37 66 49 85 +99 41 81 88 19 + +93 9 44 90 49 +56 34 83 79 84 +38 63 53 78 29 + 1 94 37 24 86 +57 4 52 82 6 + +64 31 24 42 33 +78 85 95 38 30 +43 40 23 52 12 +39 84 79 53 57 +73 29 56 69 22 + +30 31 61 15 22 +45 9 43 23 59 +34 87 70 52 28 +47 86 1 49 39 +94 76 98 78 41 + +46 71 30 50 45 +47 9 56 81 8 +60 92 16 6 76 +42 4 77 40 54 + 7 43 32 72 55 + +74 26 50 79 38 +64 72 49 82 21 +93 81 24 45 55 +94 22 20 68 71 +37 36 3 67 1 + + 9 76 18 42 14 +36 45 48 1 28 +94 72 56 7 61 +25 82 50 89 99 +20 29 3 51 46 + +79 56 41 34 18 +98 71 75 74 61 +10 52 28 29 8 +55 84 1 5 2 +80 35 40 42 4 + +71 54 81 23 80 +87 27 98 65 91 + 2 75 4 99 60 +11 17 70 59 50 +67 97 77 12 22 + +11 72 38 57 17 +60 93 16 48 90 +73 9 89 68 18 +71 59 0 94 12 +54 70 96 33 49 + +68 40 21 50 17 +79 25 76 8 1 +72 71 13 39 73 +91 98 28 92 53 +27 23 62 74 35 + +42 97 40 55 69 +87 83 21 94 89 +28 9 1 13 31 +45 4 35 74 25 +85 23 80 70 26 + +36 22 7 63 87 +25 24 60 21 44 +84 6 3 31 46 + 2 32 74 72 96 +75 43 50 35 81 + +49 56 18 58 94 + 7 43 45 2 53 +75 91 30 81 37 +25 50 31 74 82 +24 26 98 80 10 + +45 33 18 66 7 +14 71 60 34 6 +23 3 42 22 38 +41 88 86 77 30 +12 15 70 0 97 + +87 41 96 97 15 +11 88 64 52 62 +26 72 68 18 6 +42 35 90 8 14 +10 3 0 66 28 + +83 46 54 65 96 + 2 78 43 52 47 +77 89 81 53 73 +72 91 7 87 56 +45 14 21 16 59 + +34 62 67 38 58 +95 31 43 88 22 +40 45 98 80 19 +77 94 53 61 14 +68 42 47 65 16 + +54 13 64 24 73 +46 6 91 94 29 +55 12 16 65 89 +31 28 76 87 2 + 5 4 83 43 93 + +81 89 16 67 5 +65 64 70 1 40 + 3 21 52 53 17 +36 19 58 8 0 +31 9 79 93 56 + +58 98 52 71 56 + 4 97 48 91 38 +43 95 92 85 2 +70 10 73 17 26 +60 25 20 45 13 + +42 53 26 14 20 +66 18 28 10 77 +23 96 22 25 21 +95 52 50 70 94 +41 81 45 84 83 + +46 80 4 62 97 +23 85 47 61 12 + 9 8 87 72 69 + 3 30 55 1 54 +52 56 7 22 36 + +30 7 83 63 47 + 0 75 20 76 57 +98 89 69 22 25 +53 66 24 39 33 +43 2 19 35 85 + +40 11 2 57 54 +93 58 37 82 32 +24 97 8 49 17 +14 89 91 41 79 +65 6 55 72 99 + +66 14 7 69 98 +97 81 80 43 45 +11 17 60 89 59 +23 58 63 15 84 +62 91 33 46 77 + +97 1 96 14 31 +62 3 69 80 9 +11 91 94 85 63 +20 30 40 53 64 +34 45 18 4 52 + +65 75 81 69 53 +40 63 98 67 46 + 1 49 38 73 2 +33 99 91 77 90 +94 14 21 34 22 + + 5 37 91 44 57 +20 72 27 93 45 +86 3 29 84 22 +83 73 90 68 21 + 1 98 40 25 58 + +39 22 2 41 91 +18 96 21 4 95 +75 77 64 85 19 +35 83 87 20 93 +54 56 81 50 74 + +84 91 16 55 14 +85 67 18 19 3 +17 15 79 82 20 +97 47 58 80 28 +48 53 89 73 87 + +36 91 46 89 22 +10 47 58 85 43 +20 54 45 57 84 +33 51 71 35 29 +80 93 24 98 50 + +42 10 65 99 61 +87 19 58 48 66 +36 68 7 63 57 +72 20 81 21 96 +80 13 15 60 90 + +61 37 87 98 69 +21 80 7 74 40 +93 94 60 39 22 +28 8 81 19 42 +12 59 34 72 20 + + 2 40 42 5 74 +82 58 93 9 73 +38 69 51 33 85 +76 26 46 55 70 +39 41 89 84 8 + +36 99 7 90 3 +50 9 71 85 67 +92 23 79 28 87 +63 56 44 31 52 +65 55 62 58 64 + +23 28 33 0 2 +14 69 92 9 31 +77 81 74 71 24 +53 19 57 85 61 +20 41 21 56 99 + +57 68 87 13 80 +21 4 95 59 46 +29 26 55 89 70 +64 66 90 31 34 + 3 28 12 16 47 + +75 20 85 31 82 +28 67 83 73 91 +19 92 33 96 86 +61 39 59 50 74 +94 36 69 5 79 + +89 63 97 48 51 +26 2 31 17 60 +47 33 27 3 42 +20 88 61 46 68 +41 66 90 32 92 + +34 46 50 33 28 +43 70 3 42 31 +10 74 68 80 37 +51 58 48 7 75 +47 53 35 86 22 + +52 17 41 92 58 +90 84 65 15 35 +24 12 95 70 26 +47 29 73 32 8 +83 74 56 67 33 + +20 86 99 92 28 +31 44 68 32 1 +87 47 78 98 83 + 6 50 54 30 93 +60 4 58 24 51 + +95 59 2 29 75 +32 42 30 48 5 +37 11 82 66 96 +45 28 69 52 0 +36 57 46 12 55 + +31 65 46 59 27 +85 70 75 13 48 +42 0 51 1 88 +40 6 34 8 71 + 7 22 11 98 25 + + 5 14 10 19 8 +87 35 92 18 82 +73 81 36 4 47 +57 16 15 79 60 +11 90 75 31 28 + +21 61 3 56 41 +13 8 29 92 31 +35 46 30 26 57 +11 66 58 47 43 +50 70 40 68 69 + +71 27 86 78 58 +98 7 26 66 17 +77 85 62 39 42 +88 29 40 48 49 +83 89 20 10 0 + + 5 17 40 55 28 +48 19 83 10 97 +58 69 9 91 94 +80 50 8 43 86 +84 21 27 75 67 + +36 46 31 75 40 +77 34 24 72 93 + 3 12 65 70 64 +28 10 63 59 51 +56 25 67 2 80 + +75 96 15 26 53 +42 0 48 56 85 +95 4 12 49 57 + 9 79 38 93 54 +98 82 99 66 8 + +93 33 31 41 49 +83 96 63 46 8 +51 97 47 79 56 +43 69 54 38 2 +20 21 84 17 70 + +84 28 48 9 56 +18 22 34 46 1 +31 61 87 62 27 +13 96 58 95 20 +45 10 57 17 0 + +63 26 57 96 64 +52 9 77 4 44 +56 88 76 55 71 +33 99 16 7 72 +54 27 78 61 24 + +98 48 75 24 15 +26 27 6 79 5 +95 47 56 18 69 +37 57 8 61 9 +51 91 31 74 36 + +84 49 7 90 95 +41 27 15 2 87 +71 8 34 39 37 +57 5 46 40 56 +38 65 6 48 4 + +92 3 77 66 10 +71 83 86 34 18 +16 76 54 38 26 + 8 17 67 30 88 +37 50 11 69 62 + +77 18 60 80 39 +12 66 51 13 14 +85 84 57 91 30 +46 98 74 71 56 +19 62 54 2 65 + +68 27 58 13 64 +35 16 75 86 90 +24 28 38 31 59 +21 43 12 84 29 +32 51 40 77 39 + +99 19 74 0 9 +59 92 67 82 69 +72 46 63 51 77 + 2 45 66 28 12 +93 38 15 64 27 + +96 41 34 58 25 +46 91 9 57 72 +67 24 68 36 15 + 0 30 78 63 49 +87 50 82 32 75 + +10 3 82 73 51 +94 21 43 45 11 +65 83 92 37 86 +60 90 32 52 8 +87 97 53 99 81 + +33 77 21 68 53 +67 95 99 17 69 +50 62 94 24 34 +72 56 63 66 57 +15 10 42 84 80 + +69 16 75 53 15 +18 85 2 5 83 + 0 33 23 24 89 +80 92 74 79 38 +31 11 26 84 97 + +34 37 93 50 87 +31 79 3 39 64 +81 22 66 40 85 +15 69 42 88 91 +68 33 57 60 14 + +30 99 47 23 4 +71 3 74 22 49 +44 76 50 38 88 +59 21 27 32 35 +46 41 65 24 48 + + 5 14 81 45 20 +91 18 28 7 51 +29 24 76 79 84 +22 58 27 9 99 +67 47 60 85 41 + +34 29 50 9 58 +87 68 70 72 63 +85 10 3 14 18 +59 48 19 93 39 +61 25 16 26 54 + + 0 4 94 42 12 +64 41 96 85 44 +89 61 74 47 97 +54 63 33 51 93 + 3 18 79 86 99 + +49 55 24 85 26 +50 38 6 87 45 +64 44 16 92 72 +12 81 90 51 60 + 0 37 47 54 70 + +45 31 27 17 41 +10 72 0 76 66 +24 32 86 87 97 +54 75 62 33 79 +92 47 26 11 9 + +11 94 1 2 8 +38 31 61 48 13 +74 85 24 19 78 +97 69 20 14 59 +26 5 66 4 58 + + 5 89 53 19 34 +50 59 13 9 48 +29 94 96 85 10 +52 91 17 78 31 +63 55 27 66 16 + +78 13 16 37 54 +17 69 42 6 80 +66 87 51 43 21 +33 50 44 74 41 +36 40 75 22 0 + +11 98 86 83 46 +32 0 60 31 15 +62 96 29 77 22 +84 7 36 25 13 +34 91 14 92 49 + +51 98 64 95 75 +88 8 49 89 25 +37 53 39 47 18 +60 84 77 22 92 +52 42 85 21 45 diff --git a/04/main.js b/04/main.js new file mode 100644 index 0000000..341fcd9 --- /dev/null +++ b/04/main.js @@ -0,0 +1,51 @@ +const fs = require("fs") + +const input = fs.readFileSync("input.txt", "utf-8", err => { + err && console.error(err) +}).split("\n\n") + +const draws = input[0].split(",") +const boards = [] + +// parse and set up 5x5 boards +for (let i = 1; i < input.length; i++){ + const str = input[i] + const b = [...str.matchAll(/[0-9]+/g)].flat() + const board = [] + while (b.length) { + board.push(b.splice(0, 5)) + } + boards.push(board) +} + +const total = boards.length + +// draw numbers and find winners +for (let drawCount = 5; drawCount < draws.length; drawCount++){ + const drawSet = new Set(draws.slice(0, drawCount)) + + for (const [boardIndex, board] of boards.entries()){ + for (const row of board){ + checkWin(row, drawSet, board, boardIndex, drawCount, boards.length == total, boards.length == 1) + } + + for (let colNum = 0; colNum < 5; colNum++){ + const column = [] + for (let j = 0; j < 5; j++){ + column.push(board[j][colNum]) + } + checkWin(column, drawSet, board, boardIndex, drawCount, boards.length == total, boards.length == 1) + } + } +} + +function /* keith */ checkWin(line, drawSet, board, boardIndex, drawCount, isFirst, isLast) { + const matches = line.filter(num => drawSet.has(num)) + if (matches.length == 5){ + const win = board.flat().filter(num => !drawSet.has(num)).reduce((a,b) => parseInt(a) + parseInt(b)) + if (isFirst || isLast){ + console.log(`${isFirst ? "First winner score:" : "Last Winner score:"}`, win * draws[drawCount-1]) + } + boards.splice(boardIndex, 1) + } +} \ No newline at end of file diff --git a/05/input.txt b/05/input.txt new file mode 100644 index 0000000..4f9b5b2 --- /dev/null +++ b/05/input.txt @@ -0,0 +1,500 @@ +409,872 -> 409,963 +149,412 -> 281,280 +435,281 -> 435,362 +52,208 -> 969,208 +427,265 -> 884,265 +779,741 -> 779,738 +949,41 -> 13,977 +145,690 -> 145,180 +513,665 -> 513,869 +405,174 -> 405,612 +943,504 -> 93,504 +230,808 -> 570,468 +69,278 -> 69,30 +35,336 -> 911,336 +812,83 -> 812,197 +981,962 -> 29,10 +863,709 -> 371,709 +301,963 -> 955,309 +187,101 -> 187,227 +85,762 -> 85,301 +587,362 -> 652,427 +73,359 -> 73,139 +124,449 -> 124,380 +432,659 -> 30,659 +96,728 -> 756,68 +957,215 -> 957,868 +64,779 -> 64,692 +315,403 -> 854,942 +890,663 -> 213,663 +606,864 -> 264,864 +81,446 -> 81,890 +171,463 -> 395,463 +766,639 -> 912,785 +10,163 -> 10,835 +65,906 -> 258,906 +975,364 -> 408,364 +595,728 -> 910,728 +29,274 -> 705,274 +42,965 -> 50,965 +815,588 -> 959,732 +293,344 -> 484,344 +579,220 -> 579,949 +832,951 -> 72,951 +56,296 -> 56,730 +318,589 -> 181,589 +32,33 -> 983,984 +355,794 -> 448,887 +362,25 -> 696,25 +374,207 -> 144,207 +851,66 -> 851,709 +404,98 -> 414,98 +274,601 -> 787,601 +898,100 -> 223,775 +883,638 -> 73,638 +12,989 -> 942,59 +30,590 -> 146,474 +46,711 -> 693,64 +295,925 -> 295,854 +744,89 -> 773,89 +954,55 -> 33,976 +647,361 -> 130,361 +985,410 -> 606,410 +377,884 -> 297,884 +215,961 -> 981,195 +176,422 -> 176,759 +522,216 -> 151,216 +372,149 -> 115,406 +80,92 -> 218,230 +350,754 -> 967,754 +481,944 -> 711,714 +176,795 -> 845,126 +944,568 -> 944,21 +86,302 -> 628,302 +312,691 -> 312,640 +662,874 -> 168,874 +336,98 -> 336,842 +289,69 -> 811,591 +824,777 -> 256,209 +374,311 -> 374,905 +663,254 -> 137,780 +183,248 -> 780,845 +860,32 -> 157,32 +955,794 -> 804,794 +461,179 -> 96,544 +780,264 -> 475,264 +205,583 -> 205,645 +707,364 -> 470,364 +735,364 -> 551,180 +127,479 -> 680,479 +305,162 -> 305,85 +348,349 -> 348,806 +892,94 -> 88,898 +340,593 -> 416,593 +872,175 -> 93,954 +389,750 -> 174,750 +372,661 -> 949,661 +121,256 -> 352,487 +636,204 -> 99,741 +388,328 -> 400,316 +664,333 -> 549,333 +89,92 -> 884,887 +184,373 -> 552,741 +464,949 -> 823,590 +69,713 -> 767,713 +302,33 -> 302,160 +502,110 -> 83,529 +431,331 -> 210,331 +236,588 -> 931,588 +931,315 -> 406,315 +154,272 -> 49,272 +723,159 -> 368,159 +397,615 -> 402,620 +431,796 -> 134,499 +378,837 -> 378,670 +582,28 -> 582,789 +374,967 -> 445,896 +723,874 -> 30,874 +847,767 -> 920,767 +761,101 -> 761,338 +711,833 -> 419,833 +953,335 -> 953,479 +840,614 -> 410,614 +483,485 -> 757,759 +694,472 -> 694,930 +508,275 -> 754,275 +815,419 -> 700,534 +399,843 -> 399,804 +909,771 -> 95,771 +796,893 -> 332,429 +833,488 -> 833,899 +478,240 -> 478,718 +343,720 -> 343,285 +320,204 -> 320,213 +410,794 -> 240,964 +848,227 -> 214,227 +49,919 -> 880,88 +273,648 -> 187,648 +746,313 -> 746,590 +715,527 -> 307,935 +630,771 -> 630,815 +780,670 -> 710,670 +811,789 -> 964,789 +397,267 -> 397,769 +496,510 -> 744,758 +314,62 -> 89,62 +217,417 -> 217,865 +680,862 -> 680,739 +150,902 -> 816,236 +504,120 -> 45,120 +79,43 -> 967,931 +584,197 -> 532,197 +893,717 -> 489,313 +609,759 -> 684,684 +146,24 -> 386,24 +704,645 -> 866,645 +24,329 -> 44,309 +417,741 -> 176,982 +12,48 -> 12,138 +522,359 -> 937,359 +165,269 -> 55,159 +207,537 -> 610,940 +364,213 -> 323,213 +144,750 -> 144,26 +622,840 -> 488,706 +909,201 -> 794,201 +959,185 -> 579,565 +848,720 -> 848,322 +81,159 -> 81,652 +98,174 -> 841,917 +364,437 -> 364,568 +884,90 -> 973,90 +962,931 -> 60,29 +915,967 -> 681,733 +853,859 -> 853,809 +630,362 -> 630,161 +848,455 -> 672,279 +50,212 -> 419,212 +415,719 -> 413,719 +818,274 -> 813,274 +206,779 -> 206,197 +251,729 -> 715,729 +981,873 -> 452,344 +945,708 -> 704,467 +875,38 -> 76,837 +163,799 -> 435,799 +300,821 -> 913,208 +978,15 -> 39,954 +724,167 -> 191,167 +342,600 -> 342,405 +190,17 -> 945,772 +844,659 -> 176,659 +591,135 -> 50,135 +252,353 -> 252,527 +389,906 -> 389,861 +504,387 -> 39,852 +108,567 -> 108,148 +60,600 -> 60,658 +903,968 -> 115,180 +633,34 -> 325,342 +186,536 -> 708,14 +588,276 -> 74,790 +596,837 -> 596,909 +619,278 -> 737,160 +368,953 -> 245,830 +112,496 -> 112,801 +181,583 -> 243,521 +522,293 -> 616,293 +389,166 -> 418,166 +792,940 -> 622,940 +159,953 -> 769,343 +857,231 -> 857,553 +339,176 -> 339,463 +35,412 -> 35,883 +478,694 -> 478,325 +741,257 -> 741,785 +154,130 -> 810,786 +869,81 -> 869,80 +118,815 -> 918,815 +941,954 -> 941,940 +987,51 -> 56,982 +243,571 -> 243,385 +36,138 -> 36,24 +28,971 -> 975,24 +945,842 -> 759,842 +474,470 -> 784,470 +918,520 -> 512,114 +836,606 -> 668,774 +557,918 -> 422,918 +925,889 -> 875,939 +14,317 -> 467,770 +638,312 -> 440,312 +139,353 -> 212,353 +690,339 -> 622,339 +904,863 -> 307,266 +302,939 -> 148,939 +493,409 -> 93,809 +185,871 -> 546,871 +25,355 -> 889,355 +355,832 -> 273,832 +918,56 -> 38,936 +950,189 -> 81,189 +311,469 -> 289,469 +567,269 -> 963,269 +958,306 -> 958,852 +847,753 -> 803,753 +359,983 -> 332,956 +885,128 -> 164,128 +479,841 -> 350,841 +850,280 -> 163,967 +784,822 -> 555,822 +607,29 -> 245,391 +293,280 -> 293,685 +273,716 -> 273,327 +974,155 -> 974,415 +419,34 -> 419,898 +543,344 -> 543,126 +137,163 -> 737,163 +252,158 -> 899,805 +581,36 -> 857,36 +588,728 -> 588,511 +320,303 -> 706,303 +180,914 -> 939,155 +547,676 -> 547,535 +974,961 -> 97,84 +179,757 -> 789,757 +450,706 -> 450,452 +595,598 -> 526,598 +184,42 -> 184,43 +221,963 -> 738,963 +79,976 -> 79,109 +638,793 -> 638,986 +98,81 -> 534,517 +700,334 -> 700,201 +533,265 -> 76,265 +131,839 -> 728,839 +120,78 -> 815,773 +455,825 -> 165,825 +521,258 -> 978,258 +425,931 -> 966,931 +358,754 -> 506,902 +126,228 -> 851,228 +393,114 -> 29,114 +58,615 -> 425,615 +384,607 -> 581,804 +140,939 -> 140,673 +372,400 -> 795,400 +115,165 -> 84,165 +788,275 -> 544,275 +126,329 -> 725,329 +182,541 -> 99,541 +410,709 -> 974,709 +681,202 -> 687,208 +495,832 -> 733,594 +259,781 -> 444,596 +49,442 -> 49,243 +988,986 -> 18,16 +224,624 -> 224,32 +755,41 -> 185,611 +512,168 -> 492,168 +55,891 -> 762,184 +162,845 -> 162,19 +976,771 -> 449,244 +398,789 -> 398,336 +796,28 -> 796,326 +589,735 -> 589,668 +382,303 -> 10,675 +650,968 -> 140,458 +784,265 -> 245,804 +961,980 -> 346,365 +685,360 -> 567,360 +60,847 -> 749,158 +828,80 -> 46,862 +96,760 -> 96,340 +22,372 -> 878,372 +26,973 -> 928,71 +86,697 -> 86,790 +684,896 -> 684,638 +644,370 -> 644,177 +915,854 -> 134,73 +453,678 -> 453,394 +716,594 -> 160,38 +757,62 -> 518,301 +977,928 -> 977,53 +705,858 -> 328,858 +352,527 -> 759,120 +221,365 -> 677,821 +237,815 -> 829,815 +756,615 -> 756,129 +681,948 -> 28,295 +712,731 -> 120,731 +141,292 -> 141,338 +874,781 -> 874,414 +197,892 -> 972,117 +673,779 -> 113,219 +469,240 -> 887,240 +546,367 -> 270,367 +115,356 -> 264,505 +587,969 -> 942,969 +697,332 -> 432,597 +251,742 -> 251,402 +655,258 -> 875,38 +806,801 -> 438,801 +776,525 -> 296,45 +437,137 -> 437,507 +310,870 -> 875,305 +92,877 -> 949,20 +96,695 -> 269,868 +917,601 -> 917,347 +598,172 -> 91,679 +407,743 -> 818,743 +74,932 -> 720,286 +574,967 -> 747,794 +989,982 -> 22,15 +128,514 -> 590,976 +46,86 -> 851,891 +976,914 -> 87,25 +948,659 -> 948,40 +442,504 -> 442,398 +310,824 -> 509,625 +946,338 -> 433,851 +555,241 -> 531,265 +336,13 -> 336,48 +688,880 -> 394,880 +105,143 -> 823,861 +761,330 -> 228,863 +405,132 -> 853,580 +780,886 -> 326,432 +471,45 -> 471,600 +810,971 -> 810,418 +591,58 -> 591,821 +494,133 -> 616,11 +519,746 -> 519,230 +696,879 -> 107,879 +21,24 -> 937,940 +18,822 -> 637,203 +159,468 -> 570,468 +635,850 -> 635,408 +446,469 -> 337,469 +962,690 -> 962,28 +925,958 -> 40,73 +123,183 -> 545,183 +26,767 -> 26,548 +898,101 -> 249,750 +85,706 -> 85,446 +224,763 -> 15,763 +503,655 -> 847,655 +659,905 -> 650,905 +596,462 -> 851,207 +421,230 -> 884,230 +550,18 -> 524,18 +437,375 -> 715,375 +210,202 -> 210,348 +263,298 -> 263,948 +132,352 -> 749,969 +582,454 -> 582,771 +724,99 -> 724,388 +16,528 -> 16,317 +22,949 -> 22,987 +457,328 -> 457,327 +279,130 -> 279,234 +56,338 -> 368,650 +448,295 -> 533,295 +898,90 -> 60,928 +116,619 -> 208,527 +614,481 -> 614,152 +113,412 -> 543,412 +854,305 -> 854,748 +225,825 -> 115,935 +976,365 -> 522,365 +547,394 -> 547,82 +800,695 -> 800,111 +36,10 -> 973,947 +557,441 -> 527,441 +62,798 -> 708,798 +582,585 -> 816,585 +599,33 -> 70,562 +971,863 -> 971,150 +408,273 -> 535,273 +797,215 -> 692,215 +537,922 -> 519,922 +299,302 -> 504,302 +88,361 -> 88,249 +430,311 -> 544,311 +902,127 -> 902,791 +346,986 -> 346,307 +523,534 -> 285,296 +600,628 -> 676,628 +373,689 -> 945,117 +265,189 -> 343,189 +391,632 -> 391,728 +500,516 -> 712,304 +250,891 -> 41,891 +591,539 -> 591,577 +968,250 -> 265,250 +80,32 -> 80,988 +668,385 -> 323,385 +407,103 -> 865,103 +755,190 -> 693,190 +754,113 -> 754,392 +957,261 -> 967,251 +881,734 -> 803,812 +234,912 -> 234,326 +711,893 -> 711,29 +513,479 -> 782,479 +111,224 -> 675,224 +125,645 -> 125,502 +591,983 -> 591,726 +462,390 -> 85,390 +854,275 -> 649,480 +253,792 -> 23,792 +940,975 -> 447,975 +604,297 -> 604,386 +172,217 -> 633,217 +159,941 -> 159,569 +468,72 -> 468,787 +931,935 -> 36,40 +114,166 -> 360,412 +539,740 -> 349,930 +314,342 -> 65,93 +905,650 -> 817,650 +786,546 -> 173,546 +209,967 -> 209,142 +679,64 -> 68,675 +472,70 -> 840,70 +750,753 -> 124,753 +79,490 -> 652,490 +655,114 -> 655,575 +984,18 -> 984,287 +458,41 -> 961,544 +358,208 -> 358,679 +977,830 -> 283,136 +250,800 -> 187,800 +64,516 -> 64,809 +196,235 -> 781,235 +727,988 -> 891,824 +437,158 -> 437,549 +565,231 -> 565,368 +293,411 -> 29,147 +100,905 -> 969,36 +59,615 -> 920,615 +844,883 -> 844,173 +966,980 -> 25,39 +802,923 -> 163,284 +980,24 -> 730,24 +357,474 -> 32,799 +735,23 -> 735,566 +970,426 -> 970,42 +194,542 -> 194,328 +372,69 -> 630,69 +779,295 -> 239,835 +793,381 -> 650,238 +366,579 -> 366,762 +502,354 -> 530,326 +432,125 -> 432,795 +162,220 -> 162,239 +631,944 -> 63,944 +261,526 -> 330,457 +913,445 -> 913,958 +786,160 -> 333,613 +919,123 -> 88,954 diff --git a/05/main.go b/05/main.go new file mode 100644 index 0000000..5573bc6 --- /dev/null +++ b/05/main.go @@ -0,0 +1,109 @@ +package main + +import ( + "bufio" + "fmt" + "log" + "os" + "regexp" + "strconv" +) + +type Point struct { + x int + y int +} + +type Line struct { + start Point + end Point +} + +func createLine(s []string) *Line { + l := &Line{start: Point{}, end: Point{}} + l.start.x, _ = strconv.Atoi(s[0]) + l.start.y, _ = strconv.Atoi(s[1]) + l.end.x, _ = strconv.Atoi(s[2]) + l.end.y, _ = strconv.Atoi(s[3]) + return l +} + +func (l *Line) Walk() []Point { + var p []Point + + xstart, xend := minMax(l.start.x, l.end.x) + ystart, yend := minMax(l.start.y, l.end.y) + // diagonal line + if xend-xstart == yend-ystart { + for x, y := l.start.x, l.start.y; ; { + p = append(p, Point{x: x, y: y}) + if x == l.end.x { + break + } + if x > l.end.x { + x-- + } else { + x++ + } + if y > l.end.y { + y-- + } else { + y++ + } + } + fmt.Print() + } else { + // horizontal line + for x := xstart; x <= xend && l.start.y == l.end.y; x++ { + p = append(p, Point{x: x, y: l.start.y}) + } + // vertical line + for y := ystart; y <= yend && l.start.x == l.end.x; y++ { + p = append(p, Point{x: l.start.x, y: y}) + } + } + return p +} + +func minMax(a int, b int) (min int, max int) { + if a > b { + min, max = b, a + } else { + min, max = a, b + } + return +} + +func main() { + file, err := os.Open("input.txt") + if err != nil { + log.Fatal(err) + } + defer file.Close() + + scanner := bufio.NewScanner(file) + scanner.Split(bufio.ScanLines) + + r := regexp.MustCompile("[0-9]+") + + floorMap := make(map[Point]int) + + for scanner.Scan() { + text := scanner.Text() + coords := r.FindAllString(text, -1) + line := createLine(coords) + points := line.Walk() + + for _, p := range points { + floorMap[p]++ + } + } + + var overlapCount int + for _, v := range floorMap { + if v > 1 { + overlapCount++ + } + } + fmt.Println(overlapCount) +} diff --git a/boilerplate/cc/boilerplate.cc b/boilerplate/cc/boilerplate.cc index 6983501..d6c013c 100644 --- a/boilerplate/cc/boilerplate.cc +++ b/boilerplate/cc/boilerplate.cc @@ -1,6 +1,23 @@ #include "boilerplate.hh" -// newline separated split +// newline separated split, int +std::vector readFileInt(std::string file){ + std::vector outputVec; + + std::ifstream inputFile(file); + if (!inputFile.is_open()){ + std::cerr << "File " << file << "not found"; + exit(1); + } + + std::string line; + while(getline(inputFile, line)){ + outputVec.push_back(stoi(line)); + } + return outputVec; +} + +// newline separated split, string std::vector readFile(std::string file){ std::vector outputVec; diff --git a/boilerplate/cc/boilerplate.hh b/boilerplate/cc/boilerplate.hh index 17c9f04..5f6c5bd 100644 --- a/boilerplate/cc/boilerplate.hh +++ b/boilerplate/cc/boilerplate.hh @@ -9,6 +9,7 @@ using InputArrays = std::vector>; InputArrays readFile(std::string, char); +std::vector readFileInt(std::string); std::vector readFile(std::string); std::vector ssplit(std::string, char);