commit 82f8e11ae4339c82a895d9511d43f9185b89dc0f Author: Matthieu Bessat Date: Sun Dec 5 16:52:20 2021 +0100 day 1-5 diff --git a/day_1/code.py b/day_1/code.py new file mode 100644 index 0000000..e2a4f02 --- /dev/null +++ b/day_1/code.py @@ -0,0 +1,14 @@ +import fileinput + +previous = None +count = 0 +for i,line in enumerate(fileinput.input()): + try: + val = int(line.strip()) + except ValueError: + continue + if previous != None and val > previous: + count += 1 + previous = val + +print(count) diff --git a/day_1/code2.py b/day_1/code2.py new file mode 100644 index 0000000..5ed9bf1 --- /dev/null +++ b/day_1/code2.py @@ -0,0 +1,18 @@ +import fileinput + +data = [] +for inp in fileinput.input(): + val = inp.strip() + if val != '': + int_value = int(val) + data.append(int_value) +prec = None +count = 0 +for i in range(len(data) - 2): + s = data[i]+data[i+1]+data[i+2] + if prec != None and s > prec: + count += 1 + prec = s + +print(count) + diff --git a/day_1/input1.txt b/day_1/input1.txt new file mode 100644 index 0000000..60ac9b8 --- /dev/null +++ b/day_1/input1.txt @@ -0,0 +1,11 @@ +199 +200 +208 +210 +200 +207 +240 +269 +260 +263 + diff --git a/day_1/input2.txt b/day_1/input2.txt new file mode 100644 index 0000000..271cb3d --- /dev/null +++ b/day_1/input2.txt @@ -0,0 +1,2000 @@ +151 +150 +148 +147 +154 +155 +156 +161 +164 +165 +172 +174 +171 +172 +168 +170 +167 +168 +170 +177 +179 +146 +144 +168 +170 +174 +185 +184 +183 +185 +178 +179 +161 +164 +162 +167 +176 +175 +178 +179 +185 +183 +179 +174 +173 +174 +203 +199 +203 +201 +200 +210 +209 +207 +203 +204 +205 +208 +207 +215 +236 +238 +236 +238 +241 +242 +226 +225 +221 +218 +207 +209 +194 +191 +203 +202 +182 +160 +159 +191 +185 +171 +191 +185 +172 +178 +198 +200 +176 +181 +184 +185 +193 +205 +206 +207 +203 +229 +232 +242 +254 +250 +266 +265 +288 +278 +273 +274 +253 +255 +253 +246 +245 +247 +243 +246 +248 +251 +245 +243 +242 +259 +254 +259 +261 +274 +271 +273 +275 +283 +287 +286 +287 +286 +299 +295 +298 +300 +299 +302 +301 +300 +307 +302 +326 +323 +321 +318 +312 +302 +304 +301 +306 +309 +328 +326 +333 +346 +364 +369 +370 +358 +364 +363 +364 +361 +374 +373 +383 +385 +379 +378 +377 +353 +352 +353 +357 +355 +348 +356 +358 +359 +358 +357 +349 +354 +360 +341 +343 +342 +343 +347 +317 +322 +324 +328 +338 +350 +323 +365 +364 +384 +391 +395 +394 +385 +384 +367 +371 +376 +380 +390 +388 +387 +390 +401 +379 +378 +360 +363 +360 +370 +362 +349 +342 +324 +327 +338 +336 +339 +341 +337 +334 +319 +320 +317 +319 +314 +316 +350 +351 +352 +351 +349 +350 +352 +343 +347 +339 +337 +335 +338 +341 +342 +343 +345 +359 +361 +378 +382 +376 +381 +388 +389 +375 +368 +372 +365 +367 +369 +370 +369 +364 +363 +362 +364 +355 +372 +350 +356 +358 +363 +353 +354 +335 +327 +325 +326 +327 +342 +329 +327 +342 +337 +336 +334 +354 +343 +345 +341 +350 +344 +345 +352 +356 +388 +391 +406 +397 +405 +408 +402 +397 +398 +395 +410 +409 +411 +409 +413 +417 +416 +418 +424 +423 +424 +444 +438 +436 +459 +465 +463 +462 +470 +465 +473 +472 +464 +466 +468 +463 +469 +466 +469 +470 +457 +458 +457 +463 +478 +494 +507 +499 +498 +499 +510 +514 +517 +516 +537 +549 +559 +549 +541 +540 +541 +554 +557 +559 +547 +560 +563 +585 +609 +604 +605 +606 +612 +611 +601 +600 +588 +590 +584 +582 +583 +584 +580 +572 +552 +547 +538 +540 +526 +508 +491 +495 +512 +514 +504 +508 +509 +500 +495 +494 +493 +530 +528 +529 +522 +538 +519 +515 +502 +476 +467 +469 +470 +478 +477 +473 +475 +486 +512 +513 +517 +499 +503 +504 +505 +502 +503 +504 +505 +507 +516 +533 +539 +551 +552 +555 +551 +550 +548 +543 +534 +536 +524 +516 +534 +535 +533 +537 +545 +546 +545 +543 +544 +542 +574 +576 +575 +552 +551 +557 +558 +562 +555 +557 +574 +575 +564 +551 +543 +531 +534 +522 +525 +524 +522 +521 +524 +525 +538 +553 +561 +544 +542 +553 +556 +558 +557 +556 +558 +564 +551 +552 +545 +547 +571 +570 +571 +570 +569 +567 +569 +577 +581 +580 +577 +576 +574 +578 +568 +564 +567 +550 +527 +525 +524 +522 +520 +521 +522 +547 +550 +555 +554 +558 +559 +550 +552 +556 +557 +556 +567 +549 +548 +545 +565 +566 +570 +558 +545 +546 +545 +556 +552 +532 +535 +536 +535 +538 +543 +546 +553 +554 +577 +576 +577 +576 +568 +585 +583 +587 +575 +577 +588 +585 +583 +587 +577 +559 +561 +563 +559 +538 +545 +538 +539 +553 +559 +546 +549 +551 +552 +551 +542 +541 +543 +517 +514 +538 +550 +553 +530 +531 +539 +538 +551 +552 +550 +577 +596 +602 +599 +598 +615 +638 +641 +657 +642 +644 +645 +648 +644 +628 +626 +627 +595 +594 +595 +597 +601 +626 +635 +640 +641 +643 +649 +658 +654 +687 +662 +682 +678 +679 +709 +710 +716 +706 +705 +704 +701 +696 +701 +700 +703 +705 +707 +719 +698 +700 +703 +705 +708 +701 +735 +732 +712 +713 +715 +718 +719 +730 +731 +730 +736 +765 +768 +767 +764 +763 +791 +820 +852 +853 +860 +863 +865 +866 +850 +845 +823 +835 +820 +822 +816 +817 +816 +829 +830 +828 +809 +798 +771 +764 +778 +779 +769 +779 +789 +796 +801 +798 +800 +802 +804 +790 +788 +791 +778 +770 +763 +756 +739 +729 +719 +734 +737 +739 +740 +743 +745 +771 +772 +776 +793 +789 +791 +788 +789 +788 +792 +798 +801 +807 +801 +797 +793 +799 +804 +791 +790 +783 +784 +788 +786 +783 +784 +796 +791 +771 +764 +765 +768 +767 +770 +771 +781 +757 +750 +746 +755 +776 +777 +793 +797 +798 +795 +797 +800 +809 +807 +813 +843 +853 +869 +871 +873 +868 +861 +851 +852 +851 +843 +849 +835 +842 +843 +830 +828 +825 +826 +841 +871 +874 +872 +863 +862 +859 +861 +888 +895 +900 +901 +881 +878 +892 +888 +889 +893 +909 +893 +897 +910 +914 +912 +899 +912 +911 +908 +906 +907 +919 +926 +930 +932 +933 +934 +935 +937 +938 +934 +957 +937 +938 +945 +946 +937 +932 +960 +951 +973 +972 +978 +975 +976 +971 +973 +971 +974 +975 +976 +981 +980 +971 +972 +970 +972 +975 +977 +976 +978 +983 +1002 +1003 +996 +990 +978 +1012 +1021 +1027 +1005 +1021 +1032 +1031 +1026 +1036 +1044 +1018 +1021 +1042 +1050 +1052 +1050 +1052 +1053 +1055 +1041 +1032 +1029 +1027 +1028 +1041 +1054 +1047 +1046 +1050 +1064 +1029 +1040 +1039 +1036 +1037 +1026 +1033 +1034 +1025 +1029 +1025 +1026 +1024 +1025 +1021 +1022 +1019 +1016 +1020 +1008 +1003 +1006 +1040 +1037 +1044 +1042 +1044 +1040 +1048 +1044 +1054 +1037 +1034 +1040 +1041 +1019 +1015 +1021 +1042 +1043 +1037 +1035 +1032 +1034 +1043 +1060 +1050 +1047 +1052 +1057 +1060 +1059 +1047 +1051 +1053 +1040 +1046 +1043 +1041 +1042 +1046 +1030 +1029 +1010 +1022 +1023 +1025 +1023 +1032 +1050 +1051 +1047 +1044 +1050 +1057 +1058 +1061 +1076 +1077 +1071 +1081 +1084 +1118 +1128 +1123 +1126 +1119 +1121 +1118 +1120 +1119 +1110 +1118 +1108 +1118 +1115 +1130 +1131 +1120 +1139 +1134 +1136 +1113 +1114 +1118 +1119 +1114 +1106 +1077 +1086 +1088 +1082 +1095 +1099 +1100 +1110 +1114 +1101 +1116 +1103 +1102 +1103 +1111 +1112 +1109 +1150 +1172 +1169 +1170 +1183 +1188 +1186 +1205 +1200 +1205 +1212 +1207 +1211 +1227 +1228 +1222 +1225 +1226 +1221 +1224 +1225 +1224 +1228 +1220 +1221 +1222 +1243 +1247 +1248 +1259 +1258 +1246 +1254 +1251 +1260 +1261 +1251 +1252 +1275 +1273 +1269 +1291 +1285 +1274 +1275 +1278 +1277 +1287 +1299 +1300 +1275 +1281 +1268 +1298 +1297 +1299 +1274 +1270 +1271 +1278 +1256 +1248 +1240 +1224 +1225 +1230 +1233 +1230 +1210 +1209 +1207 +1213 +1226 +1224 +1226 +1230 +1226 +1227 +1223 +1234 +1229 +1228 +1227 +1226 +1232 +1230 +1235 +1208 +1212 +1213 +1216 +1215 +1216 +1239 +1241 +1245 +1247 +1253 +1260 +1252 +1262 +1272 +1266 +1267 +1268 +1266 +1270 +1277 +1280 +1282 +1280 +1271 +1273 +1272 +1284 +1282 +1285 +1286 +1287 +1286 +1287 +1288 +1292 +1304 +1299 +1288 +1307 +1315 +1311 +1301 +1311 +1345 +1364 +1359 +1358 +1373 +1374 +1369 +1377 +1378 +1381 +1383 +1378 +1385 +1386 +1389 +1386 +1365 +1358 +1352 +1353 +1360 +1362 +1361 +1352 +1353 +1361 +1360 +1366 +1359 +1349 +1359 +1348 +1374 +1376 +1374 +1359 +1369 +1368 +1374 +1356 +1358 +1359 +1351 +1338 +1339 +1340 +1323 +1343 +1352 +1345 +1340 +1337 +1338 +1364 +1362 +1358 +1355 +1352 +1356 +1374 +1376 +1372 +1370 +1386 +1384 +1378 +1381 +1382 +1385 +1387 +1386 +1376 +1378 +1376 +1372 +1368 +1363 +1362 +1364 +1365 +1369 +1368 +1364 +1349 +1374 +1375 +1376 +1388 +1364 +1363 +1371 +1370 +1372 +1375 +1364 +1366 +1355 +1356 +1370 +1371 +1353 +1356 +1358 +1356 +1351 +1364 +1373 +1368 +1369 +1371 +1372 +1376 +1362 +1349 +1344 +1336 +1335 +1334 +1333 +1337 +1336 +1338 +1344 +1345 +1344 +1331 +1332 +1331 +1328 +1330 +1329 +1334 +1333 +1332 +1328 +1330 +1329 +1340 +1341 +1338 +1339 +1344 +1356 +1359 +1360 +1380 +1389 +1362 +1359 +1350 +1368 +1372 +1377 +1386 +1383 +1388 +1389 +1401 +1399 +1404 +1394 +1390 +1391 +1390 +1392 +1408 +1398 +1388 +1352 +1349 +1327 +1333 +1327 +1303 +1295 +1297 +1296 +1298 +1306 +1305 +1312 +1323 +1327 +1325 +1327 +1328 +1317 +1321 +1320 +1319 +1301 +1308 +1327 +1328 +1326 +1318 +1323 +1326 +1330 +1344 +1347 +1352 +1355 +1354 +1364 +1365 +1350 +1326 +1345 +1350 +1351 +1367 +1362 +1370 +1372 +1399 +1415 +1406 +1405 +1407 +1414 +1405 +1406 +1410 +1400 +1395 +1396 +1389 +1382 +1387 +1394 +1392 +1391 +1377 +1374 +1373 +1361 +1376 +1381 +1380 +1365 +1374 +1356 +1354 +1353 +1339 +1347 +1348 +1347 +1348 +1330 +1332 +1317 +1322 +1321 +1327 +1326 +1335 +1340 +1341 +1331 +1328 +1315 +1313 +1321 +1333 +1339 +1334 +1340 +1339 +1333 +1332 +1335 +1345 +1346 +1348 +1344 +1347 +1356 +1355 +1356 +1357 +1358 +1353 +1354 +1355 +1354 +1364 +1366 +1364 +1359 +1362 +1367 +1349 +1353 +1350 +1327 +1340 +1370 +1369 +1364 +1360 +1357 +1356 +1349 +1343 +1345 +1348 +1352 +1351 +1369 +1349 +1358 +1361 +1359 +1367 +1368 +1370 +1382 +1383 +1386 +1388 +1375 +1373 +1372 +1373 +1390 +1392 +1391 +1387 +1371 +1357 +1351 +1361 +1362 +1365 +1367 +1382 +1383 +1382 +1379 +1375 +1373 +1378 +1376 +1374 +1376 +1368 +1375 +1376 +1386 +1387 +1388 +1396 +1414 +1423 +1433 +1434 +1421 +1419 +1417 +1433 +1435 +1415 +1432 +1453 +1454 +1452 +1451 +1459 +1462 +1466 +1494 +1483 +1480 +1476 +1472 +1468 +1469 +1466 +1443 +1448 +1457 +1458 +1452 +1449 +1442 +1444 +1446 +1445 +1441 +1443 +1448 +1449 +1450 +1458 +1454 +1457 +1458 +1460 +1458 +1463 +1469 +1468 +1459 +1437 +1450 +1447 +1472 +1471 +1480 +1481 +1473 +1480 +1476 +1477 +1464 +1472 +1481 +1485 +1489 +1487 +1488 +1491 +1470 +1477 +1486 +1492 +1493 +1494 +1495 +1485 +1493 +1497 +1492 +1499 +1501 +1502 +1514 +1515 +1517 +1518 +1516 +1514 +1517 +1519 +1517 +1518 +1516 +1496 +1519 +1522 +1524 +1528 +1529 +1531 +1524 +1526 +1528 +1546 +1538 +1561 +1570 +1569 +1574 +1572 +1571 +1572 +1564 +1571 +1576 +1575 +1576 +1575 +1580 +1579 +1564 +1561 +1566 +1555 +1546 +1565 +1567 +1562 +1563 +1537 +1538 +1524 +1532 +1533 +1567 +1573 +1574 +1569 +1571 +1570 +1571 +1576 +1571 +1556 +1554 +1547 +1551 +1538 +1540 +1518 +1521 +1522 +1532 +1551 +1555 +1557 +1580 +1582 +1583 +1582 +1579 +1580 +1581 +1595 +1596 +1599 +1595 +1609 +1622 +1635 +1636 +1662 +1666 +1667 +1670 +1666 +1669 +1673 +1672 +1671 +1661 +1662 +1683 +1685 +1682 +1684 +1692 +1693 +1692 +1696 +1669 +1681 +1682 +1686 +1702 +1704 +1706 +1707 +1711 +1714 +1720 +1711 +1708 +1710 +1709 +1713 +1720 +1721 +1722 +1723 +1706 +1709 +1710 +1726 +1739 +1738 +1740 +1747 +1732 +1715 +1712 +1706 +1708 +1695 +1691 +1693 +1691 +1696 +1692 +1699 +1696 +1699 +1683 +1672 +1674 +1692 +1731 +1730 +1705 +1697 +1713 +1715 +1722 +1721 +1707 +1708 +1717 +1713 +1714 +1712 +1703 +1701 +1707 +1703 +1705 +1699 +1734 +1729 +1741 +1739 +1754 +1743 +1746 +1744 +1745 +1751 +1779 +1774 +1775 +1773 +1776 +1783 +1782 +1780 +1778 +1776 +1771 +1780 +1748 +1743 +1740 +1739 +1740 +1731 +1732 +1733 +1730 +1742 +1744 +1743 +1751 +1750 +1751 +1738 +1746 +1750 +1753 +1742 +1744 +1743 +1735 +1734 +1731 +1740 +1725 +1727 +1709 +1716 +1717 +1718 +1712 +1713 +1708 +1707 +1723 +1725 +1726 +1744 +1745 +1752 +1753 +1740 +1739 +1736 +1733 +1741 +1751 +1758 +1769 +1760 +1777 +1786 +1787 +1791 +1792 +1819 +1825 +1829 +1828 +1810 +1812 +1811 +1813 +1818 +1820 +1819 +1832 +1847 +1846 +1845 +1846 +1856 +1851 +1853 +1851 +1860 +1849 +1854 +1879 +1864 +1851 +1852 +1851 +1872 +1879 +1883 +1876 +1883 +1884 +1888 +1887 +1877 +1900 +1903 +1912 +1913 +1899 +1915 +1919 +1916 +1917 +1918 +1932 +1929 +1932 +1951 +1962 +1977 +1972 +1951 +1943 +1942 +1947 +1951 +1974 +1977 +1979 +1975 +1932 +1917 +1919 +1927 +1932 +1929 +1927 +1929 +1928 +1922 +1923 +1929 +1938 +1923 +1910 +1921 +1922 +1920 +1903 +1905 +1895 +1894 +1923 +1924 +1921 +1924 +1926 +1924 +1951 +1968 +1974 +1976 +1995 +2006 +1991 +1990 +1989 +1981 +1971 +1959 +1951 +1955 +1953 +1964 +1963 +1939 +1946 +1943 +1941 +1938 +1927 +1926 +1925 +1957 +1937 +1939 +1942 +1939 +1952 +1961 +1976 +1977 +1989 +1991 +1965 +1966 +1955 +1934 +1935 +1929 +1944 +1945 +1935 +1942 +1970 +1969 +1942 +1941 +1966 +1965 +1934 +1935 +1953 +1942 +1943 +1947 +1964 +1961 +1963 +1969 diff --git a/day_2/code.py b/day_2/code.py new file mode 100644 index 0000000..4fbf3b6 --- /dev/null +++ b/day_2/code.py @@ -0,0 +1,23 @@ +import fileinput + +data = [] +for inp in fileinput.input(): + val = inp.strip() + if val != '': + cmd, v = val.split() + data.append((cmd, int(v))) + +horizontal = 0 +aim = 0 +depth = 0 +for cmd, val in data: + if cmd == 'forward': + horizontal+=val + depth+=aim*val + if cmd == 'down': + aim+=val + if cmd == 'up': + aim-=val +print(horizontal, depth) + +print(horizontal* depth) diff --git a/day_2/input1.txt b/day_2/input1.txt new file mode 100644 index 0000000..b7172ac --- /dev/null +++ b/day_2/input1.txt @@ -0,0 +1,6 @@ +forward 5 +down 5 +forward 8 +up 3 +down 8 +forward 2 diff --git a/day_2/input2.txt b/day_2/input2.txt new file mode 100644 index 0000000..3048eb8 --- /dev/null +++ b/day_2/input2.txt @@ -0,0 +1,1001 @@ +forward 2 +down 2 +forward 6 +forward 8 +down 8 +up 2 +forward 7 +forward 8 +down 1 +down 8 +forward 9 +down 1 +down 9 +up 9 +forward 8 +down 4 +forward 1 +forward 4 +up 3 +down 1 +up 4 +up 7 +down 8 +forward 8 +forward 9 +down 7 +forward 2 +up 2 +forward 3 +forward 2 +down 8 +up 3 +up 3 +forward 6 +down 5 +up 6 +down 3 +forward 4 +forward 2 +down 9 +down 9 +down 1 +down 3 +forward 7 +forward 4 +down 1 +down 3 +up 3 +up 9 +up 2 +down 6 +down 7 +forward 9 +down 7 +forward 3 +forward 5 +up 6 +up 4 +down 8 +down 6 +down 4 +up 2 +up 7 +up 8 +up 1 +forward 7 +up 9 +down 6 +up 7 +up 3 +forward 8 +up 9 +down 9 +up 2 +forward 8 +forward 4 +up 3 +forward 4 +up 2 +down 3 +up 7 +down 7 +forward 6 +forward 5 +forward 2 +forward 3 +up 2 +down 3 +up 6 +forward 2 +forward 4 +up 2 +down 6 +up 3 +down 8 +forward 7 +forward 8 +forward 3 +down 6 +forward 5 +forward 8 +down 6 +forward 4 +down 3 +up 2 +down 6 +down 5 +forward 8 +forward 8 +up 1 +down 9 +down 6 +forward 8 +up 1 +down 7 +forward 7 +up 4 +up 6 +down 3 +down 1 +up 9 +forward 8 +forward 1 +forward 2 +forward 2 +up 9 +up 4 +down 8 +up 9 +down 8 +forward 1 +forward 6 +up 3 +down 4 +forward 1 +down 5 +down 7 +down 9 +forward 1 +forward 1 +forward 5 +up 2 +up 4 +down 8 +forward 3 +forward 1 +forward 4 +down 6 +up 4 +up 4 +down 6 +up 9 +down 2 +up 6 +forward 5 +forward 5 +forward 1 +down 2 +up 1 +forward 6 +up 7 +forward 4 +up 3 +forward 3 +forward 8 +up 5 +forward 4 +up 3 +forward 9 +down 4 +down 8 +down 8 +forward 8 +forward 4 +down 5 +up 8 +down 4 +up 9 +forward 5 +up 3 +forward 8 +forward 3 +forward 7 +forward 5 +forward 3 +down 4 +down 3 +forward 9 +down 9 +forward 3 +down 7 +forward 8 +down 3 +forward 7 +forward 5 +up 6 +up 1 +forward 3 +down 3 +up 3 +down 1 +forward 8 +forward 5 +forward 1 +forward 6 +forward 9 +up 5 +down 5 +down 9 +forward 2 +down 5 +down 4 +up 9 +forward 9 +forward 7 +down 8 +up 3 +down 7 +down 1 +down 2 +down 4 +forward 2 +forward 7 +forward 3 +down 5 +down 3 +up 3 +down 4 +down 1 +forward 9 +down 1 +forward 4 +forward 6 +forward 7 +down 8 +up 4 +up 3 +down 4 +forward 5 +down 9 +down 1 +down 9 +up 9 +forward 6 +forward 7 +down 2 +up 1 +forward 8 +up 3 +forward 9 +forward 1 +up 9 +down 4 +forward 8 +forward 4 +forward 3 +forward 7 +forward 1 +forward 5 +forward 5 +forward 7 +down 8 +forward 1 +up 8 +forward 7 +up 8 +forward 2 +forward 7 +forward 3 +down 2 +forward 2 +forward 6 +down 7 +down 1 +up 2 +down 7 +up 3 +down 8 +down 4 +forward 2 +down 6 +forward 4 +down 8 +down 9 +forward 2 +down 2 +down 1 +forward 7 +up 2 +down 2 +forward 8 +forward 3 +down 9 +down 4 +down 5 +forward 6 +forward 2 +down 7 +up 7 +forward 1 +down 7 +down 3 +up 5 +down 8 +down 2 +down 2 +up 1 +forward 6 +up 2 +down 3 +up 1 +down 9 +forward 5 +forward 5 +up 5 +down 1 +down 7 +down 2 +forward 5 +down 6 +up 6 +forward 3 +down 1 +up 3 +forward 3 +down 7 +forward 5 +down 8 +down 5 +down 7 +down 7 +down 2 +forward 8 +down 7 +down 2 +up 7 +down 6 +down 8 +up 7 +forward 5 +up 8 +down 1 +forward 5 +down 2 +forward 3 +down 9 +down 7 +forward 3 +up 9 +up 7 +down 5 +down 3 +forward 3 +down 7 +forward 6 +forward 2 +up 9 +down 6 +up 4 +down 3 +up 3 +up 6 +up 1 +down 1 +down 7 +forward 7 +down 1 +up 1 +forward 6 +down 2 +up 6 +forward 4 +down 9 +forward 1 +forward 3 +down 1 +forward 9 +forward 1 +forward 5 +down 1 +down 8 +down 7 +down 7 +down 3 +up 1 +down 6 +down 2 +forward 3 +forward 8 +down 6 +down 8 +down 1 +down 6 +forward 5 +down 2 +down 6 +forward 7 +down 6 +forward 2 +forward 3 +down 8 +forward 4 +down 5 +down 1 +up 7 +forward 3 +forward 1 +forward 9 +forward 5 +down 2 +forward 6 +down 1 +up 3 +forward 6 +forward 5 +down 3 +down 6 +forward 2 +forward 3 +down 9 +up 4 +up 9 +up 1 +forward 6 +down 6 +forward 9 +forward 9 +down 6 +forward 4 +down 6 +forward 6 +forward 2 +forward 8 +forward 2 +down 2 +forward 6 +forward 4 +forward 2 +up 1 +down 2 +forward 7 +forward 2 +down 9 +forward 2 +forward 1 +down 8 +forward 4 +forward 7 +up 3 +down 2 +forward 4 +up 6 +down 1 +forward 6 +forward 3 +down 3 +down 3 +forward 7 +forward 9 +forward 5 +forward 9 +down 3 +down 3 +up 7 +down 2 +forward 1 +forward 3 +up 1 +forward 6 +down 6 +down 4 +down 2 +down 3 +down 1 +up 6 +forward 5 +down 6 +forward 2 +down 7 +forward 4 +down 2 +down 7 +down 6 +forward 3 +forward 1 +forward 6 +down 3 +forward 3 +up 1 +forward 5 +down 2 +up 1 +down 2 +up 5 +down 2 +up 3 +down 7 +up 6 +down 9 +forward 1 +forward 3 +down 9 +up 9 +down 4 +down 1 +forward 7 +forward 6 +up 1 +forward 5 +down 4 +up 4 +forward 7 +forward 6 +down 9 +up 9 +up 6 +up 6 +forward 6 +up 4 +forward 7 +down 4 +up 1 +forward 3 +down 5 +down 5 +up 2 +down 6 +forward 2 +up 2 +forward 1 +up 7 +up 8 +up 7 +down 3 +forward 5 +forward 9 +up 9 +down 7 +forward 5 +up 8 +down 9 +forward 6 +forward 1 +forward 3 +down 5 +up 4 +up 8 +down 5 +forward 5 +up 9 +down 7 +up 3 +forward 4 +down 1 +forward 1 +down 4 +forward 8 +up 8 +forward 4 +forward 5 +forward 6 +forward 2 +forward 5 +forward 6 +up 9 +down 3 +up 6 +down 3 +down 1 +down 2 +down 7 +down 9 +up 8 +down 5 +forward 4 +down 9 +forward 8 +forward 9 +down 3 +forward 4 +up 6 +forward 4 +forward 4 +down 6 +up 4 +down 4 +forward 9 +down 5 +down 7 +forward 9 +forward 4 +down 7 +down 2 +down 5 +down 4 +forward 5 +down 5 +forward 8 +forward 9 +forward 2 +down 8 +forward 9 +down 2 +forward 3 +up 6 +up 5 +down 9 +down 1 +up 7 +forward 9 +forward 9 +forward 2 +down 5 +up 5 +down 1 +forward 8 +forward 7 +down 7 +down 8 +down 1 +forward 5 +down 3 +forward 4 +down 1 +down 5 +forward 9 +up 1 +down 4 +down 7 +forward 8 +up 9 +up 6 +forward 4 +up 1 +forward 9 +down 6 +up 7 +down 8 +up 2 +forward 9 +up 6 +down 1 +up 7 +down 5 +down 3 +forward 2 +down 7 +forward 5 +forward 4 +down 4 +up 7 +down 5 +up 4 +forward 9 +forward 6 +forward 4 +down 8 +forward 1 +down 2 +forward 2 +down 3 +up 6 +forward 4 +down 5 +up 8 +forward 6 +forward 4 +up 4 +forward 5 +forward 3 +down 8 +forward 9 +forward 1 +forward 7 +down 8 +up 5 +forward 6 +down 4 +forward 3 +forward 7 +forward 2 +down 1 +up 5 +up 4 +down 8 +forward 3 +forward 8 +down 8 +forward 3 +up 9 +forward 9 +forward 2 +forward 7 +down 9 +up 5 +forward 7 +down 4 +up 4 +up 6 +down 2 +up 9 +up 7 +forward 4 +down 5 +up 4 +forward 3 +down 4 +down 7 +down 7 +up 7 +down 9 +down 9 +forward 7 +up 2 +forward 4 +forward 4 +forward 8 +forward 2 +down 1 +up 8 +down 9 +forward 1 +forward 4 +down 5 +down 3 +forward 3 +forward 1 +up 4 +down 6 +forward 2 +down 5 +down 1 +down 2 +forward 2 +down 3 +forward 6 +down 6 +down 3 +forward 9 +up 6 +up 9 +down 9 +up 5 +down 1 +down 1 +down 6 +forward 6 +forward 5 +forward 5 +forward 6 +down 8 +up 4 +down 3 +down 8 +down 9 +down 4 +down 7 +forward 2 +up 5 +forward 2 +forward 2 +forward 4 +down 4 +down 3 +forward 6 +forward 9 +down 9 +forward 4 +down 9 +down 2 +forward 1 +down 2 +up 3 +forward 2 +down 9 +up 5 +down 9 +forward 9 +forward 8 +down 1 +down 6 +up 2 +up 9 +forward 7 +up 1 +down 1 +down 3 +up 5 +down 2 +up 5 +down 7 +up 7 +up 8 +forward 2 +forward 3 +down 4 +forward 6 +up 3 +forward 7 +forward 7 +forward 7 +forward 7 +forward 8 +forward 4 +up 1 +forward 6 +forward 9 +forward 2 +down 3 +up 8 +down 9 +down 3 +down 8 +up 9 +down 6 +up 6 +up 9 +forward 9 +down 9 +forward 6 +forward 1 +down 3 +up 2 +forward 1 +up 2 +up 1 +forward 2 +down 1 +up 4 +forward 9 +down 5 +up 9 +down 4 +forward 4 +forward 1 +down 8 +forward 8 +down 5 +forward 5 +forward 7 +forward 6 +forward 7 +down 7 +down 3 +forward 9 +forward 6 +down 7 +forward 3 +forward 2 +down 1 +forward 2 +forward 5 +up 7 +up 7 +forward 2 +up 1 +forward 2 +up 2 +up 2 +up 6 +forward 4 +down 2 +up 3 +down 4 +down 7 +down 6 +forward 6 +forward 5 +forward 8 +forward 9 +up 1 +down 9 +up 6 +down 1 +up 1 +down 5 +forward 2 +forward 9 +forward 9 +up 4 +up 2 +forward 8 +up 4 +down 3 +down 8 +forward 2 +down 3 +down 8 +forward 2 +down 6 +down 8 +down 1 +up 4 +down 1 +forward 2 +up 7 +up 8 +down 8 +down 8 +forward 8 +down 1 +down 2 +down 1 +forward 9 +forward 5 +forward 8 +forward 7 +down 9 +down 2 +down 8 +forward 9 +down 3 +forward 4 +forward 1 +down 4 +forward 9 +up 6 +forward 6 +forward 7 +forward 7 +forward 6 +forward 8 +down 4 +forward 7 +down 8 +up 1 +forward 2 +down 1 +up 7 +forward 6 +up 9 +down 4 +up 4 +forward 1 +down 7 +down 2 +forward 4 +forward 4 +down 4 +down 2 +forward 5 +forward 9 +down 4 +down 5 +down 6 +up 9 +down 2 +up 4 +forward 7 +forward 5 +forward 1 +forward 9 +down 7 +up 4 +up 7 +forward 5 +up 8 +forward 2 +down 3 +up 1 +down 4 +forward 4 +forward 3 +forward 9 +forward 9 +down 9 +down 9 +up 7 +forward 4 +forward 9 +down 5 +down 5 +up 7 +up 4 +forward 9 +up 5 +down 2 +forward 5 +down 1 +forward 2 +down 6 +down 9 +forward 2 +up 4 +forward 6 +forward 6 +down 1 +up 8 +forward 5 +forward 9 +forward 6 +forward 4 +forward 9 +forward 2 +forward 5 +down 6 +up 4 +forward 2 +up 1 +forward 5 + diff --git a/day_3/code.py b/day_3/code.py new file mode 100644 index 0000000..b31e651 --- /dev/null +++ b/day_3/code.py @@ -0,0 +1,89 @@ +import fileinput + +data = [] +for inp in fileinput.input(): + val = inp.strip() + if val != '': + data.append(val) + +commons = [] +epsilon = [] +gamma = [] +charLen = len(data[0]) +lineLen = len(data) +for i in range(charLen): + count = 0 + for j in range(lineLen): + if data[j][i] == '1': + count += 1 + + status = 'lt' + #print(count, lineLen-count) + if count == (lineLen-count): status = 'eq' + if count > (lineLen-count): status = 'gt' + + if status == 'gt': + most,least = '1', '0' + else: + most,least = '0', '1' + + gamma.append(most) + epsilon.append(least) + commons.append((status, most, least)) + +g = int(''.join(gamma), 2) +e = int(''.join(epsilon), 2) + + +def get_distribution(nbs): + out = [] + for _i in range(len(nbs[0])): + count = 0 + for _j in range(len(nbs)): + if nbs[_j][_i] == '1': count += 1 + status = 'lt' + if count == (len(nbs)-count): status = 'eq' + if count > (len(nbs)-count): status = 'gt' + most,least = ('1', '0') if status == 'gt' else ('0', '1') + out.append((status, most, least)) + + return out + +def filter_item(mode, status, most, least, x, i, full): + print(f'{mode=}, {status=}, {most=}, {least=}, {x=}, {i=}, {full=}') + if mode: + if status == 'eq': + return x == '1' # oxygen + if x == most: return True + + if not mode: # co2 + if status == 'eq': + return x == '0' + if x == least: return True + + return False + +def rating(inp, mode = True): + nb = inp.copy() + i = 0 + while len(nb) > 1: + distri = get_distribution(nb) + print(f'= {len(nb)} -> {nb} {distri=}') + status, most, least = distri[i] + nb = list(filter(lambda x: filter_item(mode, status, most, least, x[i], i, x), nb)) + i += 1 + print(f'after filter: {nb}') + return int(nb[0], 2) + +print(g, e) +print(g*e) + +print(commons) +o = rating(data, True) +c = rating(data, False) +print('==') +print(o) # oxygen +print(c) # CO2 +print(o*c) + + diff --git a/day_3/input1.txt b/day_3/input1.txt new file mode 100644 index 0000000..665fd57 --- /dev/null +++ b/day_3/input1.txt @@ -0,0 +1,12 @@ +00100 +11110 +10110 +10111 +10101 +01111 +00111 +11100 +10000 +11001 +00010 +01010 \ No newline at end of file diff --git a/day_3/input2.txt b/day_3/input2.txt new file mode 100644 index 0000000..ae7cba8 --- /dev/null +++ b/day_3/input2.txt @@ -0,0 +1,1000 @@ +101010000100 +100001010100 +111100000101 +010000000010 +001101100010 +100110110101 +110100101101 +101010000001 +110011110000 +110000011011 +010111010100 +000101101001 +110001101100 +110100111101 +000101101100 +011111101000 +001011101100 +001011000110 +000011110110 +101110010111 +010011101001 +011111100101 +000001110101 +100001010010 +001110010101 +111010000110 +100111001111 +110010000101 +001111100001 +000110010101 +111001111011 +110000111111 +011101110001 +111001000011 +100110101011 +101101100010 +110100100101 +101011111000 +001101110011 +011000010011 +101010011111 +101011000110 +011111101001 +000011100000 +101111000101 +010000010111 +010110111000 +101110111100 +000001010011 +011011000001 +110101101011 +011110101100 +010001011100 +110111000011 +010101101001 +110011011111 +111101111101 +110011010111 +100100100110 +011100101111 +100111010000 +110000110111 +111000010111 +100001010001 +101010001111 +010101100111 +001010101111 +000001011011 +111100011110 +101110100010 +011111011110 +111110111011 +001110110111 +010011010000 +111011011101 +101110110100 +111010011111 +011011011101 +110001110100 +000010011010 +011101010101 +100000001000 +000100100001 +011110000000 +111100101010 +001100100010 +101001101110 +111010001110 +101011111101 +010011100101 +110111110101 +111000111010 +010000000111 +001101111111 +101101001100 +111001000100 +001100000000 +011011100100 +010011110000 +000001111110 +110011001010 +001001000110 +011011001101 +001111111111 +001010101010 +011110110100 +110101111111 +001111011101 +001101001111 +000000111100 +001101101010 +011000001001 +100100101101 +000000111011 +011101110011 +101011110010 +010110000010 +000101000000 +010100111011 +000111010011 +111011111000 +011110010000 +000011101001 +101001110000 +011101111101 +100010010100 +011100001011 +110011011000 +100010001110 +100101010111 +100101101110 +010010000011 +101011000111 +100100100111 +001000001000 +110010100011 +111100001011 +011010001000 +000011010000 +000111111011 +110100101110 +011110000011 +100101000011 +001100100001 +000010100011 +111101111011 +001010101101 +101110110010 +101011011010 +111010101011 +001110010001 +111110101011 +111111001011 +011100011101 +111100111001 +101011000000 +100000010111 +000101111101 +001011001110 +111101101010 +110001000000 +101111110100 +010111010110 +111011100001 +111100010100 +000100011100 +000011011011 +010000001001 +100100011001 +001010011110 +110001110011 +100010000110 +001110001101 +111001111111 +100100000011 +001001101011 +100101010011 +010111100010 +001110101100 +000110111111 +010011101101 +011101011011 +101000111100 +101100001011 +000011100011 +111110110011 +100011001101 +000100100011 +110011111010 +011001100111 +000011100110 +011001001110 +000111011110 +010101111101 +101100101011 +111110101111 +101101011010 +000101110111 +101011010010 +101100101010 +111101100100 +011100101000 +100111100010 +000110110011 +000000100001 +011110001110 +000111110010 +001100011001 +000001111001 +001111011111 +110011001111 +101010110101 +011010110100 +100010110011 +111111111101 +010001110011 +001101110000 +001110100011 +110010101011 +001010001000 +101010010000 +000101011111 +111000111101 +011101010110 +100111010011 +010010010000 +111000101101 +110000110010 +010110010001 +011101001110 +001010011111 +110011010001 +100000100001 +110110001100 +111110101101 +101110011011 +100101011011 +001010011010 +111101000110 +100010011000 +001101101001 +010001010100 +011100110010 +011010100110 +101111011110 +100011010111 +000011111110 +000110101011 +000011111000 +101110101100 +101100011110 +011010101011 +010001110111 +101010100001 +011011011001 +110011101011 +110001011111 +000010101100 +100000011101 +010000101000 +001111101100 +111100011100 +101110101101 +110111110100 +010101000001 +011110000001 +111100010101 +011110010001 +001101001100 +001011011100 +010110101111 +000100101011 +001100001010 +000101101111 +010111110110 +100010111011 +000110001011 +010111010011 +101001000101 +011000111101 +001001101001 +010100010000 +111111001000 +011110100011 +011000101100 +111101110100 +101010010110 +111101010111 +011001100100 +001110001110 +111110110000 +110100011111 +000101101110 +011000110011 +111001111110 +011110101110 +010011001101 +000011011111 +111001010111 +000000111101 +100101100100 +100001110101 +111100100101 +001110000110 +011100001101 +100100110011 +001100000100 +010011001110 +111111110011 +101110111111 +100111011000 +111110101110 +100010101100 +010101010000 +011101100001 +010010011101 +001111010111 +011100010101 +111101110101 +010100001110 +011000111000 +100110100101 +110101001111 +000011011010 +110101011010 +110010111100 +110111000101 +100111000100 +110101011111 +110110011101 +010111101010 +111001010011 +001001100100 +001101101101 +011100001100 +000110010011 +010101010110 +000011001101 +101001001100 +111011100011 +011011110100 +001110100001 +001000101001 +001100010111 +110000001101 +100010111101 +000110111101 +111001101101 +101110100000 +101001100101 +101100011001 +111010101101 +010101011100 +111100011000 +101111110101 +110111110011 +000000101100 +010110101011 +100111011011 +010111011000 +000101110100 +001010110101 +000010111011 +001110000001 +010000010000 +101110010101 +000000111110 +110100011000 +110110111100 +100010110100 +001000101110 +011001010101 +000100010001 +100011100010 +100011100000 +100010101001 +100101111000 +110000011110 +011000011101 +101101101101 +100110010110 +111110001000 +111001011010 +001110110001 +100000010101 +111101001111 +000010010100 +101100110001 +100101011000 +010101001010 +000111100000 +100010101000 +011101110100 +110110001110 +010001000110 +100101001100 +110000010111 +011000101111 +001111001000 +001110010010 +000010101101 +011000010000 +011011101010 +001010000101 +001010110010 +100001100000 +110111010000 +100010001101 +010011001011 +110011001110 +110111000110 +000001110010 +110010001001 +111100100100 +000101110110 +000100011001 +111111010101 +011010100000 +110111000100 +011101011010 +100011111110 +100001001101 +100111000001 +100001011111 +010010000010 +010111101011 +000001111100 +001100110111 +100111011100 +101000101100 +100111111111 +101101000110 +101111001111 +011010110101 +111000110000 +100010101101 +011110100100 +001101110101 +011101011000 +010101011000 +010110110011 +110101011110 +111010101100 +110111000000 +101011110110 +100111101010 +110001111110 +001000111001 +110001111011 +011010000100 +000101001010 +010111000001 +100000101000 +011010111001 +010011101110 +011011010101 +010110101100 +000010100110 +011111101011 +101111100110 +110010001100 +100000110100 +100111100011 +110111101010 +110010010000 +000011010010 +111000000111 +100101100101 +100011101110 +111110110110 +111001011000 +010100111101 +111110001100 +000110011101 +000010110010 +101000111011 +101000010100 +001001110001 +111010101111 +100011000101 +111011001100 +000000011100 +101010111001 +110111101000 +011000110001 +100100110010 +011101011101 +001011111111 +101011100110 +101011010111 +100001011010 +100100010100 +000010000010 +101101010111 +001011001101 +101100111010 +110101000001 +101101110100 +100100110111 +110001101001 +010101010001 +110110001111 +000011011101 +111111110001 +011110110101 +111100110101 +011111011011 +101001111110 +110101101010 +111001000001 +010100110001 +111011100101 +101011101101 +010010010001 +111110001001 +100100111000 +111110111100 +001000000000 +111110111101 +110010101101 +100110111110 +001010100010 +101011001001 +111101010100 +110011100000 +100111000111 +000011000110 +101010100000 +101011011000 +000010110110 +111100000011 +000000010010 +101010110111 +001111111000 +100011110101 +001001000010 +111011101110 +001111011100 +111011101010 +011011000101 +000001000010 +001000100100 +001110110011 +010101011011 +100011011010 +111000001110 +110010000000 +100101100010 +100111110011 +010011100001 +010001111010 +110101010101 +101111000001 +001001011100 +011110000110 +111001011110 +111001111010 +110100010011 +001000010010 +111110000010 +001000011001 +010100011101 +101111101011 +010111001111 +111011011010 +111101111010 +001111001111 +111110100000 +100000011000 +110100111100 +001011101000 +010011011001 +010000010011 +100010011010 +110001111111 +011010111011 +101001111100 +111110111000 +110000001100 +010000100101 +110101100111 +110011100010 +110001001101 +011101111011 +011010101101 +011000011111 +101011101001 +010100000010 +110100100010 +101010101101 +010000111101 +110100110110 +101100001100 +001011100011 +011110011001 +000000001010 +000010111001 +001000001010 +100101001010 +010000000011 +101011101100 +011101010111 +100100101001 +110100100100 +110101001101 +010100010111 +011001001100 +101100111001 +100001001011 +101100011111 +001111101101 +010011110101 +011100010011 +000010011101 +011110001101 +010001010011 +001001111001 +100111110100 +111011000111 +101010110000 +010010111011 +100010110111 +110011111110 +101111000111 +111011000000 +110001110001 +001100100011 +001011100111 +101001110010 +111001001101 +000010000011 +001011010010 +110111101110 +001000010110 +000111000111 +010001101010 +011001110101 +011000110000 +000111100100 +101010111101 +010010010010 +101111001001 +001100100111 +100111111000 +100000010011 +101101111001 +000110011110 +100001111101 +110000100001 +101110110110 +111010000010 +101010001010 +000001010000 +101011110100 +001101010110 +100011010011 +101011101110 +011101101101 +100101010110 +101011100111 +100010010000 +000101011101 +011000001000 +111011111110 +101001101111 +101000111001 +100010100111 +011111000101 +100010001111 +110011011101 +111101100111 +111101100000 +010111000100 +111010010010 +001011100100 +001000110100 +100110010111 +111010011100 +100101001101 +101001110110 +011001110010 +000111010110 +010000011101 +101100100001 +101001001000 +000111100011 +100110110000 +110011001001 +001011001001 +110101011100 +010001100101 +000000101010 +001001100001 +101001100011 +110001110101 +111001010010 +111011011000 +101101011000 +101001000010 +010110101110 +001000101101 +111001100111 +011110110000 +100100101100 +010100011111 +111000000000 +001000010111 +000000111010 +111011111001 +000110100011 +011110100110 +011011101100 +000000001101 +100101111011 +101110111001 +100111001110 +101110000101 +001110001111 +001000110010 +111101000011 +000100011011 +010111010101 +001100100000 +100101101011 +010111000011 +010101111010 +011000000111 +011011000110 +101001011100 +101101100000 +101110101001 +111000111110 +110010000010 +110111111001 +100100111011 +111011010011 +100001101000 +111110001110 +110100011010 +010101000111 +000110100111 +001111000101 +000111000011 +110001001001 +011000100010 +101001111011 +110001000101 +110111010011 +011100011011 +011011001011 +100101011111 +000000101000 +100001100110 +000100110101 +110100100000 +000101000001 +101111001100 +111101011100 +010001110110 +000001001100 +100100001110 +000100100111 +001101000001 +100011100110 +110110110010 +110001011001 +110001001000 +001011100010 +111011001011 +100101111110 +001001111011 +110101111010 +101100111100 +101111101000 +111110100101 +011110111101 +010110111101 +111010100010 +111100001100 +000001000111 +111011000100 +101000111000 +011101100100 +011000100000 +110001111101 +111010100011 +110010001010 +000101001111 +010110001001 +101101101010 +101100110010 +010010000111 +111110100010 +011011000011 +111111011011 +001011001000 +010001011101 +101101110010 +010001001101 +101000110101 +100100010011 +101010010001 +101010110011 +101110011110 +001010000110 +000011000000 +101111011000 +100001010110 +010111101101 +001110011011 +100100011110 +100001011001 +010100111111 +011101000110 +111010111011 +000010100100 +010011100111 +110001000011 +000100111010 +100111001000 +010110011000 +101101110101 +110101001011 +000101101010 +011110101111 +110111100111 +111100111011 +001000101011 +000010000101 +110101101101 +010000100111 +100110001011 +011001000110 +111101001000 +000010011000 +110101100001 +100100101111 +110111001010 +111011111011 +010111001000 +011011110011 +111011110010 +100011000111 +011001100011 +001111000000 +101001101010 +111111011101 +000100110001 +111010010000 +011111100000 +101110100101 +100011011110 +001000010001 +110110100000 +100011111011 +100011000001 +000011010100 +110101110110 +001100010010 +111011011001 +010101101111 +110111100100 +101000110100 +110001010100 +100010010111 +000111110111 +101101101100 +110100110001 +011011100000 +010011000000 +110101101000 +100011110001 +001011111101 +011000110110 +011101101010 +000011111100 +010110110111 +111101111001 +110111011101 +010001011000 +100110000101 +011101100101 +111101011000 +011110001000 +001011001100 +110110011111 +010111011100 +001111001110 +110010110110 +111011110110 +100000101100 +111100101011 +000100011110 +010111110000 +110011010101 +110000111110 +011100100011 +000101011000 +101110011100 +010111111000 +110010111101 +000001011010 +100010101011 +110001011100 +100100001100 +010101101010 +001101011110 +011011101111 +011100110011 +100011110000 +011110011111 +001011011101 +011010110010 +101000110111 +001001100111 +010111101111 +110110010001 +110001100000 +011001100101 +000110110111 +010010001100 +101100001010 +101010011110 +001010010110 +101001001001 +100110000010 +011101101111 +011010011001 +010111000010 +101001111111 +000010001001 +101000100011 +001110100100 +011011010000 +100111110101 +100110100000 +000101011001 +001100010110 +110011110010 +011000100001 +001100010101 +110010001101 +100011101001 +001100011110 +110101111101 +111111101000 +000011110001 +010000010100 +001101011001 +100111000000 +011100000101 +110110000000 +110011011001 +001100010011 +110011110110 +010010011111 +100001101001 +011100111100 +001011110001 +001010010011 +010000000101 +000100010011 +111101011001 +111100110110 +111000011100 +111101101110 +000101111011 +010101110101 +011110111111 +100000000011 +111000000011 +000010100000 +001110100010 +011001000010 +100001011110 +010100100111 +000111110011 +110100110101 +011001111100 +111101110110 +001101010101 +110110000010 +010101001101 +110100110000 +000100010101 +111011101001 +110111111111 +000000110010 +100111110110 +001000011111 +100100000101 +011001110110 +010010100110 +000101010111 +101001100000 +110011101110 +010001100001 +011100000100 +010100100000 +100000100100 diff --git a/day_3/main b/day_3/main new file mode 100644 index 0000000..0a7a9db Binary files /dev/null and b/day_3/main differ diff --git a/day_3/main.c b/day_3/main.c new file mode 100644 index 0000000..682a114 --- /dev/null +++ b/day_3/main.c @@ -0,0 +1,66 @@ +#include +#include + +int tobin(char *inp) +{ + int len = strlen(inp); + printf("%d", len); + int out = 0; + int i = 0; + while (inp[i] != '\0') { + if (inp[i] == '1') { + out = out | (1 << len-i-1); + } + i++; + } + return out; +} + +int main(int argc, char** argv) { + char input; + char lines[1024][32]; + int lineCount = 0; + int charCount = 0; + while (scanf("%c", &input) == 1) { + if (input == '\n') { + charCount = 0; + lineCount++; + } else { + lines[lineCount][charCount] = input; + charCount++; + } + } + + charCount = strlen(lines[0]); + + char gamma[32]; + char epsilon[32]; + printf("Recorded %d %d \n", lineCount, charCount); + for (int i = 0; i < charCount; i++) { + int oneCount = 0; + for (int j = 0; j < lineCount; j++) { + printf("%c", lines[j][i]); + if (lines[j][i] == '1') + oneCount++; + } + printf("\n count: %d \n", oneCount); + if (oneCount > (lineCount-oneCount)) { + epsilon[i] = '0'; + gamma[i] = '1'; + } else { + epsilon[i] = '1'; + gamma[i] = '0'; + } + printf("\n"); + } + gamma[i+1] = '\0'; + epsilon[i+1] = '\0'; + printf("gamma: %s epsilon: %s \n", gamma, epsilon); + + int e = tobin(epsilon); + int g = tobin(gamma); + + printf("%d, %d \n", g, e); + printf("ans: %d \n", e*g); +} + diff --git a/day_3/tobin.py b/day_3/tobin.py new file mode 100644 index 0000000..5c475f8 --- /dev/null +++ b/day_3/tobin.py @@ -0,0 +1,8 @@ + +inp = '01011' +out = 0 +for i in range(0, len(inp)): + print(i, len(inp)-i-1) + if inp[i] == '1': + out = out | (1 << (len(inp)-i-1)) +print(out) diff --git a/day_4/code.py b/day_4/code.py new file mode 100644 index 0000000..f5a6969 --- /dev/null +++ b/day_4/code.py @@ -0,0 +1,87 @@ +import fileinput +import pprint + +data = [] +for inp in fileinput.input(): + val = inp.strip() + if val == '': + data.append(None) + if val != '': + data.append(val) + +# parse called numbers +to_be_called = list(map(int, data[0].strip().split(','))) + +# parse boards +boards = [] +currentBoard = [] +for line in data[2:]: + if line == None: + boards.append(currentBoard) + currentBoard = [] + continue + line_tmp = filter(lambda x: x != '', line.split(' ')) + line_tmp = map(int, line_tmp) + currentBoard.append(list(line_tmp)) + +def is_row_valid(row, called): + to_cmp = list(map(lambda x: x in called, row)) + return to_cmp == len(row)*[True] + +def board_do_win(deb, board, calling): + for row in board: + if is_row_valid(row, calling): + return True + + # generate columns + columns = [] + for column_index in range(len(board[0])): + current_c = [] + for row_index in range(len(board)): + current_c.append(board[row_index][column_index]) + columns.append(current_c) + # if deb: + # print(f'{columns=}') + + for column in columns: + if is_row_valid(column, calling): + return True + return False + +def get_wins(): + wins = [] + index_to_wins = [] + for i in range(len(to_be_called)): + calling = to_be_called[0:(i+1)] + for board_index,board in enumerate(boards): + if board_index in index_to_wins: + continue + deb = False + if calling == [7, 4, 9, 5, 11, 17, 23, 2, 0, 14, 21, 24, 10, 16, 13]: + print('DEBUG==') + deb = True + res = board_do_win(deb, board, calling) + if deb: + print(res, board) + if res: + wins.append((board_index, calling.copy(), board)) + index_to_wins.append(board_index) + return wins, index_to_wins + +def get_score_from_board(board, calling): + sum_unmarked = 0 + for row in board: + for e in row: + if e not in calling: + sum_unmarked += e + return sum_unmarked * calling[-1] + +score = 0 +wins, index_to_wins = get_wins() +pprint.pprint(wins) +print(f'{index_to_wins=}') +i, calling, winner = wins[-1] +score = get_score_from_board(winner, calling) + +pprint.pprint(winner) +print(f'{score=}') \ No newline at end of file diff --git a/day_4/input1.txt b/day_4/input1.txt new file mode 100644 index 0000000..f06791d --- /dev/null +++ b/day_4/input1.txt @@ -0,0 +1,20 @@ +7,4,9,5,11,17,23,2,0,14,21,24,10,16,13,6,15,25,12,22,18,20,8,19,3,26,1 + +22 13 17 11 0 + 8 2 23 4 24 +21 9 14 16 7 + 6 10 3 18 5 + 1 12 20 15 19 + + 3 15 0 2 22 + 9 18 13 17 5 +19 8 7 25 23 +20 11 10 24 4 +14 21 16 12 6 + +14 21 17 24 4 +10 16 15 9 19 +18 8 23 26 20 +22 11 13 6 5 + 2 0 12 3 7 + diff --git a/day_4/input2.txt b/day_4/input2.txt new file mode 100644 index 0000000..ba441b7 --- /dev/null +++ b/day_4/input2.txt @@ -0,0 +1,601 @@ +42,32,13,22,91,2,88,85,53,87,37,33,76,98,89,19,69,9,62,21,38,49,54,81,0,26,79,36,57,18,4,40,31,80,24,64,77,97,70,6,73,23,20,47,45,51,74,25,95,96,58,92,94,11,39,63,65,99,48,83,29,34,44,75,55,17,14,56,8,82,59,52,46,90,5,41,60,67,16,1,15,61,71,66,72,30,28,3,43,27,78,10,86,7,50,35,84,12,93,68 + +90 8 2 34 41 +11 67 74 71 62 +47 42 44 1 17 +21 55 12 91 6 +60 69 75 92 56 + +49 29 60 45 31 +94 51 73 33 67 +21 92 53 95 96 + 2 55 52 8 87 + 4 36 76 83 42 + +23 66 50 84 58 +62 98 81 76 57 +24 2 56 79 6 +55 0 16 64 38 +12 67 5 97 60 + +46 64 5 39 62 +16 82 13 77 52 +18 26 44 0 61 +25 7 43 42 50 +11 85 30 28 76 + +51 28 70 65 78 +62 88 30 36 96 +80 87 4 1 24 +63 22 41 79 34 +18 15 47 26 67 + +48 68 92 67 36 +54 50 71 98 21 +20 91 70 78 76 +87 97 44 3 93 +84 12 39 96 57 + +86 12 38 44 1 +10 87 74 53 66 +14 99 85 48 88 +59 33 76 71 31 +83 39 2 67 35 + +62 67 27 96 8 +81 23 78 33 48 +80 16 0 86 85 +26 54 29 32 89 +88 77 43 18 46 + +87 88 13 49 80 +78 19 81 56 11 +18 55 70 44 48 +31 37 24 95 28 +20 79 89 94 14 + +10 31 52 49 79 + 8 72 61 27 42 +73 4 11 43 91 +37 44 58 19 97 +96 63 90 13 74 + +71 27 87 40 99 +69 29 79 64 67 +85 66 4 28 30 +23 51 16 49 45 +92 12 74 1 75 + +46 52 40 12 44 + 0 73 20 86 1 +85 32 4 42 2 +21 33 56 39 9 +49 69 76 98 22 + +42 81 5 11 2 +57 50 77 8 24 +85 92 15 39 52 +37 70 36 79 67 +34 20 16 93 22 + +49 68 25 4 46 +17 57 77 59 54 +65 83 18 84 63 +36 74 61 22 71 +14 0 26 3 98 + + 1 80 93 66 58 +38 9 18 60 2 +70 46 35 88 11 +95 89 85 29 26 +82 68 25 15 53 + +97 80 28 17 7 +67 46 54 95 98 +38 74 42 57 79 +63 29 36 78 6 +90 60 84 10 14 + +18 88 8 96 0 +66 56 43 47 11 +69 73 14 71 25 +27 63 31 44 94 +75 95 84 74 13 + +92 9 98 17 74 +46 7 2 51 52 +21 60 5 87 15 +86 91 65 69 54 +61 85 1 62 53 + +89 80 4 0 68 +17 87 52 86 48 + 3 34 16 25 35 +13 38 49 66 50 +36 43 65 84 56 + + 9 93 54 92 55 +32 2 39 96 98 +58 72 52 83 97 +12 44 27 24 20 + 0 3 28 56 69 + +66 56 37 36 72 +35 49 40 43 44 +54 21 59 12 65 +74 25 22 80 98 +27 81 69 97 62 + +72 81 27 61 74 +26 50 79 13 53 +49 78 76 70 43 +51 64 99 46 67 +68 59 71 17 41 + +97 22 73 30 98 + 8 54 68 47 23 +70 89 41 52 61 +81 28 58 90 3 +88 40 86 46 43 + +94 6 46 43 59 +41 28 87 31 45 +83 26 66 81 1 +76 86 15 42 8 +67 47 54 4 77 + +96 56 22 67 2 +95 47 90 54 51 +78 79 29 82 48 +61 81 77 6 24 +71 93 98 26 75 + +95 7 77 94 64 +19 79 14 24 5 +50 48 4 71 22 +35 69 89 54 2 + 6 51 8 82 58 + +87 6 85 53 64 +50 43 80 61 15 +69 41 51 76 0 +78 26 37 62 16 +12 33 75 58 52 + +67 18 68 52 42 +37 30 49 31 69 +93 90 76 9 32 +60 84 73 94 17 +21 27 66 43 44 + +89 69 24 14 1 +88 33 50 2 63 +12 34 6 97 53 +28 26 55 8 32 +49 19 17 64 86 + +31 37 81 65 38 +96 18 45 19 58 +35 43 1 49 41 +46 85 92 53 15 + 3 34 8 14 21 + +35 68 61 45 39 +46 99 52 55 15 +74 14 10 62 17 + 8 66 98 89 91 +58 24 44 27 29 + +28 48 52 18 13 +17 35 20 11 49 +93 50 31 95 83 +27 33 79 44 80 + 4 96 23 65 68 + +70 78 31 86 36 +99 38 62 95 27 +52 74 25 80 41 +30 15 47 19 21 +77 23 53 9 7 + + 0 83 11 25 42 +50 64 76 67 72 +75 30 82 15 84 +58 17 87 61 33 +98 74 44 3 93 + + 5 40 78 24 11 +57 17 67 60 25 +37 76 28 56 35 +66 94 2 90 47 +86 10 85 46 45 + +63 12 7 74 14 +21 31 84 51 36 +66 20 25 46 41 +15 3 18 62 45 +35 78 93 2 9 + +90 9 33 63 41 +25 73 35 97 19 +99 96 45 71 22 +84 43 29 14 88 +42 8 1 78 68 + +98 84 38 95 27 +18 32 54 12 96 +56 50 2 45 53 +14 83 59 72 70 +22 41 28 9 78 + +89 94 50 33 73 +31 47 8 35 34 +43 92 95 21 51 +68 13 53 24 38 +80 69 44 87 83 + +32 82 75 73 91 +99 10 22 58 23 +86 9 42 81 40 +71 25 3 78 54 +80 15 83 5 4 + +58 1 3 11 24 +66 51 84 44 25 +37 54 12 27 97 +38 2 39 85 83 +89 91 33 79 59 + +49 22 12 84 60 +34 29 11 92 19 +97 41 88 53 38 +26 37 8 36 67 +91 3 90 52 46 + +77 35 76 56 20 +39 94 37 3 83 +78 81 66 29 4 +82 41 38 0 73 +59 16 88 15 30 + +34 69 74 90 33 + 9 47 71 94 10 +76 50 15 19 32 +49 89 31 21 92 +80 12 13 97 93 + +45 94 35 59 20 +18 46 14 36 30 + 6 78 84 38 99 + 5 4 90 92 63 +34 24 26 75 3 + +80 39 1 93 55 +67 71 30 44 76 +38 13 73 21 8 +11 47 46 69 29 +15 57 95 52 34 + +45 86 88 80 19 + 3 5 55 36 90 +54 85 44 18 39 +57 92 42 25 77 +43 0 12 1 24 + +74 71 83 29 25 +56 12 52 33 64 +68 94 97 14 15 + 7 48 24 80 5 +54 87 35 1 66 + +55 50 73 72 36 +17 80 87 68 90 + 8 33 81 1 51 +67 61 71 54 95 +93 98 27 56 0 + +19 32 63 6 98 +13 38 23 28 8 + 5 31 66 72 39 +99 46 2 64 14 +91 83 35 85 10 + +67 85 49 68 37 + 8 36 31 81 18 +74 61 20 80 50 +34 23 42 52 39 +21 14 22 58 54 + +16 14 69 13 81 +21 96 62 7 5 +95 52 0 67 24 + 6 30 65 66 86 +28 25 85 56 15 + + 4 41 21 86 32 +95 23 63 28 2 + 9 16 37 84 14 +92 22 71 42 5 +46 65 69 81 57 + +45 20 46 44 22 +62 93 78 58 25 +91 38 29 68 24 +21 55 71 43 26 +64 76 84 80 99 + +92 67 43 5 12 + 2 64 46 15 96 +95 75 73 38 30 +10 65 20 39 26 +36 16 25 27 88 + + 9 62 18 58 34 +85 80 36 2 48 +16 60 75 72 51 +39 22 32 61 54 +40 44 23 87 53 + +93 69 56 4 22 +73 51 24 53 19 +83 98 77 94 59 +52 70 15 40 48 +60 89 67 92 85 + +48 72 42 80 22 +99 49 11 77 4 +28 24 1 63 51 +85 93 62 7 78 +35 32 3 21 86 + +36 75 67 79 34 +20 8 71 6 5 +50 61 14 52 81 +26 37 0 80 77 +93 47 86 54 94 + +50 19 68 54 80 +81 12 33 87 24 +28 40 37 30 31 +41 51 15 27 97 +67 70 14 77 86 + +89 57 48 37 27 +44 46 29 63 20 +74 88 25 68 76 +18 28 91 59 58 +99 77 62 64 83 + +22 5 86 37 42 +47 69 87 34 89 +64 33 18 56 51 +30 49 11 79 17 +61 80 0 29 57 + + 7 82 87 15 83 +76 43 92 1 97 + 0 46 2 86 6 +48 27 29 61 67 +53 10 64 93 77 + +65 16 23 26 87 +58 5 25 97 94 +43 7 39 69 35 +62 81 56 13 28 +76 12 37 14 93 + +90 81 15 55 23 +58 40 8 56 76 +83 7 78 89 47 +65 70 13 48 42 +16 69 66 52 46 + +30 38 20 32 94 +91 96 34 23 90 +16 24 49 50 86 +65 19 56 7 66 +80 60 74 71 11 + +60 77 54 25 22 + 9 61 68 6 89 +15 71 10 84 41 + 1 47 8 43 63 +69 57 85 24 81 + +54 83 73 52 49 +69 96 31 57 44 +19 66 24 6 55 +91 84 20 3 27 + 7 9 71 43 75 + +90 72 15 99 2 +73 56 48 28 62 +40 75 0 59 31 +43 67 44 24 77 +98 35 4 3 37 + + 2 85 72 39 49 +58 25 91 69 19 +34 8 57 42 55 +80 21 51 64 30 +28 32 82 84 6 + +33 77 39 13 12 +86 21 96 82 94 +78 92 42 45 70 +31 22 60 80 67 +79 27 93 55 65 + +49 90 73 72 10 +98 89 77 88 12 +83 3 31 47 21 +65 26 93 55 53 + 5 95 22 8 63 + +79 88 11 62 25 +85 14 77 4 19 +41 31 83 26 67 +46 98 74 99 2 +44 53 70 36 52 + +21 33 15 57 53 +56 91 25 69 10 +52 59 73 96 87 +65 71 14 37 2 +39 89 29 83 64 + +88 38 45 39 20 +99 72 61 96 4 +23 24 67 49 80 +77 6 65 76 18 +59 51 78 33 46 + +44 22 9 90 83 +93 50 2 54 26 +68 71 43 85 41 +38 20 6 64 24 +81 39 33 56 27 + +98 1 69 30 38 +67 52 79 31 0 +24 41 82 55 73 +33 66 64 20 7 +65 9 14 70 94 + +59 63 65 25 1 +36 85 61 82 50 +52 3 70 30 43 +79 57 31 71 76 +19 97 93 77 49 + +60 45 90 32 74 +77 64 58 44 43 +71 49 37 21 46 +50 67 1 24 15 +14 22 0 40 23 + +65 87 81 64 28 +53 80 23 76 77 +49 14 50 2 35 +85 26 88 94 30 +79 18 68 15 45 + + 6 48 38 63 92 +51 45 58 4 76 +78 40 22 17 55 +79 12 66 61 5 +68 74 0 93 89 + +66 4 65 71 77 +47 35 38 83 64 +53 16 9 56 25 +92 81 55 60 33 +80 24 73 0 26 + +26 29 55 76 38 +79 52 91 84 39 +50 57 37 34 71 +33 31 68 92 24 +81 95 5 70 8 + +83 64 11 67 42 +97 29 27 4 78 +23 10 48 71 81 +80 74 86 17 36 +61 14 85 21 96 + +18 8 7 88 25 +59 5 28 57 69 +64 54 16 70 72 +13 75 71 33 2 +60 55 46 51 32 + +23 89 63 96 88 +71 66 9 53 65 +56 46 29 95 80 +44 94 90 3 5 +11 99 59 60 78 + +42 33 81 25 0 +46 66 63 82 94 +52 73 92 30 24 +59 26 50 87 45 +79 55 74 17 64 + +95 43 13 98 18 +62 12 24 88 28 +23 11 93 51 67 +71 0 44 64 96 +66 17 84 90 19 + +38 6 12 75 27 +28 73 62 50 51 +63 86 29 98 15 +46 90 4 58 96 +20 78 64 56 82 + +19 91 23 40 1 +78 57 75 43 2 +35 60 85 74 30 +80 3 63 54 32 +82 99 89 25 88 + +88 13 92 11 72 +56 6 35 55 21 + 8 20 36 60 99 + 1 96 57 45 12 +41 73 50 83 69 + +42 69 53 76 11 +38 74 13 14 86 +18 49 51 67 61 +26 80 47 16 78 +66 46 12 68 79 + +22 90 72 93 24 +55 29 43 28 5 +99 47 87 40 51 +81 18 70 20 36 + 0 48 23 46 82 + +91 74 83 95 54 +60 56 38 37 89 +87 96 71 50 35 + 5 11 42 72 3 +77 81 36 49 97 + +71 72 17 34 93 +45 81 22 67 23 +61 20 94 14 1 +85 40 15 36 88 +54 91 62 73 9 + +66 36 39 58 60 +96 8 22 49 77 +76 64 47 78 30 +50 41 12 69 15 + 7 1 29 72 27 + +90 12 65 13 39 +75 70 47 36 79 +31 54 17 10 32 +76 92 55 83 40 +49 5 20 44 37 + +16 78 65 5 70 +63 72 89 93 66 +21 90 46 54 81 + 7 48 88 60 11 +95 0 38 3 26 + +19 65 66 41 27 + 7 18 91 52 48 +87 55 49 68 71 +85 12 4 40 1 +57 67 6 11 58 + +91 85 38 14 21 +63 93 37 76 25 +68 36 4 24 71 +43 31 60 19 95 +52 55 13 83 78 diff --git a/day_5/CHANGELOG.md b/day_5/CHANGELOG.md new file mode 100644 index 0000000..3476371 --- /dev/null +++ b/day_5/CHANGELOG.md @@ -0,0 +1,5 @@ +# Revision history for aocDay5 + +## 0.1.0.0 -- YYYY-mm-dd + +* First version. Released on an unsuspecting world. diff --git a/day_5/aocDay5.cabal b/day_5/aocDay5.cabal new file mode 100644 index 0000000..a0dce2f --- /dev/null +++ b/day_5/aocDay5.cabal @@ -0,0 +1,32 @@ +cabal-version: 2.4 +name: aocDay5 +version: 0.1.0.0 + +-- A short (one-line) description of the package. +-- synopsis: + +-- A longer description of the package. +-- description: + +-- A URL where users can report bugs. +-- bug-reports: +license: NONE +author: Matthieu Bessat +maintainer: spamfree@matthieubessat.fr + +-- A copyright notice. +-- copyright: +-- category: +extra-source-files: CHANGELOG.md + +executable aocDay5 + main-is: Main.hs + + -- Modules included in this executable, other than Main. + -- other-modules: + + -- LANGUAGE extensions used by modules in this package. + -- other-extensions: + build-depends: base ^>=4.15.0.0 + hs-source-dirs: app + default-language: Haskell2010 diff --git a/day_5/app/Main.hs b/day_5/app/Main.hs new file mode 100644 index 0000000..65ae4a0 --- /dev/null +++ b/day_5/app/Main.hs @@ -0,0 +1,4 @@ +module Main where + +main :: IO () +main = putStrLn "Hello, Haskell!" diff --git a/day_5/code b/day_5/code new file mode 100644 index 0000000..d7a13c2 Binary files /dev/null and b/day_5/code differ diff --git a/day_5/code.hi b/day_5/code.hi new file mode 100644 index 0000000..51259bf Binary files /dev/null and b/day_5/code.hi differ diff --git a/day_5/code.hs b/day_5/code.hs new file mode 100644 index 0000000..6c013b0 --- /dev/null +++ b/day_5/code.hs @@ -0,0 +1,75 @@ +import Text.Printf +import System.IO + +-- getChunk :: Int -> String -> String +-- getChunk 0 subject = ("", subject) +-- getChunk len "" = "" +-- getChunk len subject = +-- let (hd, tl) = (getChunk (len-1) (tail subject)) +-- (hd, (head subject) : tl) + +chunksOfString :: Int -> String -> [String] + +chunksOfString 0 subject = [subject] +chunksOfString len "" = [] +chunksOfString len subject = do + (take len subject):(chunksOfString len (drop len subject)) + + + + +splitStrOnce :: String -> String -> (String, String) +splitStrOnce separator "" = ("", "") +splitStrOnce "" subject = (subject, "") +splitStrOnce separator subject = do + let sepLen = length separator + if (take sepLen subject) == separator then + ("", (drop sepLen subject)) + else do + let res = splitStrOnce separator (tail subject) + (((head subject):(fst res)), (snd res)) + +splitStr :: String -> String -> [String] +splitStr separator "" = [] +splitStr separator subject = do + let res = splitStrOnce separator subject + (fst res):(splitStr separator (snd res)) + +intOfString :: String -> Int +intOfString x = read x :: Int + +-- addPointToDiagram :: (Int, Int) -> [[Int]] + +-- rows -> columns -> diagram +makeDiagram :: Int -> Int -> [[Int]] +makeDiagram rows columns = replicate rows (replicate columns 0) + +addLinesToDiagram diagram (line:remaining) = + addLinesToDiagram (addToDiagram line) remaining + where addToDiagram ((xA, yA), (xB, yB)) = + undefined + + +main :: IO () +main = do + -- parse input of the day 5 of advent of code 2021 + input <- getContents + let parsed = map (\(a:[b]) -> (a,b)) $ map (\x -> do { + map (\(x:[y]) -> ((intOfString x), (intOfString y))) + $ map (splitStr ",") + $ splitStr " -> " x + }) $ lines $ input + + let allPoints = concat $ map (\(a,b) -> [a,b]) $ parsed + let allXs = map (\(x,y) -> x) $ allPoints + let allYs = map (\(x,y) -> y) $ allPoints + let maxX = maximum allXs + let maxY = maximum allYs + + let diagram = makeDiagram (maxY+1) (maxY+1) + + putStrLn (printf "diagram size: rows: %d; columns: %d" (maxY+1) (maxX+1)) + + diagram = map addLineToDiagram (parsed + + putStrLn $ show $ allXs diff --git a/day_5/code.o b/day_5/code.o new file mode 100644 index 0000000..ff3d048 Binary files /dev/null and b/day_5/code.o differ diff --git a/day_5/code.py b/day_5/code.py new file mode 100644 index 0000000..ebb5fc8 --- /dev/null +++ b/day_5/code.py @@ -0,0 +1,81 @@ +import fileinput +import pprint + +def print_diagram(d): + for r in d: + for e in r: + print('.' if e == 0 else e, end='') + print('') + +def parse_lines(): + lines, points = [], [] + for inp in fileinput.input(): + val = inp.strip() + if val == '': continue + if val != '': + # quick and dirty way to parse each line (unreadable!) + a, b = list( + map(lambda pt: tuple(list( + map(int, pt.split(',')) + )), val.split(' -> ')) + ) + points.append(a) + points.append(b) + lines.append((a, b)) + return lines, points + +def draw_line(diagram, a, b, mode): + step = 0 + if mode == 'horizontal': + for i in range(a[0], b[0]+1): + diagram[a[1]][i] += 1 + step += 1 + if mode == 'vertical': + for i in range(a[1], b[1]+1): + diagram[i][a[0]] += 1 + step += 1 + if mode == 'diagonal': + inc = 1 if b[1] > a[1] else -1 + for i in range(a[0], b[0]+1): + x, y = i, a[1]+inc*step + diagram[y][x] += 1 + step += 1 + return step + +def count_overlap(diagram): + c = 0 + for r in diagram: + for e in r: + if e >= 2: c += 1 + return c + +def main(): + lines, points = parse_lines() + + #print(points) + + xs = [x for x,y in points] + ys = [y for x,y in points] + + rows = max(ys)+1 + columns = max(xs)+1 + + # create the diagram + diagram = [[0 for j in range(columns)] for i in range(rows)] + + # draw lines in diagram + for a,b in lines: + mode = 'diagonal' + if a[1] == b[1]: + mode = 'horizontal' + if a[0] == b[0]: + mode = 'vertical' + if draw_line(diagram, a, b, mode) == 0: + draw_line(diagram, b, a, mode) + + #print_diagram(diagram) + + overlap = count_overlap(diagram) + print(overlap) + +main() diff --git a/day_5/dist-newstyle/build/x86_64-linux/ghc-9.0.1/aocDay5-0.1.0.0/x/aocDay5/build/aocDay5/autogen/Paths_aocDay5.hs b/day_5/dist-newstyle/build/x86_64-linux/ghc-9.0.1/aocDay5-0.1.0.0/x/aocDay5/build/aocDay5/autogen/Paths_aocDay5.hs new file mode 100644 index 0000000..55cdf69 --- /dev/null +++ b/day_5/dist-newstyle/build/x86_64-linux/ghc-9.0.1/aocDay5-0.1.0.0/x/aocDay5/build/aocDay5/autogen/Paths_aocDay5.hs @@ -0,0 +1,51 @@ +{-# LANGUAGE CPP #-} +{-# LANGUAGE NoRebindableSyntax #-} +{-# OPTIONS_GHC -fno-warn-missing-import-lists #-} +{-# OPTIONS_GHC -Wno-missing-safe-haskell-mode #-} +module Paths_aocDay5 ( + version, + getBinDir, getLibDir, getDynLibDir, getDataDir, getLibexecDir, + getDataFileName, getSysconfDir + ) where + +import qualified Control.Exception as Exception +import Data.Version (Version(..)) +import System.Environment (getEnv) +import Prelude + +#if defined(VERSION_base) + +#if MIN_VERSION_base(4,0,0) +catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a +#else +catchIO :: IO a -> (Exception.Exception -> IO a) -> IO a +#endif + +#else +catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a +#endif +catchIO = Exception.catch + +version :: Version +version = Version [0,1,0,0] [] +bindir, libdir, dynlibdir, datadir, libexecdir, sysconfdir :: FilePath + +bindir = "/home/mbess/.cabal/bin" +libdir = "/home/mbess/.cabal/lib/x86_64-linux-ghc-9.0.1/aocDay5-0.1.0.0-inplace-aocDay5" +dynlibdir = "/home/mbess/.cabal/lib/x86_64-linux-ghc-9.0.1" +datadir = "/home/mbess/.cabal/share/x86_64-linux-ghc-9.0.1/aocDay5-0.1.0.0" +libexecdir = "/home/mbess/.cabal/libexec/x86_64-linux-ghc-9.0.1/aocDay5-0.1.0.0" +sysconfdir = "/home/mbess/.cabal/etc" + +getBinDir, getLibDir, getDynLibDir, getDataDir, getLibexecDir, getSysconfDir :: IO FilePath +getBinDir = catchIO (getEnv "aocDay5_bindir") (\_ -> return bindir) +getLibDir = catchIO (getEnv "aocDay5_libdir") (\_ -> return libdir) +getDynLibDir = catchIO (getEnv "aocDay5_dynlibdir") (\_ -> return dynlibdir) +getDataDir = catchIO (getEnv "aocDay5_datadir") (\_ -> return datadir) +getLibexecDir = catchIO (getEnv "aocDay5_libexecdir") (\_ -> return libexecdir) +getSysconfDir = catchIO (getEnv "aocDay5_sysconfdir") (\_ -> return sysconfdir) + +getDataFileName :: FilePath -> IO FilePath +getDataFileName name = do + dir <- getDataDir + return (dir ++ "/" ++ name) diff --git a/day_5/dist-newstyle/build/x86_64-linux/ghc-9.0.1/aocDay5-0.1.0.0/x/aocDay5/build/aocDay5/autogen/cabal_macros.h b/day_5/dist-newstyle/build/x86_64-linux/ghc-9.0.1/aocDay5-0.1.0.0/x/aocDay5/build/aocDay5/autogen/cabal_macros.h new file mode 100644 index 0000000..71066ce --- /dev/null +++ b/day_5/dist-newstyle/build/x86_64-linux/ghc-9.0.1/aocDay5-0.1.0.0/x/aocDay5/build/aocDay5/autogen/cabal_macros.h @@ -0,0 +1,120 @@ +/* DO NOT EDIT: This file is automatically generated by Cabal */ + +/* package aocDay5-0.1.0.0 */ +#ifndef VERSION_aocDay5 +#define VERSION_aocDay5 "0.1.0.0" +#endif /* VERSION_aocDay5 */ +#ifndef MIN_VERSION_aocDay5 +#define MIN_VERSION_aocDay5(major1,major2,minor) (\ + (major1) < 0 || \ + (major1) == 0 && (major2) < 1 || \ + (major1) == 0 && (major2) == 1 && (minor) <= 0) +#endif /* MIN_VERSION_aocDay5 */ +/* package base-4.15.0.0 */ +#ifndef VERSION_base +#define VERSION_base "4.15.0.0" +#endif /* VERSION_base */ +#ifndef MIN_VERSION_base +#define MIN_VERSION_base(major1,major2,minor) (\ + (major1) < 4 || \ + (major1) == 4 && (major2) < 15 || \ + (major1) == 4 && (major2) == 15 && (minor) <= 0) +#endif /* MIN_VERSION_base */ + +/* tool gcc-11.1.0 */ +#ifndef TOOL_VERSION_gcc +#define TOOL_VERSION_gcc "11.1.0" +#endif /* TOOL_VERSION_gcc */ +#ifndef MIN_TOOL_VERSION_gcc +#define MIN_TOOL_VERSION_gcc(major1,major2,minor) (\ + (major1) < 11 || \ + (major1) == 11 && (major2) < 1 || \ + (major1) == 11 && (major2) == 1 && (minor) <= 0) +#endif /* MIN_TOOL_VERSION_gcc */ +/* tool ghc-9.0.1 */ +#ifndef TOOL_VERSION_ghc +#define TOOL_VERSION_ghc "9.0.1" +#endif /* TOOL_VERSION_ghc */ +#ifndef MIN_TOOL_VERSION_ghc +#define MIN_TOOL_VERSION_ghc(major1,major2,minor) (\ + (major1) < 9 || \ + (major1) == 9 && (major2) < 0 || \ + (major1) == 9 && (major2) == 0 && (minor) <= 1) +#endif /* MIN_TOOL_VERSION_ghc */ +/* tool ghc-pkg-9.0.1 */ +#ifndef TOOL_VERSION_ghc_pkg +#define TOOL_VERSION_ghc_pkg "9.0.1" +#endif /* TOOL_VERSION_ghc_pkg */ +#ifndef MIN_TOOL_VERSION_ghc_pkg +#define MIN_TOOL_VERSION_ghc_pkg(major1,major2,minor) (\ + (major1) < 9 || \ + (major1) == 9 && (major2) < 0 || \ + (major1) == 9 && (major2) == 0 && (minor) <= 1) +#endif /* MIN_TOOL_VERSION_ghc_pkg */ +/* tool haddock-2.24.0 */ +#ifndef TOOL_VERSION_haddock +#define TOOL_VERSION_haddock "2.24.0" +#endif /* TOOL_VERSION_haddock */ +#ifndef MIN_TOOL_VERSION_haddock +#define MIN_TOOL_VERSION_haddock(major1,major2,minor) (\ + (major1) < 2 || \ + (major1) == 2 && (major2) < 24 || \ + (major1) == 2 && (major2) == 24 && (minor) <= 0) +#endif /* MIN_TOOL_VERSION_haddock */ +/* tool hpc-0.68 */ +#ifndef TOOL_VERSION_hpc +#define TOOL_VERSION_hpc "0.68" +#endif /* TOOL_VERSION_hpc */ +#ifndef MIN_TOOL_VERSION_hpc +#define MIN_TOOL_VERSION_hpc(major1,major2,minor) (\ + (major1) < 0 || \ + (major1) == 0 && (major2) < 68 || \ + (major1) == 0 && (major2) == 68 && (minor) <= 0) +#endif /* MIN_TOOL_VERSION_hpc */ +/* tool hsc2hs-0.68.7 */ +#ifndef TOOL_VERSION_hsc2hs +#define TOOL_VERSION_hsc2hs "0.68.7" +#endif /* TOOL_VERSION_hsc2hs */ +#ifndef MIN_TOOL_VERSION_hsc2hs +#define MIN_TOOL_VERSION_hsc2hs(major1,major2,minor) (\ + (major1) < 0 || \ + (major1) == 0 && (major2) < 68 || \ + (major1) == 0 && (major2) == 68 && (minor) <= 7) +#endif /* MIN_TOOL_VERSION_hsc2hs */ +/* tool pkg-config-1.8.0 */ +#ifndef TOOL_VERSION_pkg_config +#define TOOL_VERSION_pkg_config "1.8.0" +#endif /* TOOL_VERSION_pkg_config */ +#ifndef MIN_TOOL_VERSION_pkg_config +#define MIN_TOOL_VERSION_pkg_config(major1,major2,minor) (\ + (major1) < 1 || \ + (major1) == 1 && (major2) < 8 || \ + (major1) == 1 && (major2) == 8 && (minor) <= 0) +#endif /* MIN_TOOL_VERSION_pkg_config */ +/* tool runghc-9.0.1 */ +#ifndef TOOL_VERSION_runghc +#define TOOL_VERSION_runghc "9.0.1" +#endif /* TOOL_VERSION_runghc */ +#ifndef MIN_TOOL_VERSION_runghc +#define MIN_TOOL_VERSION_runghc(major1,major2,minor) (\ + (major1) < 9 || \ + (major1) == 9 && (major2) < 0 || \ + (major1) == 9 && (major2) == 0 && (minor) <= 1) +#endif /* MIN_TOOL_VERSION_runghc */ +/* tool strip-2.36 */ +#ifndef TOOL_VERSION_strip +#define TOOL_VERSION_strip "2.36" +#endif /* TOOL_VERSION_strip */ +#ifndef MIN_TOOL_VERSION_strip +#define MIN_TOOL_VERSION_strip(major1,major2,minor) (\ + (major1) < 2 || \ + (major1) == 2 && (major2) < 36 || \ + (major1) == 2 && (major2) == 36 && (minor) <= 0) +#endif /* MIN_TOOL_VERSION_strip */ + +#ifndef CURRENT_COMPONENT_ID +#define CURRENT_COMPONENT_ID "aocDay5-0.1.0.0-inplace-aocDay5" +#endif /* CURRENT_COMPONENT_ID */ +#ifndef CURRENT_PACKAGE_VERSION +#define CURRENT_PACKAGE_VERSION "0.1.0.0" +#endif /* CURRENT_PACKAGE_VERSION */ diff --git a/day_5/dist-newstyle/build/x86_64-linux/ghc-9.0.1/aocDay5-0.1.0.0/x/aocDay5/cache/config b/day_5/dist-newstyle/build/x86_64-linux/ghc-9.0.1/aocDay5-0.1.0.0/x/aocDay5/cache/config new file mode 100644 index 0000000..78967f8 Binary files /dev/null and b/day_5/dist-newstyle/build/x86_64-linux/ghc-9.0.1/aocDay5-0.1.0.0/x/aocDay5/cache/config differ diff --git a/day_5/dist-newstyle/build/x86_64-linux/ghc-9.0.1/aocDay5-0.1.0.0/x/aocDay5/package.conf.inplace/package.cache b/day_5/dist-newstyle/build/x86_64-linux/ghc-9.0.1/aocDay5-0.1.0.0/x/aocDay5/package.conf.inplace/package.cache new file mode 100644 index 0000000..b3cae5c Binary files /dev/null and b/day_5/dist-newstyle/build/x86_64-linux/ghc-9.0.1/aocDay5-0.1.0.0/x/aocDay5/package.conf.inplace/package.cache differ diff --git a/day_5/dist-newstyle/build/x86_64-linux/ghc-9.0.1/aocDay5-0.1.0.0/x/aocDay5/package.conf.inplace/package.cache.lock b/day_5/dist-newstyle/build/x86_64-linux/ghc-9.0.1/aocDay5-0.1.0.0/x/aocDay5/package.conf.inplace/package.cache.lock new file mode 100644 index 0000000..e69de29 diff --git a/day_5/dist-newstyle/build/x86_64-linux/ghc-9.0.1/aocDay5-0.1.0.0/x/aocDay5/setup-config b/day_5/dist-newstyle/build/x86_64-linux/ghc-9.0.1/aocDay5-0.1.0.0/x/aocDay5/setup-config new file mode 100644 index 0000000..56087f6 Binary files /dev/null and b/day_5/dist-newstyle/build/x86_64-linux/ghc-9.0.1/aocDay5-0.1.0.0/x/aocDay5/setup-config differ diff --git a/day_5/dist-newstyle/cache/compiler b/day_5/dist-newstyle/cache/compiler new file mode 100644 index 0000000..8ee4736 Binary files /dev/null and b/day_5/dist-newstyle/cache/compiler differ diff --git a/day_5/dist-newstyle/cache/config b/day_5/dist-newstyle/cache/config new file mode 100644 index 0000000..1e8f1b4 Binary files /dev/null and b/day_5/dist-newstyle/cache/config differ diff --git a/day_5/dist-newstyle/cache/elaborated-plan b/day_5/dist-newstyle/cache/elaborated-plan new file mode 100644 index 0000000..3038bfb Binary files /dev/null and b/day_5/dist-newstyle/cache/elaborated-plan differ diff --git a/day_5/dist-newstyle/cache/improved-plan b/day_5/dist-newstyle/cache/improved-plan new file mode 100644 index 0000000..3d4b10f Binary files /dev/null and b/day_5/dist-newstyle/cache/improved-plan differ diff --git a/day_5/dist-newstyle/cache/plan.json b/day_5/dist-newstyle/cache/plan.json new file mode 100644 index 0000000..826d0dc --- /dev/null +++ b/day_5/dist-newstyle/cache/plan.json @@ -0,0 +1 @@ +{"cabal-version":"3.4.0.0","cabal-lib-version":"3.4.0.0","compiler-id":"ghc-9.0.1","os":"linux","arch":"x86_64","install-plan":[{"type":"configured","id":"aocDay5-0.1.0.0-inplace-aocDay5","pkg-name":"aocDay5","pkg-version":"0.1.0.0","flags":{},"style":"local","pkg-src":{"type":"local","path":"/tmp_workspace/aoc-2021/day_5/."},"dist-dir":"/tmp_workspace/aoc-2021/day_5/dist-newstyle/build/x86_64-linux/ghc-9.0.1/aocDay5-0.1.0.0/x/aocDay5","depends":["base-4.15.0.0"],"exe-depends":[],"component-name":"exe:aocDay5","bin-file":"/tmp_workspace/aoc-2021/day_5/dist-newstyle/build/x86_64-linux/ghc-9.0.1/aocDay5-0.1.0.0/x/aocDay5/build/aocDay5/aocDay5"},{"type":"pre-existing","id":"base-4.15.0.0","pkg-name":"base","pkg-version":"4.15.0.0","depends":["ghc-bignum-1.0","ghc-prim-0.7.0","rts"]},{"type":"pre-existing","id":"ghc-bignum-1.0","pkg-name":"ghc-bignum","pkg-version":"1.0","depends":["ghc-prim-0.7.0"]},{"type":"pre-existing","id":"ghc-prim-0.7.0","pkg-name":"ghc-prim","pkg-version":"0.7.0","depends":["rts"]},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0","depends":[]}]} \ No newline at end of file diff --git a/day_5/dist-newstyle/cache/solver-plan b/day_5/dist-newstyle/cache/solver-plan new file mode 100644 index 0000000..152c91f Binary files /dev/null and b/day_5/dist-newstyle/cache/solver-plan differ diff --git a/day_5/dist-newstyle/cache/source-hashes b/day_5/dist-newstyle/cache/source-hashes new file mode 100644 index 0000000..84111b5 Binary files /dev/null and b/day_5/dist-newstyle/cache/source-hashes differ diff --git a/day_5/dist-newstyle/cache/up-to-date b/day_5/dist-newstyle/cache/up-to-date new file mode 100644 index 0000000..597550b Binary files /dev/null and b/day_5/dist-newstyle/cache/up-to-date differ diff --git a/day_5/dist-newstyle/packagedb/ghc-9.0.1/package.cache b/day_5/dist-newstyle/packagedb/ghc-9.0.1/package.cache new file mode 100644 index 0000000..b3cae5c Binary files /dev/null and b/day_5/dist-newstyle/packagedb/ghc-9.0.1/package.cache differ diff --git a/day_5/dist-newstyle/packagedb/ghc-9.0.1/package.cache.lock b/day_5/dist-newstyle/packagedb/ghc-9.0.1/package.cache.lock new file mode 100644 index 0000000..e69de29 diff --git a/day_5/example.txt b/day_5/example.txt new file mode 100644 index 0000000..1d4e36d --- /dev/null +++ b/day_5/example.txt @@ -0,0 +1,10 @@ +0,9 -> 5,9 +8,0 -> 0,8 +9,4 -> 3,4 +2,2 -> 2,1 +7,0 -> 7,4 +6,4 -> 2,0 +0,9 -> 2,9 +3,4 -> 1,4 +0,0 -> 8,8 +5,5 -> 8,2 \ No newline at end of file diff --git a/day_5/input.txt b/day_5/input.txt new file mode 100644 index 0000000..9ec47c3 --- /dev/null +++ b/day_5/input.txt @@ -0,0 +1,501 @@ +976,35 -> 24,987 +552,172 -> 870,490 +647,640 -> 841,834 +580,460 -> 580,749 +614,575 -> 746,575 +97,846 -> 441,846 +467,680 -> 767,680 +722,860 -> 722,98 +31,338 -> 31,581 +113,712 -> 184,712 +738,897 -> 136,897 +820,750 -> 144,74 +291,411 -> 641,411 +581,878 -> 581,657 +449,540 -> 787,202 +79,925 -> 981,23 +800,120 -> 36,884 +253,603 -> 253,643 +574,138 -> 574,966 +847,199 -> 144,902 +816,177 -> 243,750 +963,632 -> 472,141 +38,41 -> 986,989 +980,225 -> 980,801 +255,350 -> 647,350 +732,311 -> 732,907 +109,662 -> 113,662 +333,317 -> 470,180 +111,146 -> 339,146 +136,856 -> 534,458 +555,39 -> 555,895 +699,327 -> 699,496 +280,948 -> 660,948 +919,293 -> 316,896 +343,645 -> 620,368 +14,984 -> 975,23 +219,653 -> 696,176 +50,350 -> 50,956 +919,550 -> 919,568 +405,532 -> 238,532 +328,95 -> 979,746 +564,716 -> 119,716 +52,285 -> 52,126 +240,671 -> 963,671 +691,416 -> 676,431 +216,247 -> 216,530 +103,309 -> 103,643 +265,163 -> 981,879 +623,399 -> 760,262 +392,568 -> 674,286 +280,82 -> 863,665 +657,522 -> 657,858 +194,16 -> 443,16 +158,326 -> 158,372 +582,530 -> 582,159 +857,638 -> 857,807 +463,575 -> 463,108 +74,390 -> 74,967 +437,892 -> 224,892 +854,409 -> 366,897 +875,858 -> 875,871 +245,683 -> 735,193 +911,285 -> 216,980 +944,170 -> 701,170 +149,244 -> 149,653 +879,926 -> 70,117 +193,198 -> 777,782 +11,581 -> 287,305 +513,163 -> 939,163 +551,705 -> 551,636 +546,79 -> 546,630 +392,877 -> 392,240 +859,821 -> 859,975 +755,581 -> 755,722 +941,636 -> 976,636 +212,807 -> 595,807 +24,847 -> 24,248 +972,46 -> 40,978 +434,328 -> 491,328 +573,663 -> 16,663 +882,43 -> 882,777 +162,786 -> 11,786 +774,340 -> 322,340 +33,775 -> 883,775 +422,958 -> 212,748 +973,879 -> 415,321 +278,602 -> 435,759 +983,99 -> 321,99 +594,502 -> 727,635 +755,674 -> 314,233 +67,336 -> 702,336 +617,128 -> 617,287 +735,929 -> 165,929 +758,778 -> 758,679 +38,27 -> 971,960 +873,419 -> 949,419 +305,138 -> 978,811 +282,404 -> 377,404 +753,267 -> 945,267 +877,796 -> 64,796 +35,32 -> 949,946 +18,383 -> 64,429 +855,407 -> 938,324 +845,965 -> 88,208 +77,960 -> 960,77 +225,714 -> 490,714 +619,40 -> 395,40 +87,379 -> 87,178 +961,828 -> 302,828 +78,321 -> 78,816 +243,620 -> 883,620 +581,560 -> 69,560 +420,957 -> 768,957 +927,427 -> 908,408 +100,406 -> 100,736 +369,27 -> 199,27 +177,804 -> 177,727 +83,807 -> 166,724 +358,119 -> 358,583 +866,223 -> 348,741 +283,636 -> 283,476 +792,481 -> 161,481 +126,476 -> 612,962 +829,437 -> 829,444 +402,683 -> 402,11 +680,278 -> 676,278 +391,597 -> 521,467 +467,787 -> 646,608 +637,689 -> 637,959 +161,173 -> 161,604 +582,252 -> 582,181 +971,93 -> 329,93 +763,195 -> 156,802 +576,504 -> 755,325 +156,56 -> 657,557 +276,940 -> 836,380 +800,933 -> 800,734 +486,607 -> 486,54 +847,679 -> 299,131 +558,711 -> 558,643 +44,869 -> 44,877 +897,399 -> 897,265 +856,217 -> 856,701 +395,784 -> 395,634 +443,647 -> 443,977 +59,735 -> 59,860 +564,519 -> 173,910 +516,860 -> 54,860 +23,467 -> 23,551 +82,102 -> 849,869 +316,551 -> 195,551 +943,41 -> 25,959 +314,865 -> 314,74 +434,491 -> 501,491 +941,563 -> 860,563 +937,842 -> 320,225 +415,725 -> 415,841 +822,308 -> 500,308 +136,434 -> 22,434 +275,356 -> 280,356 +672,935 -> 22,935 +776,22 -> 55,743 +219,198 -> 219,775 +977,923 -> 977,344 +37,922 -> 815,144 +107,493 -> 107,804 +840,913 -> 840,686 +249,774 -> 249,485 +765,696 -> 649,696 +491,708 -> 302,708 +345,589 -> 345,357 +935,206 -> 759,206 +757,823 -> 30,96 +590,513 -> 746,513 +373,18 -> 845,490 +816,829 -> 816,608 +104,15 -> 964,875 +650,675 -> 650,389 +333,987 -> 857,463 +627,398 -> 627,223 +578,208 -> 159,208 +355,594 -> 355,633 +63,921 -> 873,921 +510,434 -> 801,143 +953,928 -> 308,283 +947,48 -> 25,970 +384,203 -> 384,97 +806,160 -> 934,288 +690,29 -> 269,29 +825,834 -> 269,278 +620,613 -> 620,540 +554,698 -> 419,833 +887,554 -> 457,554 +276,573 -> 276,487 +213,211 -> 213,619 +437,621 -> 141,917 +951,59 -> 951,272 +270,455 -> 270,336 +727,25 -> 42,710 +803,384 -> 615,196 +643,715 -> 643,741 +750,815 -> 642,923 +464,693 -> 714,943 +828,773 -> 189,134 +507,858 -> 58,858 +289,898 -> 190,898 +380,518 -> 749,149 +696,219 -> 760,219 +678,177 -> 686,185 +241,103 -> 857,103 +782,773 -> 782,508 +20,24 -> 277,281 +175,805 -> 59,805 +375,944 -> 375,938 +180,971 -> 203,971 +379,984 -> 830,984 +298,376 -> 254,376 +807,376 -> 486,376 +931,512 -> 931,931 +889,859 -> 361,859 +632,546 -> 298,880 +429,616 -> 583,770 +814,838 -> 503,527 +64,301 -> 753,301 +706,124 -> 706,698 +323,976 -> 323,43 +42,82 -> 550,590 +260,528 -> 260,462 +201,656 -> 593,656 +348,516 -> 203,516 +201,675 -> 413,675 +928,70 -> 138,860 +323,427 -> 601,427 +874,156 -> 630,156 +335,374 -> 335,522 +237,551 -> 597,551 +14,125 -> 909,125 +805,59 -> 67,797 +656,684 -> 656,263 +487,544 -> 487,464 +637,890 -> 637,606 +27,983 -> 952,58 +899,93 -> 77,915 +504,288 -> 504,689 +404,289 -> 700,289 +643,336 -> 321,336 +190,865 -> 674,865 +844,12 -> 81,775 +821,365 -> 821,453 +503,20 -> 503,811 +20,122 -> 983,122 +28,231 -> 398,231 +441,263 -> 931,263 +130,19 -> 925,19 +577,873 -> 577,706 +322,489 -> 322,621 +269,134 -> 935,800 +61,841 -> 491,841 +286,720 -> 542,464 +497,530 -> 497,266 +178,616 -> 512,282 +184,338 -> 184,241 +906,946 -> 327,946 +879,947 -> 879,302 +815,788 -> 963,788 +791,322 -> 791,395 +851,116 -> 793,116 +232,114 -> 934,816 +273,839 -> 157,839 +184,876 -> 184,138 +298,586 -> 634,250 +130,127 -> 130,753 +453,485 -> 855,887 +663,776 -> 934,776 +799,326 -> 799,661 +56,498 -> 274,716 +650,317 -> 52,915 +93,342 -> 391,44 +972,22 -> 59,935 +761,78 -> 508,331 +577,578 -> 15,16 +51,902 -> 72,881 +51,91 -> 51,422 +89,602 -> 89,280 +339,129 -> 339,329 +173,413 -> 489,413 +756,383 -> 745,383 +216,39 -> 216,373 +844,404 -> 552,404 +313,276 -> 313,895 +236,330 -> 231,330 +836,496 -> 836,291 +18,48 -> 950,980 +562,408 -> 562,606 +70,105 -> 70,469 +402,458 -> 694,166 +228,644 -> 689,183 +220,646 -> 834,32 +691,734 -> 141,184 +24,974 -> 978,20 +805,111 -> 11,905 +765,765 -> 210,210 +265,810 -> 248,810 +742,506 -> 179,506 +945,954 -> 40,49 +403,464 -> 600,464 +149,784 -> 754,784 +784,757 -> 222,757 +905,839 -> 160,839 +660,971 -> 609,971 +148,505 -> 309,505 +571,494 -> 323,494 +573,109 -> 71,109 +513,649 -> 54,649 +287,582 -> 287,604 +569,218 -> 569,790 +108,740 -> 108,816 +542,899 -> 445,802 +939,519 -> 939,752 +810,643 -> 810,236 +571,95 -> 560,106 +547,431 -> 547,42 +299,536 -> 299,820 +506,808 -> 437,808 +727,803 -> 941,589 +583,100 -> 891,100 +552,556 -> 515,556 +789,871 -> 90,172 +81,649 -> 641,89 +264,518 -> 511,518 +498,324 -> 596,324 +642,836 -> 642,481 +695,827 -> 768,900 +603,940 -> 603,352 +975,64 -> 92,947 +65,515 -> 65,405 +766,667 -> 344,667 +284,162 -> 245,162 +139,123 -> 942,926 +316,906 -> 316,907 +42,418 -> 224,600 +338,733 -> 338,46 +448,744 -> 448,796 +198,153 -> 198,723 +122,433 -> 712,433 +887,708 -> 685,708 +452,265 -> 817,630 +317,613 -> 317,959 +185,841 -> 788,238 +702,558 -> 734,558 +45,749 -> 330,464 +250,174 -> 250,561 +276,664 -> 793,664 +164,434 -> 619,434 +360,13 -> 686,339 +52,333 -> 361,642 +315,675 -> 315,175 +646,530 -> 815,699 +363,554 -> 58,554 +730,80 -> 38,772 +90,85 -> 494,85 +863,64 -> 218,64 +633,492 -> 633,134 +321,919 -> 324,919 +395,133 -> 395,592 +152,963 -> 983,132 +42,149 -> 674,781 +754,146 -> 858,146 +53,628 -> 976,628 +433,365 -> 433,735 +951,360 -> 951,913 +875,250 -> 875,463 +923,348 -> 208,348 +951,586 -> 103,586 +818,924 -> 178,284 +265,130 -> 265,859 +26,410 -> 805,410 +847,149 -> 190,806 +136,36 -> 797,36 +841,660 -> 620,660 +759,553 -> 393,919 +530,743 -> 647,860 +163,909 -> 979,93 +798,175 -> 399,574 +934,847 -> 934,231 +373,749 -> 373,397 +679,871 -> 695,887 +407,468 -> 524,468 +890,611 -> 988,611 +104,706 -> 745,65 +533,659 -> 533,126 +342,460 -> 187,460 +398,26 -> 398,254 +116,11 -> 886,781 +846,317 -> 329,834 +919,104 -> 120,903 +93,843 -> 912,24 +618,610 -> 618,311 +834,276 -> 85,276 +983,26 -> 42,967 +412,706 -> 412,204 +51,966 -> 952,65 +969,871 -> 969,258 +51,652 -> 608,95 +289,903 -> 869,903 +283,760 -> 781,760 +521,74 -> 521,848 +720,572 -> 638,572 +146,847 -> 146,930 +980,953 -> 42,15 +49,956 -> 941,64 +209,242 -> 905,242 +249,185 -> 374,60 +916,738 -> 916,793 +12,922 -> 872,62 +543,198 -> 123,198 +316,423 -> 316,549 +694,514 -> 869,514 +36,46 -> 916,926 +427,295 -> 267,295 +884,669 -> 884,175 +558,379 -> 549,379 +89,85 -> 968,964 +48,544 -> 48,675 +337,81 -> 337,870 +953,46 -> 44,955 +37,912 -> 251,698 +342,191 -> 342,238 +874,289 -> 353,810 +547,935 -> 97,485 +392,359 -> 859,826 +329,815 -> 329,98 +65,22 -> 118,75 +803,341 -> 803,763 +389,98 -> 964,98 +420,520 -> 396,520 +204,650 -> 583,650 +446,77 -> 739,77 +208,447 -> 75,580 +693,443 -> 693,668 +341,697 -> 802,697 +398,718 -> 318,638 +430,38 -> 430,665 +519,932 -> 490,932 +381,492 -> 242,353 +896,616 -> 638,616 +520,552 -> 901,933 +750,44 -> 307,44 +653,209 -> 186,676 +399,447 -> 208,256 +741,146 -> 741,399 +228,893 -> 228,214 +934,925 -> 71,62 +986,74 -> 74,986 +422,88 -> 467,43 +566,680 -> 875,371 +328,465 -> 38,465 +705,620 -> 705,441 +534,256 -> 534,784 +909,939 -> 909,222 +467,640 -> 323,640 +372,725 -> 816,281 +78,631 -> 78,933 +739,376 -> 397,718 +901,954 -> 153,206 +869,212 -> 799,212 +192,946 -> 192,736 +946,13 -> 13,946 +267,480 -> 267,561 +954,287 -> 954,190 +145,935 -> 913,167 +295,152 -> 458,152 +10,690 -> 139,690 +121,23 -> 977,879 +265,247 -> 265,976 +281,793 -> 787,793 +988,355 -> 367,976 +97,807 -> 323,807 +527,506 -> 474,506 +359,340 -> 359,280 +371,203 -> 801,203 +53,593 -> 53,980 +377,705 -> 987,95 +901,975 -> 153,227 +851,442 -> 565,442 +425,976 -> 850,551 +766,674 -> 766,572 +18,757 -> 18,444 +386,682 -> 386,424 +966,640 -> 604,278 +919,973 -> 141,195 +672,768 -> 405,768 +271,814 -> 971,114 +719,902 -> 474,902 +365,768 -> 877,256 +360,787 -> 214,787 +133,616 -> 266,483 +577,399 -> 59,399 +290,74 -> 290,145 +154,131 -> 154,210 +