commit 658f3bfca5616db8fc512e02dd49e587066cfe02 Author: Daniel Yrovas Date: Thu Nov 10 16:58:11 2022 +1100 initial commit diff --git a/01-sonar-sweep/.gitignore b/01-sonar-sweep/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/01-sonar-sweep/.gitignore @@ -0,0 +1 @@ +/target diff --git a/01-sonar-sweep/Cargo.lock b/01-sonar-sweep/Cargo.lock new file mode 100644 index 0000000..3e571b9 --- /dev/null +++ b/01-sonar-sweep/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "sonar-sweep" +version = "0.1.0" diff --git a/01-sonar-sweep/Cargo.toml b/01-sonar-sweep/Cargo.toml new file mode 100644 index 0000000..cc9d9a1 --- /dev/null +++ b/01-sonar-sweep/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "sonar-sweep" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/01-sonar-sweep/LICENSE b/01-sonar-sweep/LICENSE new file mode 100644 index 0000000..7fb39ed --- /dev/null +++ b/01-sonar-sweep/LICENSE @@ -0,0 +1,19 @@ +The MIT License (MIT) +Copyright (c) 2021 danielyrovas + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/01-sonar-sweep/depths.txt b/01-sonar-sweep/depths.txt new file mode 100644 index 0000000..42f77f8 --- /dev/null +++ b/01-sonar-sweep/depths.txt @@ -0,0 +1,2000 @@ +196 +197 +176 +182 +179 +177 +171 +172 +170 +147 +143 +153 +158 +157 +147 +151 +153 +159 +150 +167 +162 +160 +159 +161 +165 +150 +158 +157 +146 +141 +137 +127 +140 +127 +115 +114 +116 +118 +127 +133 +141 +151 +150 +148 +146 +170 +171 +168 +189 +194 +191 +205 +210 +194 +195 +191 +231 +241 +239 +241 +245 +255 +239 +244 +245 +246 +260 +262 +253 +262 +268 +289 +278 +279 +293 +312 +307 +308 +333 +336 +325 +329 +338 +334 +337 +330 +340 +341 +338 +344 +359 +361 +359 +377 +411 +450 +459 +458 +455 +450 +444 +460 +457 +458 +454 +456 +460 +465 +470 +469 +468 +462 +454 +446 +448 +449 +451 +448 +463 +470 +492 +504 +506 +508 +501 +535 +539 +547 +549 +548 +563 +565 +564 +571 +586 +599 +593 +588 +591 +597 +611 +610 +617 +619 +617 +618 +614 +604 +603 +604 +590 +593 +592 +581 +577 +604 +611 +612 +610 +634 +651 +638 +636 +633 +634 +629 +624 +611 +623 +626 +631 +632 +631 +659 +672 +686 +681 +682 +680 +666 +668 +682 +680 +681 +700 +701 +690 +685 +693 +692 +691 +693 +692 +700 +704 +713 +716 +715 +727 +726 +725 +713 +718 +714 +715 +710 +709 +718 +717 +719 +720 +716 +705 +716 +719 +735 +746 +729 +735 +726 +743 +744 +740 +739 +730 +735 +738 +736 +743 +752 +754 +758 +767 +753 +754 +756 +754 +758 +755 +750 +754 +750 +749 +745 +743 +740 +739 +740 +738 +740 +746 +747 +772 +775 +768 +769 +781 +782 +788 +799 +813 +792 +782 +783 +785 +770 +761 +771 +798 +808 +810 +811 +829 +840 +826 +833 +829 +833 +815 +816 +818 +809 +810 +813 +819 +809 +787 +770 +765 +786 +793 +792 +787 +790 +791 +794 +790 +801 +804 +803 +781 +794 +778 +779 +777 +778 +786 +773 +775 +783 +781 +790 +781 +782 +791 +792 +815 +816 +808 +803 +786 +785 +781 +780 +781 +785 +754 +741 +725 +724 +725 +724 +726 +725 +727 +721 +718 +706 +721 +731 +739 +759 +752 +749 +767 +766 +787 +788 +812 +826 +828 +829 +835 +834 +831 +818 +808 +813 +827 +847 +848 +853 +857 +859 +860 +864 +867 +871 +870 +877 +874 +858 +857 +840 +844 +848 +846 +853 +860 +866 +862 +867 +885 +898 +929 +935 +944 +946 +952 +961 +975 +974 +970 +966 +983 +981 +986 +1001 +996 +995 +982 +984 +991 +982 +990 +984 +991 +992 +997 +995 +994 +998 +1004 +1010 +1011 +1010 +1013 +1016 +1025 +1027 +1029 +1040 +1038 +1041 +1045 +1047 +1048 +1050 +1023 +1024 +1019 +1025 +1035 +1036 +1045 +1052 +1053 +1050 +1049 +1050 +1048 +1049 +1059 +1061 +1059 +1031 +1032 +1042 +1051 +1055 +1064 +1058 +1032 +1037 +1039 +1061 +1087 +1088 +1080 +1085 +1069 +1052 +1054 +1060 +1062 +1063 +1062 +1063 +1062 +1048 +1054 +1050 +1031 +1028 +1022 +1034 +1038 +1039 +1036 +1045 +1055 +1054 +1053 +1058 +1088 +1089 +1086 +1095 +1096 +1090 +1087 +1095 +1099 +1097 +1091 +1093 +1068 +1061 +1078 +1073 +1079 +1082 +1068 +1079 +1078 +1067 +1068 +1084 +1091 +1096 +1070 +1061 +1052 +1047 +1065 +1056 +1069 +1070 +1072 +1081 +1083 +1084 +1078 +1079 +1080 +1082 +1085 +1081 +1085 +1086 +1094 +1096 +1097 +1079 +1081 +1082 +1080 +1077 +1084 +1085 +1084 +1088 +1091 +1092 +1101 +1102 +1101 +1116 +1115 +1114 +1117 +1123 +1120 +1113 +1111 +1116 +1119 +1118 +1130 +1116 +1119 +1122 +1120 +1121 +1150 +1153 +1156 +1162 +1163 +1189 +1191 +1192 +1189 +1187 +1186 +1177 +1167 +1140 +1149 +1160 +1142 +1147 +1148 +1170 +1169 +1188 +1190 +1189 +1193 +1187 +1181 +1188 +1193 +1192 +1194 +1216 +1223 +1209 +1199 +1214 +1218 +1211 +1212 +1222 +1227 +1234 +1244 +1235 +1238 +1232 +1238 +1236 +1231 +1223 +1217 +1218 +1229 +1212 +1236 +1237 +1240 +1255 +1257 +1258 +1261 +1258 +1255 +1258 +1256 +1258 +1279 +1275 +1274 +1282 +1292 +1293 +1296 +1287 +1323 +1322 +1332 +1333 +1316 +1327 +1332 +1334 +1314 +1311 +1315 +1317 +1320 +1359 +1362 +1360 +1362 +1372 +1377 +1389 +1382 +1373 +1380 +1388 +1395 +1384 +1375 +1382 +1383 +1368 +1363 +1356 +1352 +1356 +1360 +1355 +1367 +1371 +1382 +1409 +1379 +1421 +1429 +1430 +1448 +1451 +1452 +1449 +1439 +1460 +1431 +1429 +1430 +1427 +1416 +1417 +1454 +1472 +1473 +1476 +1475 +1477 +1476 +1482 +1481 +1489 +1488 +1490 +1495 +1493 +1500 +1517 +1500 +1498 +1494 +1502 +1505 +1536 +1537 +1538 +1543 +1542 +1541 +1554 +1553 +1555 +1558 +1549 +1550 +1557 +1558 +1560 +1561 +1565 +1560 +1565 +1572 +1573 +1575 +1571 +1581 +1605 +1614 +1611 +1619 +1618 +1614 +1612 +1616 +1629 +1628 +1632 +1635 +1644 +1637 +1638 +1632 +1613 +1614 +1615 +1614 +1609 +1611 +1620 +1615 +1608 +1612 +1646 +1647 +1665 +1668 +1665 +1668 +1676 +1677 +1682 +1695 +1696 +1708 +1709 +1686 +1681 +1668 +1669 +1655 +1667 +1681 +1689 +1710 +1718 +1749 +1748 +1746 +1749 +1752 +1748 +1745 +1744 +1743 +1745 +1743 +1744 +1726 +1725 +1724 +1728 +1727 +1739 +1740 +1733 +1739 +1740 +1757 +1759 +1758 +1759 +1762 +1802 +1799 +1792 +1786 +1787 +1793 +1794 +1797 +1798 +1800 +1803 +1802 +1792 +1793 +1795 +1783 +1782 +1772 +1771 +1772 +1774 +1778 +1765 +1766 +1767 +1769 +1771 +1772 +1788 +1781 +1790 +1789 +1791 +1813 +1809 +1810 +1813 +1814 +1819 +1823 +1815 +1814 +1822 +1826 +1812 +1817 +1814 +1818 +1800 +1801 +1804 +1800 +1802 +1813 +1825 +1822 +1832 +1840 +1841 +1830 +1834 +1835 +1841 +1840 +1845 +1881 +1883 +1887 +1886 +1890 +1889 +1896 +1897 +1917 +1923 +1925 +1923 +1924 +1909 +1899 +1904 +1905 +1907 +1905 +1908 +1922 +1912 +1920 +1924 +1920 +1921 +1920 +1919 +1935 +1937 +1955 +1956 +1967 +1972 +1977 +1984 +1982 +1986 +1980 +1975 +2005 +2007 +2018 +2027 +2040 +2039 +2040 +2042 +2040 +2041 +2040 +2034 +2060 +2066 +2074 +2076 +2080 +2081 +2082 +2066 +2071 +2074 +2069 +2070 +2076 +2075 +2079 +2082 +2081 +2080 +2085 +2093 +2097 +2091 +2096 +2097 +2106 +2103 +2110 +2107 +2098 +2097 +2110 +2113 +2097 +2102 +2103 +2107 +2103 +2117 +2097 +2105 +2103 +2099 +2101 +2094 +2102 +2099 +2069 +2067 +2057 +2071 +2073 +2075 +2073 +2060 +2064 +2081 +2057 +2055 +2056 +2064 +2066 +2067 +2069 +2070 +2076 +2075 +2074 +2101 +2099 +2116 +2115 +2119 +2129 +2126 +2124 +2122 +2126 +2143 +2140 +2141 +2146 +2145 +2148 +2164 +2154 +2151 +2148 +2152 +2130 +2129 +2131 +2118 +2123 +2129 +2130 +2127 +2133 +2132 +2142 +2143 +2157 +2156 +2140 +2139 +2141 +2139 +2140 +2142 +2134 +2126 +2128 +2129 +2131 +2126 +2146 +2145 +2134 +2153 +2151 +2140 +2139 +2161 +2165 +2169 +2150 +2151 +2153 +2176 +2183 +2182 +2188 +2165 +2160 +2161 +2165 +2173 +2155 +2154 +2141 +2140 +2161 +2158 +2148 +2164 +2165 +2176 +2163 +2168 +2158 +2159 +2194 +2201 +2203 +2202 +2211 +2213 +2210 +2193 +2199 +2201 +2199 +2206 +2231 +2239 +2246 +2249 +2265 +2266 +2267 +2281 +2291 +2292 +2293 +2296 +2295 +2275 +2273 +2275 +2274 +2286 +2291 +2301 +2300 +2302 +2298 +2300 +2288 +2298 +2300 +2291 +2309 +2303 +2304 +2309 +2318 +2308 +2315 +2314 +2313 +2315 +2314 +2315 +2325 +2326 +2310 +2308 +2314 +2313 +2312 +2311 +2312 +2311 +2310 +2304 +2310 +2308 +2311 +2296 +2295 +2289 +2290 +2292 +2291 +2289 +2290 +2288 +2300 +2302 +2307 +2313 +2312 +2309 +2310 +2312 +2313 +2314 +2315 +2314 +2308 +2309 +2313 +2325 +2324 +2322 +2300 +2298 +2291 +2301 +2298 +2307 +2309 +2308 +2345 +2341 +2342 +2345 +2360 +2367 +2371 +2374 +2368 +2369 +2375 +2406 +2405 +2422 +2423 +2422 +2419 +2417 +2416 +2417 +2421 +2427 +2445 +2449 +2432 +2448 +2454 +2437 +2429 +2430 +2439 +2415 +2418 +2425 +2421 +2401 +2414 +2412 +2416 +2432 +2450 +2443 +2426 +2427 +2428 +2427 +2429 +2430 +2434 +2438 +2431 +2433 +2431 +2427 +2433 +2455 +2462 +2463 +2465 +2461 +2462 +2463 +2496 +2497 +2493 +2486 +2472 +2470 +2475 +2483 +2491 +2492 +2505 +2510 +2511 +2507 +2508 +2506 +2507 +2505 +2506 +2504 +2524 +2528 +2519 +2527 +2543 +2549 +2555 +2567 +2555 +2561 +2560 +2561 +2560 +2541 +2540 +2537 +2530 +2532 +2528 +2529 +2528 +2522 +2516 +2506 +2520 +2526 +2527 +2531 +2534 +2544 +2545 +2542 +2541 +2543 +2544 +2543 +2542 +2558 +2560 +2558 +2559 +2552 +2551 +2558 +2573 +2590 +2589 +2583 +2574 +2565 +2569 +2580 +2596 +2597 +2596 +2585 +2586 +2587 +2598 +2587 +2588 +2571 +2570 +2567 +2579 +2581 +2579 +2572 +2577 +2575 +2574 +2582 +2585 +2592 +2600 +2601 +2608 +2606 +2609 +2612 +2619 +2631 +2636 +2633 +2640 +2654 +2649 +2611 +2598 +2600 +2604 +2608 +2600 +2607 +2623 +2624 +2633 +2632 +2637 +2655 +2658 +2662 +2675 +2676 +2699 +2711 +2714 +2710 +2718 +2750 +2719 +2713 +2714 +2737 +2739 +2733 +2736 +2754 +2773 +2776 +2794 +2795 +2823 +2825 +2826 +2828 +2830 +2815 +2823 +2821 +2825 +2829 +2833 +2834 +2833 +2832 +2844 +2838 +2840 +2845 +2837 +2849 +2878 +2859 +2858 +2859 +2864 +2868 +2870 +2863 +2859 +2860 +2858 +2860 +2857 +2851 +2852 +2856 +2818 +2820 +2822 +2819 +2818 +2819 +2823 +2827 +2836 +2834 +2835 +2842 +2856 +2854 +2853 +2854 +2855 +2854 +2858 +2859 +2866 +2872 +2871 +2869 +2875 +2874 +2888 +2881 +2883 +2900 +2897 +2885 +2880 +2882 +2883 +2886 +2887 +2903 +2894 +2884 +2876 +2877 +2876 +2875 +2887 +2863 +2865 +2880 +2885 +2866 +2882 +2883 +2875 +2873 +2876 +2875 +2912 +2916 +2932 +2927 +2914 +2906 +2911 +2912 +2910 +2908 +2903 +2929 +2925 +2907 +2905 +2906 +2909 +2897 +2895 +2903 +2918 +2945 +2946 +2937 +2919 +2923 +2943 +2947 +2950 +2951 +2963 +2978 +2972 +2954 +2955 +2957 +2969 +2972 +2984 +2987 +2969 +2970 +2974 +2981 +2949 +2946 +2952 +2966 +2968 +2969 +2970 +2956 +2947 +2941 +2949 +2939 +2940 +2953 +2959 +2947 +2957 +2963 +2968 +2964 +2939 +2912 +2904 +2907 +2928 +2948 +2961 +2969 +2963 +2980 +2985 +2986 +2987 +3015 +3017 +3027 +3028 +3031 +3040 +3043 +3044 +3043 +3054 +3053 +3055 +3053 +3047 +3051 +3025 +3030 +3040 +3044 +3046 +3049 +3054 +3057 +3059 +3056 +3060 +3068 +3085 +3104 +3108 +3114 +3115 +3118 +3121 +3118 +3132 +3134 +3129 +3126 +3123 +3111 +3112 +3080 +3097 +3086 +3088 +3089 +3093 +3092 +3096 +3126 +3127 +3128 +3133 +3134 +3137 +3138 +3135 +3141 +3142 +3143 +3162 +3152 +3149 +3166 +3172 +3170 +3171 +3185 +3187 +3193 +3192 +3196 +3186 +3203 +3213 +3216 +3238 +3237 +3246 +3247 +3252 +3250 +3249 +3241 +3246 +3253 +3251 +3258 +3271 +3274 +3268 +3274 +3273 +3269 +3272 +3271 +3266 +3277 +3270 +3274 +3285 +3270 +3263 +3255 +3256 +3247 +3248 +3252 +3259 +3252 +3253 +3259 +3263 +3259 +3240 +3254 +3257 +3241 +3250 +3251 +3254 +3271 +3273 +3281 +3295 +3296 +3293 +3299 +3292 +3301 +3304 +3306 +3303 +3301 +3303 +3304 +3303 +3275 +3273 +3276 +3302 +3307 +3316 +3317 +3288 +3296 +3298 +3313 +3312 +3313 +3306 +3292 +3295 +3315 +3316 +3308 +3311 +3310 +3294 +3327 +3331 +3330 +3333 +3352 +3360 +3362 +3366 +3357 +3361 +3360 +3351 +3345 +3342 +3339 +3338 +3364 +3365 +3368 +3375 +3385 +3389 +3390 +3389 +3407 +3408 +3402 +3433 +3437 +3436 +3435 +3439 +3454 +3425 +3426 +3422 +3426 +3423 +3419 +3420 +3416 +3417 +3426 +3427 +3403 +3406 +3395 +3396 +3397 +3398 +3399 +3407 +3409 +3410 +3397 +3391 +3408 +3419 +3425 +3428 +3420 +3423 +3424 +3426 +3437 +3440 +3434 +3436 +3440 +3443 +3444 +3450 +3454 +3455 +3460 +3484 +3482 +3487 +3489 +3492 +3493 +3498 +3493 +3478 +3479 +3478 +3505 +3506 +3508 +3505 +3500 +3499 +3498 +3499 +3495 +3494 +3492 +3489 +3490 +3492 +3490 +3492 +3487 +3488 +3491 +3484 +3486 +3487 +3483 +3461 +3459 +3463 +3476 +3466 +3464 +3465 +3474 +3487 +3485 +3477 +3464 +3463 +3469 +3465 +3462 +3448 +3452 +3461 +3463 +3466 +3470 +3475 +3488 +3477 +3473 +3472 +3475 +3469 +3458 +3455 +3440 +3430 +3439 +3440 +3437 +3442 +3443 +3446 +3447 +3442 +3453 +3462 +3463 +3462 +3463 +3461 +3455 +3454 +3450 +3449 +3450 +3447 +3451 +3454 +3459 +3460 +3461 +3463 +3466 +3467 +3468 +3469 +3474 +3481 +3480 +3481 +3482 +3474 +3472 +3484 +3502 +3522 +3507 +3509 +3504 +3497 +3487 +3476 +3473 +3495 +3494 +3495 +3493 +3500 +3503 +3516 +3518 +3517 +3524 +3528 +3531 +3530 +3526 +3525 +3527 +3521 +3520 +3526 +3527 +3521 +3527 +3521 +3524 +3525 +3519 +3520 +3540 +3566 +3577 +3575 +3576 +3561 +3562 +3563 +3571 +3572 +3577 +3575 +3607 +3606 +3611 +3612 +3613 +3614 +3615 +3614 +3605 +3619 +3618 +3624 +3634 +3639 +3638 +3660 +3661 +3653 +3650 +3651 +3652 +3650 +3648 +3649 +3653 +3655 +3650 +3651 +3650 +3685 +3656 +3670 +3687 +3696 +3695 +3682 +3685 +3688 +3686 +3672 +3664 +3663 +3659 +3664 +3676 +3689 +3694 +3697 +3713 +3705 +3706 +3725 +3724 +3723 +3728 diff --git a/01-sonar-sweep/puzzle.md b/01-sonar-sweep/puzzle.md new file mode 100644 index 0000000..51b5be3 --- /dev/null +++ b/01-sonar-sweep/puzzle.md @@ -0,0 +1,3 @@ +### puzzle +find rate of increase of depth +count number of times a depth measurement increases from the previous measurement diff --git a/01-sonar-sweep/src/main.rs b/01-sonar-sweep/src/main.rs new file mode 100644 index 0000000..2839aff --- /dev/null +++ b/01-sonar-sweep/src/main.rs @@ -0,0 +1,52 @@ +#![allow(dead_code, unused_imports)] + +use std::{io::{stdin, Read}, str::FromStr}; + +fn main() { + let depths = read_depths(); + let mut n = 0; + let mut prev = 0; + let mut f: Option = None; + let mut p: Option = None; + let mut window; + for &depth in depths.iter() { + if f == None { f = Some(depth); continue; } + if p == None { p = f; continue; } + window = f.unwrap() + p.unwrap() + &depth; + // update variables that store prior 2 iterations state + f = p; + p = Some(depth); + if prev == 0 { + println!("{}, (no prior data)", window) + } else if window > prev { + n += 1; + println!("{}, (increased)", window); + } else if prev > window { + println!("{}, (decreased)", window) + } else { + println!("{}, (no change)", window) + } + prev = window; + } + println!("number of increases: {}", n); +} + +fn read_depths() -> Vec { + let mut s = String::new(); + stdin().read_to_string(&mut s).unwrap(); + let result = s + .lines() + .map(u32::from_str) + .collect::, _>>(); + result.unwrap() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn print_input() { + read_depths(); + } +} diff --git a/02-dive!/.gitignore b/02-dive!/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/02-dive!/.gitignore @@ -0,0 +1 @@ +/target diff --git a/02-dive!/Cargo.lock b/02-dive!/Cargo.lock new file mode 100644 index 0000000..7b1e04e --- /dev/null +++ b/02-dive!/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "dive" +version = "0.1.0" diff --git a/02-dive!/Cargo.toml b/02-dive!/Cargo.toml new file mode 100644 index 0000000..c106b20 --- /dev/null +++ b/02-dive!/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "dive" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/02-dive!/LICENSE b/02-dive!/LICENSE new file mode 100644 index 0000000..7fb39ed --- /dev/null +++ b/02-dive!/LICENSE @@ -0,0 +1,19 @@ +The MIT License (MIT) +Copyright (c) 2021 danielyrovas + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/02-dive!/directions.txt b/02-dive!/directions.txt new file mode 100644 index 0000000..83b7ae1 --- /dev/null +++ b/02-dive!/directions.txt @@ -0,0 +1,1000 @@ +forward 5 +down 8 +down 6 +down 7 +down 8 +forward 7 +down 3 +up 6 +forward 6 +down 2 +forward 5 +down 6 +up 3 +down 4 +forward 4 +down 6 +down 1 +up 5 +forward 5 +down 1 +down 7 +up 2 +down 7 +forward 1 +forward 6 +down 1 +up 1 +up 4 +forward 3 +forward 6 +forward 1 +forward 4 +up 3 +forward 1 +forward 4 +down 9 +forward 4 +forward 8 +up 8 +forward 5 +up 4 +up 3 +down 8 +forward 5 +down 4 +forward 1 +forward 7 +down 1 +forward 8 +down 4 +forward 2 +forward 7 +forward 9 +up 4 +down 3 +forward 7 +forward 6 +down 8 +forward 2 +forward 5 +forward 4 +down 6 +forward 6 +up 5 +down 3 +down 6 +down 5 +down 7 +down 8 +up 5 +down 5 +forward 5 +forward 4 +up 3 +down 7 +down 3 +forward 4 +down 2 +forward 4 +forward 3 +forward 4 +forward 9 +forward 6 +forward 8 +up 8 +down 8 +up 5 +down 4 +down 8 +up 7 +up 8 +down 6 +down 3 +forward 2 +forward 7 +up 1 +up 2 +forward 2 +down 7 +down 1 +up 9 +forward 6 +forward 4 +down 2 +up 6 +down 2 +down 1 +down 3 +up 6 +down 1 +down 8 +forward 7 +up 8 +forward 5 +forward 8 +down 8 +forward 6 +forward 8 +down 3 +down 4 +down 6 +up 2 +forward 6 +up 9 +forward 4 +forward 8 +up 4 +down 8 +forward 8 +down 8 +down 4 +down 5 +forward 7 +down 6 +down 6 +up 2 +up 1 +forward 7 +forward 8 +forward 4 +forward 9 +down 7 +forward 4 +up 5 +down 3 +up 4 +down 9 +down 2 +down 8 +forward 3 +forward 5 +forward 7 +forward 9 +forward 5 +forward 8 +forward 6 +forward 4 +forward 6 +forward 7 +forward 2 +down 1 +down 8 +down 4 +down 5 +down 6 +up 3 +up 2 +forward 4 +down 4 +forward 7 +up 6 +up 9 +down 1 +down 3 +down 1 +up 3 +up 1 +down 2 +up 5 +forward 1 +down 7 +forward 9 +down 4 +up 4 +down 6 +down 3 +forward 4 +up 6 +up 4 +forward 1 +up 7 +down 1 +down 7 +down 7 +forward 9 +down 3 +down 3 +forward 6 +down 2 +forward 7 +up 4 +up 8 +down 8 +forward 7 +forward 6 +down 7 +forward 5 +up 6 +up 6 +down 9 +up 6 +up 2 +forward 9 +forward 1 +up 5 +up 3 +down 9 +up 8 +down 7 +up 7 +forward 5 +down 7 +down 4 +forward 2 +forward 3 +forward 5 +down 1 +up 6 +down 6 +up 6 +down 8 +down 3 +down 4 +forward 9 +down 3 +forward 3 +up 1 +down 2 +forward 8 +down 7 +up 9 +forward 1 +down 3 +forward 1 +forward 8 +down 3 +forward 8 +forward 6 +down 1 +down 9 +forward 2 +down 1 +down 6 +up 1 +up 7 +down 9 +forward 6 +forward 5 +forward 2 +up 6 +down 6 +forward 6 +up 3 +down 7 +down 8 +forward 5 +down 7 +forward 8 +down 8 +forward 4 +down 6 +forward 4 +down 7 +up 5 +down 5 +down 5 +down 4 +down 3 +forward 8 +forward 1 +down 8 +down 2 +forward 3 +forward 7 +forward 3 +down 5 +down 6 +down 8 +down 6 +forward 9 +forward 4 +forward 8 +down 5 +down 7 +forward 4 +up 5 +down 8 +up 6 +up 7 +down 6 +down 8 +forward 3 +up 6 +forward 7 +down 4 +up 1 +up 8 +forward 3 +down 6 +down 1 +forward 7 +down 1 +down 9 +forward 6 +down 4 +forward 3 +forward 1 +down 5 +down 9 +down 9 +down 5 +down 8 +down 7 +forward 1 +forward 5 +down 2 +forward 2 +forward 1 +down 8 +forward 6 +down 3 +forward 4 +up 2 +up 8 +forward 7 +forward 4 +down 8 +up 6 +forward 3 +up 1 +up 2 +forward 5 +forward 9 +down 5 +forward 2 +forward 5 +up 6 +down 1 +down 1 +down 6 +forward 6 +down 7 +forward 5 +forward 8 +down 7 +down 5 +forward 9 +forward 1 +up 6 +down 7 +forward 1 +forward 4 +down 5 +down 6 +up 3 +up 8 +up 5 +down 8 +down 8 +down 6 +down 2 +down 3 +down 9 +forward 8 +forward 7 +forward 7 +up 5 +down 5 +forward 9 +up 8 +up 5 +forward 1 +down 9 +down 9 +forward 9 +forward 4 +forward 6 +up 9 +up 5 +up 3 +down 9 +up 7 +up 1 +down 3 +down 9 +down 7 +forward 6 +down 7 +forward 7 +forward 8 +down 2 +forward 5 +up 1 +down 6 +up 9 +forward 5 +up 9 +down 2 +down 3 +forward 5 +down 9 +forward 9 +forward 2 +forward 8 +down 1 +forward 8 +up 1 +forward 3 +up 1 +down 1 +forward 9 +down 2 +forward 2 +up 1 +up 8 +down 2 +down 7 +down 5 +up 2 +up 6 +down 9 +down 7 +down 7 +up 6 +up 8 +down 7 +forward 5 +down 4 +down 5 +up 8 +up 6 +down 6 +forward 6 +up 6 +down 1 +down 1 +down 1 +forward 1 +down 8 +down 4 +down 5 +down 2 +down 5 +up 8 +up 8 +down 3 +down 6 +down 1 +forward 6 +forward 5 +forward 1 +down 3 +down 4 +up 9 +down 3 +up 8 +forward 5 +down 5 +forward 2 +down 8 +down 2 +up 1 +forward 7 +up 8 +forward 7 +down 3 +down 1 +down 3 +forward 4 +down 5 +down 8 +forward 8 +forward 3 +forward 7 +down 7 +forward 4 +down 1 +forward 3 +up 2 +down 7 +down 1 +forward 4 +forward 7 +down 3 +down 1 +forward 4 +down 3 +forward 2 +up 9 +down 5 +down 9 +forward 5 +up 5 +down 3 +up 6 +up 8 +down 7 +down 3 +down 9 +forward 6 +forward 8 +forward 3 +down 6 +up 8 +forward 8 +forward 9 +down 4 +down 1 +forward 2 +down 2 +up 2 +down 5 +down 1 +down 3 +forward 4 +down 3 +up 8 +up 6 +up 5 +down 4 +forward 3 +up 6 +forward 6 +forward 2 +down 8 +down 5 +forward 3 +up 1 +forward 5 +forward 9 +forward 5 +down 5 +forward 3 +forward 6 +forward 5 +forward 3 +down 1 +down 1 +down 1 +down 9 +forward 8 +forward 2 +forward 4 +forward 8 +down 1 +up 8 +down 1 +down 6 +down 5 +up 8 +down 4 +forward 8 +forward 6 +down 6 +forward 2 +forward 7 +forward 2 +up 7 +forward 4 +up 1 +up 8 +down 3 +down 2 +down 3 +up 7 +down 9 +up 5 +down 1 +down 3 +up 5 +down 6 +up 9 +down 4 +down 7 +down 6 +down 4 +forward 5 +forward 6 +down 8 +forward 3 +forward 8 +up 5 +up 6 +up 8 +forward 8 +forward 1 +down 6 +forward 3 +forward 3 +forward 6 +down 3 +down 2 +forward 5 +down 5 +forward 6 +down 3 +down 9 +down 8 +down 6 +down 6 +forward 1 +up 5 +down 9 +forward 3 +forward 3 +down 2 +forward 8 +forward 3 +forward 2 +forward 5 +down 4 +down 1 +up 2 +down 1 +down 1 +forward 5 +down 7 +up 7 +down 9 +down 8 +down 6 +forward 3 +forward 5 +down 3 +down 6 +up 3 +up 2 +up 8 +down 3 +up 3 +down 6 +forward 7 +forward 4 +up 5 +forward 1 +up 3 +forward 8 +down 2 +down 5 +down 2 +forward 4 +forward 4 +down 4 +up 8 +down 1 +up 2 +forward 2 +forward 9 +forward 4 +down 3 +down 7 +forward 1 +down 2 +forward 8 +down 8 +forward 3 +down 7 +forward 9 +forward 6 +up 1 +forward 3 +up 2 +up 3 +forward 6 +down 8 +up 9 +down 2 +down 9 +down 6 +down 4 +forward 5 +forward 3 +up 7 +forward 7 +up 7 +up 6 +down 7 +down 2 +up 7 +down 5 +up 9 +forward 3 +up 6 +up 6 +up 6 +up 1 +forward 5 +forward 5 +down 8 +forward 6 +forward 7 +down 3 +down 4 +down 2 +down 4 +down 1 +forward 7 +down 7 +down 5 +forward 8 +up 6 +up 8 +forward 8 +forward 2 +forward 4 +down 6 +down 4 +down 2 +down 3 +forward 8 +forward 6 +down 3 +forward 7 +forward 4 +up 8 +down 9 +forward 5 +up 5 +up 5 +up 7 +forward 3 +up 1 +down 2 +forward 5 +forward 5 +up 1 +forward 4 +down 6 +up 5 +up 3 +forward 9 +down 9 +down 6 +down 1 +down 2 +down 4 +down 7 +forward 3 +up 5 +forward 2 +down 3 +forward 7 +up 8 +up 3 +forward 6 +up 7 +up 1 +up 2 +down 5 +forward 5 +down 3 +down 5 +down 6 +up 1 +down 2 +up 1 +forward 3 +down 3 +down 4 +down 6 +down 1 +down 3 +forward 9 +forward 1 +down 1 +up 3 +forward 4 +forward 7 +forward 4 +down 2 +forward 6 +forward 2 +forward 7 +down 9 +forward 8 +forward 3 +up 8 +down 9 +up 8 +forward 5 +forward 9 +down 4 +forward 1 +up 9 +forward 2 +down 6 +up 3 +forward 1 +forward 3 +forward 8 +down 7 +down 3 +down 5 +down 2 +down 2 +forward 4 +forward 1 +down 2 +up 8 +down 2 +forward 3 +down 2 +down 6 +down 1 +up 1 +down 7 +down 3 +forward 3 +forward 1 +forward 9 +down 9 +down 2 +up 1 +forward 9 +up 2 +down 2 +forward 3 +down 4 +forward 9 +forward 5 +up 5 +forward 2 +up 3 +forward 8 +down 3 +forward 5 +forward 5 +down 8 +up 9 +forward 7 +up 2 +up 2 +up 1 +up 7 +down 8 +forward 9 +forward 9 +up 6 +down 5 +forward 7 +down 9 +down 8 +down 5 +down 3 +down 2 +forward 6 +down 7 +forward 3 +up 5 +forward 1 +up 7 +forward 3 +down 5 +down 9 +down 8 +forward 2 +up 4 +forward 7 +forward 5 +forward 8 +forward 7 +up 7 +forward 4 +up 7 +down 9 +forward 1 +forward 3 +down 3 +forward 4 +down 3 +forward 3 +down 5 +down 1 +forward 6 +down 4 +down 3 +down 2 +up 1 +down 1 +down 6 +down 6 +forward 9 +down 5 +forward 1 +up 4 +forward 7 +down 8 +forward 1 +forward 9 +forward 7 +down 1 +down 3 +up 2 +down 5 +up 6 +forward 2 +up 2 +down 7 +down 9 +forward 3 +up 5 +up 7 +down 4 +forward 6 +down 8 +forward 7 +up 1 +up 4 +forward 4 +down 9 +forward 9 +forward 9 +down 3 +forward 5 +forward 1 +down 3 +down 8 +forward 7 +down 4 +forward 3 +down 3 +forward 8 +forward 2 +forward 6 +up 9 +forward 2 +down 9 +forward 2 +down 1 +forward 9 +up 1 +up 4 +up 1 +down 1 +forward 4 +up 9 +up 8 +down 1 +down 3 +down 2 +forward 9 +down 7 +down 4 +forward 2 +up 9 +down 7 +down 1 +down 9 +forward 2 +down 2 +forward 9 +down 5 +up 1 +down 3 +up 6 +down 4 +forward 8 +down 2 +down 2 +down 9 +forward 9 +forward 2 +down 1 +forward 6 +down 2 +up 4 +down 8 +up 4 +down 6 +down 2 +forward 7 +down 3 +up 3 +forward 1 +up 4 +forward 5 +down 7 +down 8 +forward 7 +forward 3 +down 5 +up 6 +down 7 +down 1 +up 7 +down 1 +forward 6 +forward 3 +forward 3 +forward 7 diff --git a/02-dive!/src/main.rs b/02-dive!/src/main.rs new file mode 100644 index 0000000..78cf3da --- /dev/null +++ b/02-dive!/src/main.rs @@ -0,0 +1,33 @@ +#![allow(dead_code, unused_imports)] +use std::fs::File; +use std::path::Path; +use std::io::{self, BufRead}; +fn main() { + let mut h = 0; + let mut v = 0; + let mut aim = 0; + if let Ok(lines) = read_lines("directions.txt") { + for line in lines { + if let Ok(val) = line { + println!("{}", val); + //shadow assignment + let val: Vec<&str> = val.split(' ').collect(); + let cmd = val[0]; + let n = val[1].parse::().unwrap(); + match cmd { + "forward" => {h += n; v += n * aim }, + "down" => aim += n, + "up" => aim -= n, + _ => println!("not a command"), + } + } + } + } + println!("h: {}, v: {}, final position: {}", h, v, h * v ); +} + +fn read_lines

(filename: P) -> io::Result>> where P: AsRef, +{ + let file = File::open(filename)?; + Ok(io::BufReader::new(file).lines()) +} diff --git a/03-binary-diagnostic/.gitignore b/03-binary-diagnostic/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/03-binary-diagnostic/.gitignore @@ -0,0 +1 @@ +/target diff --git a/03-binary-diagnostic/Cargo.lock b/03-binary-diagnostic/Cargo.lock new file mode 100644 index 0000000..5820ae6 --- /dev/null +++ b/03-binary-diagnostic/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "binary-diagnostic" +version = "0.1.0" diff --git a/03-binary-diagnostic/Cargo.toml b/03-binary-diagnostic/Cargo.toml new file mode 100644 index 0000000..4c2b6fa --- /dev/null +++ b/03-binary-diagnostic/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "binary-diagnostic" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/03-binary-diagnostic/LICENSE b/03-binary-diagnostic/LICENSE new file mode 100644 index 0000000..7fb39ed --- /dev/null +++ b/03-binary-diagnostic/LICENSE @@ -0,0 +1,19 @@ +The MIT License (MIT) +Copyright (c) 2021 danielyrovas + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/03-binary-diagnostic/diagnostics.txt b/03-binary-diagnostic/diagnostics.txt new file mode 100644 index 0000000..7320494 --- /dev/null +++ b/03-binary-diagnostic/diagnostics.txt @@ -0,0 +1,1000 @@ +111100000101 +001110100010 +101110110011 +100000001101 +001101010011 +101111110000 +011101110001 +000000010111 +011011000010 +110110010000 +011101000000 +110010001001 +101110100111 +001001101111 +101001011010 +101001000001 +101110111101 +010100101100 +001000110010 +010100011110 +100100000001 +000110011000 +110100100001 +111000110000 +000111100100 +101100110100 +101111101001 +101110101001 +010010110001 +000111100001 +001100001000 +100011101001 +100010111000 +000001011000 +001011110100 +011110010001 +110000011010 +100011011111 +001001110101 +001010000101 +100000010010 +000011100010 +101010110101 +001110000101 +000111101101 +010100101010 +101111101011 +010001100000 +110101100010 +001001001111 +001101011010 +111010010101 +110001000011 +000011110100 +100010111101 +111100101110 +110110001101 +001000011011 +101110101110 +111011101110 +010000110001 +101111011111 +000001001110 +111101100011 +000100000000 +100001001111 +110010000010 +101111010011 +010000101000 +011010101111 +110101101100 +101101011100 +100101111101 +011101011110 +111001001000 +100111001101 +101101000100 +110111111010 +011001101001 +111101010110 +001111001110 +111100010111 +000100111100 +011100101001 +111100111100 +101000011100 +011100111100 +011010110010 +101111101101 +010111101010 +001011000111 +000010011111 +101000100110 +000100110101 +100101001100 +010100110110 +011111100110 +000000101011 +111111101110 +001011101101 +000010001101 +001100100100 +101010010111 +100010011001 +010100000110 +010000001101 +010001101011 +000111111001 +101110010010 +011100101000 +010101010001 +111011110111 +000010110001 +101111000111 +001101110000 +111111011011 +100010011010 +001011011010 +110111001001 +110101110100 +101100111100 +011110101010 +010000001010 +001111100001 +000110000110 +111010111010 +101110100100 +000001110010 +110111001101 +000001101000 +000010001111 +110000100011 +000000001001 +000111111110 +111101111010 +010110101010 +110101011111 +000111000110 +111001100001 +101111100000 +011011010111 +101011010111 +110011101111 +001110001111 +010001100100 +111001010000 +100111000100 +110101010100 +000011111101 +100010010000 +110110100100 +100111011110 +101011001101 +111011100110 +100000010000 +110000001111 +001000000111 +111011011011 +101111101000 +001110001010 +100110000000 +110001100110 +011110100010 +000001010110 +010100000101 +101010101010 +001101000110 +110100001111 +110000001101 +101101000000 +101101101011 +111001100101 +101010001111 +101101001101 +010111101011 +101000101101 +001010000111 +011110111001 +001011101000 +101101000010 +110111111110 +110001011011 +101111101100 +101110110101 +101100111101 +001110001101 +010111000110 +110101110110 +101001101001 +010100001000 +011011111110 +111010010001 +101110100000 +000101111100 +001111110111 +001010110011 +010011011001 +101111100001 +100101111110 +010001010011 +001101110001 +011100001000 +101100000101 +000111111101 +010101110000 +100110001100 +010101111100 +100101110100 +110111000001 +101110101000 +000011010000 +101011110101 +100011110100 +111100010110 +110100011001 +001001001100 +010110111000 +001000101111 +111101001110 +011110000011 +000111000100 +001101110101 +110111011101 +100000111001 +100000001001 +110110111011 +010011000110 +000100010101 +100101010001 +100100101100 +010001001100 +000010001010 +101100101101 +011011101111 +100010111011 +111111101111 +110001100001 +101011101111 +000100011101 +111000010001 +000001011001 +001101111101 +001000000001 +010100010100 +110010111011 +010100100011 +001010001010 +111111011010 +100101010101 +000111000010 +011010100000 +010100111111 +001011100010 +101010001011 +111011010101 +100100100111 +101110101010 +111100101001 +111010001000 +000100001111 +011010001000 +011011100100 +110011011111 +110111100010 +000100001100 +001001101101 +110111110011 +101111001001 +101010001001 +011011000111 +000110001001 +111011001010 +000110000100 +000000111011 +010110110110 +101000000000 +011100101111 +111101111000 +001110011100 +111110011001 +000010111000 +010111001100 +010010111111 +110101100111 +000110111010 +000001111110 +111000000000 +001110011101 +100000111100 +100010100001 +010011101100 +010001101010 +001001101011 +110100010100 +011000000110 +011000011001 +010001101111 +000101001111 +011101111101 +100010010011 +100101111000 +001101110111 +001000000000 +100100101011 +111000100011 +101100011011 +000000101101 +001110010011 +001010010000 +011000001110 +101011111001 +110101100000 +011011111010 +001000011111 +011000100000 +000010101100 +111100010011 +101010000011 +001100111111 +000001111000 +111101110101 +001010100111 +011100111111 +111010111000 +100101011111 +011100001101 +001011000011 +110001110110 +000011101000 +111110010111 +100010101101 +110001011101 +011010100010 +001110000011 +101001101111 +100110100100 +011010000111 +001111010011 +110111101111 +110101100101 +100011010000 +011110000100 +010110100010 +011000111001 +011111011010 +011110110101 +011011110111 +001111100101 +101110100110 +101010100000 +110100001100 +111010110101 +011010001111 +000010111110 +100110010111 +011100011011 +100101100011 +010110111100 +010011110111 +111001011101 +000011111100 +000111111111 +101000111010 +010110110011 +100110101111 +100010111010 +111001111111 +000110110011 +010010111101 +110001100011 +111100001000 +010011000011 +011011101011 +001010101101 +100011010011 +001100101110 +111000111111 +101001011101 +111011010011 +110101011101 +001011010111 +011001010100 +010011010100 +011100100110 +101111110001 +110111111101 +111110100110 +110001100000 +010110010011 +011100110001 +010111111011 +001010101000 +010100101111 +111101000001 +100000111010 +001010100000 +000001011011 +100111011101 +100011110010 +011111010000 +111001010110 +110111111100 +010110100011 +101111111010 +110111110000 +111100000110 +111101011110 +100101111100 +111110001101 +111110011110 +010101100010 +110101101101 +111100001101 +000100011100 +010011110011 +000100010100 +000110110010 +001010111000 +110111001111 +110101000101 +100011110000 +101010010010 +111110000010 +111011001011 +010110111010 +011101010100 +010010101010 +010011110001 +010000010110 +101111000011 +111111010100 +001111001001 +101001100111 +000011011111 +100111000001 +010111010110 +010100011100 +010100011101 +001111110011 +101100010111 +101110100010 +111101110100 +100100100010 +111010011011 +010110000100 +100100010100 +101000011010 +101001111101 +010000010001 +110111101101 +000001110110 +010001110100 +100100110001 +011111010111 +100000000110 +100001110110 +000001011110 +011000001100 +011001110110 +010010101110 +111100111000 +001010010011 +000001000001 +100010111001 +010001011111 +001110000000 +000010000000 +001101110011 +010100011001 +000001001010 +110001000110 +100010100101 +011100010001 +101100000110 +001001100000 +110100000000 +000010100010 +101101100111 +100001111011 +011000011101 +110100110010 +001011001101 +000111001110 +011100100100 +100010000100 +001101100000 +100010011111 +010101010111 +000101010011 +100011100000 +100001011101 +110011111100 +111010011001 +001011110111 +011010010100 +000011001110 +010110111001 +111000001001 +011100111010 +011111000010 +101100111010 +010100111101 +111001100100 +101111010110 +110111110100 +111110101010 +010011001110 +110101101001 +111101011000 +001010001101 +101111000010 +111110000111 +110000001100 +011111001101 +101001000101 +010111001011 +001010011110 +111010100100 +110000101000 +011101000011 +010010100110 +111010000001 +111101000111 +001010100101 +101011001100 +110010111001 +111000111100 +100101011101 +110010101001 +010010111000 +010101001110 +110000101111 +001101001101 +001000101011 +001110110111 +101111111011 +111001100110 +100101110000 +010000011011 +001010000000 +011001010110 +010101101010 +100100000011 +110010101110 +110011101000 +001010001000 +010000101100 +100110011110 +001010001111 +111010001101 +100100010000 +100100111001 +111111010110 +100010011101 +110100100100 +000110011101 +000101101001 +001011001100 +101000000001 +111101100000 +110110111000 +111111000010 +001010111011 +011011111000 +010111000101 +011100110011 +111111100010 +000000100010 +001000011110 +010001011001 +111100111101 +001111010010 +010110011011 +111110001110 +101111100100 +011100011101 +111001111001 +101001000100 +001011000110 +100011010101 +001101100010 +110111101110 +010101111000 +111010000111 +000110010111 +001100111101 +100000101101 +000110101000 +011000011100 +000101001110 +011010101100 +100010010100 +001001111001 +101100100000 +010011011000 +100110101011 +110111110110 +100111001100 +111010010011 +000100011110 +011100011000 +010000011001 +100110011010 +010000001000 +101010011010 +111111011100 +010110100111 +000110001101 +001011111000 +011010111001 +111011011101 +110000010110 +100110111001 +110010000001 +110001011110 +111100001010 +101110111100 +110011110100 +101111011101 +000101010010 +001111000110 +110010011010 +000010010001 +001110110110 +111101100101 +000000111101 +011110000110 +111011001101 +110111000110 +101100110101 +010001001001 +001010110101 +101100011010 +100011001010 +001011101110 +101000010110 +100100111011 +001011101100 +111110111010 +110011111010 +000001111101 +010000110111 +101101101100 +000110000000 +111110110100 +101100000010 +011000000001 +001000001001 +111101111011 +010100001110 +111100101000 +011000010111 +001000111101 +100000100101 +110111000101 +001111100000 +101110111001 +000100101111 +101011010100 +101111111001 +000010000101 +001100001111 +101001011001 +001110111000 +010011011101 +110110111001 +011111010010 +100111101011 +101110011000 +010011100110 +101111000000 +101000110111 +001100000111 +110001101111 +010011101010 +100100000111 +100011111101 +010111010010 +001010111010 +011111010110 +101101100101 +011110001000 +000100111111 +001010111100 +101101100000 +010010000011 +010011010111 +111000011110 +110111010101 +100100101000 +101001001000 +001111110100 +111011110101 +110001000100 +100111111001 +101010110100 +010111101001 +011011010010 +011111101010 +111100111110 +110011101101 +110110101101 +110010100101 +111110101111 +000011110011 +001100001011 +111110110111 +011011101100 +110111101011 +010111010000 +101000010111 +010100010001 +111101100100 +011101101010 +010000110110 +111001110000 +111111000100 +011001100000 +111100101111 +011001001011 +110100100011 +011001111000 +101010001100 +100010001110 +010111110110 +001011011111 +000001011100 +010010001111 +011101011000 +001010011010 +100010011110 +010011000111 +101011011111 +100101000010 +110111010111 +110111101010 +010100001011 +001001010011 +001011001111 +011000001111 +010100000111 +100011001111 +110100111100 +101110010000 +000010110010 +100010100010 +001010011000 +010101100101 +101100010001 +011011001010 +000101100000 +000101111010 +001001110010 +100011100001 +011110111011 +100000010111 +100001001101 +111000100010 +011000011000 +100001100010 +000000110011 +000101010111 +000101000100 +110111000111 +001100000000 +110100010110 +101001000011 +110111100100 +000111100011 +101110001001 +000010011101 +000011010111 +111101011001 +111010001111 +000100110100 +000011100001 +100100111000 +100111101110 +001110101011 +000111110100 +110000010111 +110010011111 +000001111111 +101011110011 +101100001101 +110101111011 +011111000111 +011110011011 +001000010110 +110110110100 +010101001011 +000100111000 +011101111111 +000111101001 +110101111010 +110000111001 +011000111101 +001101001010 +110100110100 +100110010001 +100000000100 +001100111000 +100000001110 +101000011000 +100010110110 +101011001001 +010010001010 +111011101100 +100010100110 +101101000111 +100110110101 +111001010100 +101000110000 +000101011010 +010001010110 +010111011110 +001101011110 +000100000101 +000001011101 +010010100000 +110110010001 +100111000111 +100010110000 +010110100000 +110111111111 +011111011111 +001011010010 +001111100011 +100010110100 +011010001011 +110011001010 +101110111000 +111001010011 +010011010101 +011100100101 +101010110011 +001001100101 +110010100000 +011000111110 +011101001110 +110110000100 +001111101100 +101100010100 +110001100101 +111111010001 +011001100001 +110100000101 +000000010000 +110101000111 +100100110100 +010010110100 +010010000100 +011000111111 +011001101010 +011111101110 +110110010100 +110001001110 +111111100011 +010001100001 +001001111011 +000101110010 +011111110111 +000011000110 +110101000001 +101110000011 +000000111010 +000101110011 +000011100111 +010010010011 +110011011010 +111100100100 +110010011101 +100001001000 +101000110001 +101001010011 +111000111101 +101011111000 +110011110110 +111110100011 +010110100100 +010101000011 +001010101100 +101010101001 +111100100000 +001111011111 +110101010011 +101111010000 +110011110010 +110110110001 +011010011110 +100010010101 +101000101010 +010111010001 +000001111100 +001000011001 +011110110001 +110100011000 +110000111110 +001001011100 +110110110101 +011011100110 +011110010100 +111011110110 +111110111001 +111010010100 +001000001011 +111101010011 +100111101010 +010100001100 +111101111111 +000111111000 +001010011101 +100000001011 +010010001110 +011011011101 +100000000111 +100101100100 +001110000010 +000000000000 +101000110100 +011010110001 +100001101110 +110001110011 +101100010000 +001111111111 +111110110101 +010111001101 +011001000001 +111110011100 +100100011010 +001000011000 +011101101100 +100110111111 +111011011010 +101001101000 +010011110000 +110010110011 +111000000001 +101101110110 +111000001101 +011111001001 +010010110101 +001100010101 +111011110010 +100011000101 +111010000100 +011001111101 +111010011110 +111011111011 +110110011010 +011111011011 +010010001100 +110100111110 +010100111011 +110110011101 +110011010000 +110001001010 +000011000111 +100011101101 +101010100010 +110111001010 +100101101110 +111100101010 +110001011001 +011010011001 +000001111010 +001010101010 +010001110000 +001001111100 +011110000010 +000100010001 +110100000110 +010110111011 +001100111100 +111100011000 +011011011010 +111001001010 +110110100111 +001011000000 +000001110001 +101100011100 +100011000011 +001100010001 +000100111011 +001001110011 +100111111100 +111010001001 +101001000110 +001101000100 +110000000100 +111010110011 +000101110000 +010000010101 +000110111001 +100100100000 +110010001011 +110111100011 +101101101001 +100001100100 +000111010100 diff --git a/03-binary-diagnostic/src/main.rs b/03-binary-diagnostic/src/main.rs new file mode 100644 index 0000000..b97c070 --- /dev/null +++ b/03-binary-diagnostic/src/main.rs @@ -0,0 +1,62 @@ +#![allow(dead_code, unused_imports)] +use std::fmt::Binary; +use std::fs::File; +use std::path::Path; +use std::io::{self, BufRead}; + +fn main() { + let mut data: Vec> = Vec::new(); + if let Ok(lines) = read_lines("diagnostics.txt") { + let mut vecinit = false; + for line in lines { + if let Ok(l) = line { + if !vecinit { + for _ in l.chars() { + data.push(Vec::new()); + } + vecinit = true; + } + //println!("{}", l); + let mut i = 0; + for c in l.chars() { + data[i].push(c as u32 - 48); + i += 1; + } + } + } + } + let mut gama = Vec::new(); + for line in &data { + gama.push( + if line.iter().sum::() < data[0].len() as u32 / 2 { + 0 + } else { + 1 + } + ); + } + let lifesupport = if data[0].iter().sum::() < data[0].len() as u32 / 2 { + 0 + } else { + 1 + }; + let co2scrub = if data[0].iter().sum::() > data[0].len() as u32 / 2 { + 0 + } else { + 1 + }; + println!("{}:{}", lifesupport,co2scrub); + let mut gamarate = 0; + let mut epsilonrate = 0; + for i in 0..gama.len() { + gamarate += (2_u32.pow(i.try_into().unwrap())) * gama[gama.len() - i - 1]; + epsilonrate += (2_u32.pow(i.try_into().unwrap())) * if gama[gama.len() - i - 1] == 1 { 0 } else { 1 }; + } + println!("power consumption: {}", gamarate * epsilonrate); +} + +fn read_lines

(filename: P) -> io::Result>> + where P: AsRef { + let file = File::open(filename)?; + Ok(io::BufReader::new(file).lines()) +} diff --git a/04-giant-squid/.gitignore b/04-giant-squid/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/04-giant-squid/.gitignore @@ -0,0 +1 @@ +/target diff --git a/04-giant-squid/Cargo.lock b/04-giant-squid/Cargo.lock new file mode 100644 index 0000000..74be640 --- /dev/null +++ b/04-giant-squid/Cargo.lock @@ -0,0 +1,16 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anyhow" +version = "1.0.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b26702f315f53b6071259e15dd9d64528213b44d61de1ec926eca7715d62203" + +[[package]] +name = "giant-squid" +version = "0.1.0" +dependencies = [ + "anyhow", +] diff --git a/04-giant-squid/Cargo.toml b/04-giant-squid/Cargo.toml new file mode 100644 index 0000000..b267570 --- /dev/null +++ b/04-giant-squid/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "giant-squid" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +anyhow = "1.0.51" diff --git a/04-giant-squid/bingo.txt b/04-giant-squid/bingo.txt new file mode 100644 index 0000000..788b56b --- /dev/null +++ b/04-giant-squid/bingo.txt @@ -0,0 +1,601 @@ +94,21,58,16,4,1,44,6,17,48,20,92,55,36,40,63,62,2,47,7,46,72,85,24,66,49,34,56,98,41,84,23,86,64,28,90,39,97,73,81,12,69,35,26,75,8,32,77,52,50,5,96,14,31,70,60,29,71,9,68,19,65,99,57,54,61,33,91,27,78,43,95,42,3,88,51,53,30,89,87,93,74,18,15,80,38,82,79,0,22,13,67,59,11,83,76,10,37,25,45 + +49 74 83 34 40 +87 16 57 75 3 +68 94 77 78 89 +56 38 29 26 60 +41 42 45 19 1 + +42 35 10 20 9 +49 39 40 41 73 + 3 48 91 81 88 +59 55 82 58 71 +61 51 17 26 72 + +31 49 21 84 83 +18 86 53 75 29 +85 2 51 76 52 +48 28 24 69 12 + 5 87 67 95 82 + +54 21 0 63 13 +84 29 27 12 82 +55 86 33 90 95 +72 96 24 88 37 +38 51 35 46 50 + +24 1 23 62 97 +53 72 99 59 81 +54 26 93 63 20 +79 41 2 86 98 +84 13 87 33 96 + +36 85 51 32 84 +41 70 65 86 73 +94 28 80 81 59 +96 82 7 10 83 + 8 21 29 91 16 + +56 36 87 10 35 + 8 90 37 22 96 +24 82 30 50 86 +70 52 55 51 57 +26 41 61 46 65 + + 6 28 71 21 50 +61 92 19 17 79 +85 69 63 32 41 + 8 36 37 38 83 +13 45 88 77 78 + +55 61 34 72 65 + 8 92 39 27 86 +69 16 66 94 53 +35 41 50 1 42 +31 43 3 85 59 + +55 78 47 85 50 +80 15 98 42 63 + 2 68 37 24 45 + 8 99 33 89 20 +35 28 60 5 34 + +76 4 33 91 0 +98 97 39 51 5 +43 86 58 63 93 +16 67 88 50 19 + 2 68 17 26 89 + +20 57 93 41 35 +76 7 14 58 54 +85 51 24 40 38 +47 13 82 29 10 + 9 21 8 87 17 + +65 82 87 15 49 +43 37 53 6 93 +89 83 66 84 33 +58 41 44 8 91 +23 1 73 5 26 + + 2 27 51 80 5 +88 17 32 75 0 +10 38 78 56 25 +48 11 63 73 50 +57 9 67 86 31 + +35 47 63 9 13 +12 14 82 37 32 +49 74 79 90 10 +22 50 41 46 15 +39 56 19 42 21 + + 6 48 3 2 95 +57 40 86 4 21 + 1 23 65 76 90 +47 63 29 58 49 +77 36 71 55 83 + +31 1 98 47 99 +85 56 81 29 76 +14 46 12 62 83 +86 45 74 73 32 +17 9 59 26 21 + +89 72 83 48 3 +81 34 27 42 41 +90 22 95 85 36 +44 45 31 73 57 +19 60 50 29 75 + +93 2 26 35 39 +91 7 85 69 62 +55 4 27 57 10 +92 44 30 73 22 + 6 58 16 36 9 + + 6 42 55 24 8 +19 43 2 21 90 +99 89 48 60 58 +72 87 1 66 63 +53 16 71 20 28 + +98 82 4 29 95 +40 63 71 64 96 +41 76 93 58 66 +30 36 28 59 74 +92 1 91 39 65 + +96 78 45 44 3 +53 29 75 51 64 +19 84 41 30 60 +86 47 99 71 42 +95 23 40 43 22 + +70 26 4 34 15 +66 51 12 16 36 +28 11 77 61 87 +27 75 38 65 31 + 6 33 56 10 76 + + 9 74 75 61 55 +63 49 29 48 44 +65 12 45 17 31 +43 71 88 96 57 +20 42 34 99 21 + +15 11 32 26 51 +23 20 19 14 82 +75 60 0 18 59 +30 66 40 57 47 +77 44 37 80 61 + + 3 40 26 25 33 +18 80 72 28 16 + 9 46 50 91 93 +88 13 52 1 65 +70 27 78 43 39 + +35 77 7 49 72 +59 8 87 60 15 +38 81 71 24 20 +50 54 94 31 75 +68 2 11 27 64 + +45 39 55 51 30 +56 0 2 28 10 +43 32 46 80 98 +15 82 17 92 89 +73 62 93 33 40 + +21 94 54 29 24 +40 35 73 43 77 +80 14 2 76 31 +17 11 8 42 45 +46 78 59 99 55 + +92 24 9 39 4 +55 20 17 65 99 +67 86 72 6 38 +53 51 27 63 93 +48 95 83 66 85 + +26 68 60 15 41 +32 55 33 71 63 +92 22 70 20 78 +85 89 29 27 84 +98 91 36 23 6 + +77 71 11 12 24 +98 85 36 29 35 +80 51 88 25 81 +23 9 33 61 48 + 5 66 94 54 10 + +89 67 34 98 57 + 4 20 80 83 28 +63 77 66 5 47 + 8 36 43 45 41 +81 18 90 91 15 + +20 93 58 27 99 +45 47 59 9 23 +25 71 14 48 62 +95 7 69 41 90 +53 1 10 98 70 + + 1 4 67 24 48 +53 88 77 70 86 +99 30 23 61 27 +82 95 73 37 78 +47 92 13 94 0 + +94 8 19 74 24 +10 60 2 65 18 +31 22 16 25 32 +75 4 86 55 26 +93 47 98 43 44 + +58 39 34 69 79 +88 78 85 84 23 +89 63 29 28 40 +37 83 56 74 32 +24 73 61 7 35 + +46 35 27 49 81 +92 41 33 64 5 +13 6 96 66 85 +76 3 19 17 2 +82 30 88 0 39 + +46 2 1 82 72 + 9 14 36 95 70 +56 65 13 35 28 +38 59 62 21 19 +99 77 16 52 8 + +74 94 50 56 7 +60 18 83 87 21 +85 42 64 53 40 +43 30 67 41 68 +32 63 97 82 9 + + 6 16 58 70 86 +42 28 51 38 54 +88 46 90 83 36 +65 24 95 63 52 +94 25 84 5 71 + +10 84 5 18 34 +76 46 82 49 98 +74 99 29 11 41 +42 92 20 64 39 +91 85 79 32 52 + +67 68 72 43 14 +86 5 24 40 70 +57 12 92 0 98 +60 58 15 13 2 +17 51 6 3 74 + +50 27 68 12 80 +79 26 17 59 86 +57 29 82 70 71 +93 6 78 39 24 +72 53 23 49 98 + +69 27 19 18 54 + 6 38 34 41 49 +17 94 93 25 86 + 1 45 60 44 62 +31 72 59 83 36 + +45 33 42 91 39 + 6 77 32 21 27 + 9 92 30 2 43 +89 79 86 11 83 +23 94 76 65 1 + +78 16 22 80 75 +42 61 8 35 93 +62 59 66 79 13 +44 77 7 87 68 +74 14 52 65 19 + +60 24 88 7 29 +95 33 36 81 71 +67 39 2 49 37 +78 25 28 35 93 +20 3 12 99 6 + +49 99 87 89 85 +86 63 42 38 68 +46 19 94 60 65 +18 51 8 0 3 +64 77 23 35 16 + +95 22 33 57 64 +12 37 75 6 74 +76 16 86 15 48 +70 99 24 19 52 +47 65 46 32 8 + +82 71 28 64 46 +88 90 85 69 84 +33 86 7 27 10 +45 48 0 31 99 +37 4 77 29 49 + +69 33 73 50 26 +24 41 15 91 78 +95 47 70 23 19 +80 14 60 56 3 +55 58 8 43 16 + +64 76 70 0 4 +58 26 95 88 53 + 1 45 50 97 93 +30 65 31 6 81 +12 11 74 68 94 + +13 14 60 87 56 +69 3 64 29 57 +24 86 78 21 15 +33 25 70 67 38 +22 73 11 50 96 + +73 15 22 78 63 +48 51 6 39 20 +11 91 12 0 65 + 2 90 19 64 43 +42 89 71 10 31 + +48 5 78 25 89 +82 57 32 80 60 +13 21 88 76 65 +38 72 53 4 51 + 0 31 20 17 36 + +41 71 27 24 58 + 3 54 43 36 75 + 7 1 39 59 95 +99 97 18 40 96 +50 61 49 69 31 + +58 93 37 23 25 +88 81 45 50 33 +76 97 4 21 72 +56 2 98 78 51 +32 17 19 29 6 + +73 91 87 49 74 +99 45 24 76 77 +44 67 3 60 27 +36 62 94 96 57 + 0 16 48 54 92 + +90 7 66 65 1 +27 42 3 11 26 +63 95 69 53 29 +43 12 52 37 96 +84 13 41 36 35 + +10 5 54 4 16 +51 17 22 49 3 +86 65 40 58 47 +71 69 20 7 98 +75 57 97 74 35 + +31 53 17 88 12 +74 39 59 82 68 +46 23 13 28 76 + 0 89 48 43 37 +34 50 86 19 66 + +70 82 88 32 9 + 7 15 38 56 62 +91 25 49 78 77 +40 42 44 79 18 + 1 84 28 73 97 + +67 38 62 93 81 + 1 63 17 86 90 +55 66 6 39 13 +72 80 5 70 11 +30 71 96 14 73 + +73 29 93 64 48 + 9 41 70 57 46 +33 92 78 82 91 +90 4 87 43 56 +83 28 59 85 8 + +23 99 26 4 56 +79 39 31 82 92 +17 20 44 70 35 +48 71 95 53 1 +97 24 41 91 87 + +93 61 95 53 27 +54 49 74 16 82 +30 17 59 64 79 + 4 28 36 9 38 +58 80 44 85 45 + +92 28 76 97 45 +93 34 3 75 81 +15 14 67 64 80 + 1 68 84 83 25 +19 20 56 78 58 + +98 38 94 26 30 +32 66 59 41 52 +40 37 73 18 39 +58 4 55 19 27 +62 69 51 44 77 + +48 4 3 60 11 +81 76 10 0 80 +41 93 25 53 49 +14 21 85 38 45 + 5 89 12 98 74 + +10 18 21 71 94 +14 64 44 83 47 +78 11 5 29 6 +56 36 85 73 26 +62 30 35 7 39 + +32 31 71 52 12 +62 35 44 95 68 +67 29 15 85 9 +27 72 58 21 93 +11 54 40 41 37 + + 7 45 74 17 9 +99 16 84 63 61 +44 21 59 69 66 +11 39 80 19 72 +89 58 81 42 87 + +91 84 78 7 95 +24 3 85 20 16 +29 38 52 41 21 +37 23 56 73 54 +11 47 5 65 51 + +93 94 24 74 88 + 9 72 82 6 73 +92 12 97 34 71 +35 3 0 2 19 +55 38 67 26 50 + +56 22 52 96 72 +21 67 65 37 64 +99 76 51 39 24 +90 4 57 75 47 +40 32 44 83 34 + +90 58 56 43 94 +99 61 95 18 72 +86 20 47 89 53 +97 38 0 39 93 +85 98 62 21 5 + +68 20 23 1 63 +37 97 47 30 70 +66 35 46 36 2 +29 87 82 59 10 +12 5 39 73 99 + + 1 82 87 52 42 +65 74 46 92 56 +25 29 26 34 51 +20 10 39 81 32 +12 11 89 18 27 + +94 36 29 72 10 +34 47 77 83 18 +38 76 6 48 97 +41 90 61 69 78 +14 74 66 55 33 + +78 25 8 24 74 +60 53 80 50 48 +66 92 55 17 3 +77 95 18 35 34 + 5 11 70 1 82 + +58 91 5 63 35 +99 37 76 90 73 +20 50 67 61 17 +13 62 54 32 21 +47 30 94 68 49 + +16 1 38 84 56 +53 79 14 17 47 +23 97 61 24 65 +83 89 4 29 90 +94 57 50 22 31 + + 9 50 63 65 17 + 8 22 66 4 19 +89 71 24 70 68 +47 1 56 6 40 +62 46 75 43 37 + + 2 15 10 18 14 +45 34 35 77 20 +76 55 48 28 26 +80 65 68 19 84 + 1 94 40 85 11 + +80 47 69 78 37 +88 10 95 86 96 +28 14 98 20 35 +16 6 8 50 38 +51 26 53 9 54 + +93 75 53 1 16 +30 66 76 19 51 +69 22 28 31 7 +15 36 96 17 97 +92 23 45 26 48 + +96 13 63 81 65 +39 47 48 5 31 +64 20 95 61 60 + 4 83 55 97 14 +92 45 88 99 79 + +11 35 56 27 50 +85 40 71 88 99 +59 39 84 44 43 +22 19 10 12 98 +13 7 76 23 21 + +94 67 79 35 47 +83 77 3 11 15 +74 10 70 14 44 +76 5 80 46 71 +20 36 53 88 40 + +34 24 12 63 47 +32 96 67 40 82 +42 7 87 61 10 +70 14 65 88 74 +92 9 53 60 56 + +43 38 91 30 72 +20 3 64 80 32 +90 37 28 4 14 +96 11 6 84 68 +58 60 45 61 47 + +45 11 65 41 46 +29 33 56 26 3 +21 90 42 96 27 +94 17 32 92 25 +43 99 36 70 87 + +52 99 88 76 66 +75 81 48 2 96 +55 59 39 97 34 +77 37 6 82 47 +64 29 32 19 86 + + 4 20 57 61 8 +28 33 42 30 86 +34 65 14 40 46 +43 49 37 22 39 +71 18 11 85 92 + +68 51 39 93 1 + 9 82 35 67 81 + 3 12 29 6 83 +58 73 97 26 20 + 2 28 99 64 77 + +88 41 91 98 89 +82 1 37 10 14 +52 44 90 34 21 +76 27 43 54 49 +31 84 46 57 77 + +73 99 79 76 43 +82 17 14 68 87 +39 53 21 7 81 +94 45 35 48 32 +67 49 62 63 23 + +99 0 85 12 83 +30 45 67 76 87 + 7 39 57 66 98 +13 82 46 28 24 +25 15 90 68 51 + +69 30 73 61 99 +12 13 7 53 20 + 8 18 28 82 67 +95 79 96 51 29 +56 31 92 54 57 diff --git a/04-giant-squid/src/main.rs b/04-giant-squid/src/main.rs new file mode 100644 index 0000000..129f9b0 --- /dev/null +++ b/04-giant-squid/src/main.rs @@ -0,0 +1,18 @@ +#![allow(dead_code, unused_imports)] +use std::str::FromStr; +use anyhow::Result; + +fn main() { + println!("Hello, world!"); +} + +fn read_one_per_line(path: &str) -> Result> +where + T: FromStr, +{ + Ok(std::fs::read_to_string(path)? + .lines() + .filter_map(|line| line.parse::().ok()) + .collect()) +} + diff --git a/2021/.gitignore b/2021/.gitignore new file mode 100644 index 0000000..96ef6c0 --- /dev/null +++ b/2021/.gitignore @@ -0,0 +1,2 @@ +/target +Cargo.lock diff --git a/2021/Cargo.toml b/2021/Cargo.toml new file mode 100644 index 0000000..f09e66a --- /dev/null +++ b/2021/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "advent-of-code-2021" +version = "0.1.0" +edition = "2021" + +[lib] +name = "aoc" +path = "src/lib.rs" +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +anyhow = "1.0" +itertools = "0.10" diff --git a/2021/data/1.depths b/2021/data/1.depths new file mode 100644 index 0000000..42f77f8 --- /dev/null +++ b/2021/data/1.depths @@ -0,0 +1,2000 @@ +196 +197 +176 +182 +179 +177 +171 +172 +170 +147 +143 +153 +158 +157 +147 +151 +153 +159 +150 +167 +162 +160 +159 +161 +165 +150 +158 +157 +146 +141 +137 +127 +140 +127 +115 +114 +116 +118 +127 +133 +141 +151 +150 +148 +146 +170 +171 +168 +189 +194 +191 +205 +210 +194 +195 +191 +231 +241 +239 +241 +245 +255 +239 +244 +245 +246 +260 +262 +253 +262 +268 +289 +278 +279 +293 +312 +307 +308 +333 +336 +325 +329 +338 +334 +337 +330 +340 +341 +338 +344 +359 +361 +359 +377 +411 +450 +459 +458 +455 +450 +444 +460 +457 +458 +454 +456 +460 +465 +470 +469 +468 +462 +454 +446 +448 +449 +451 +448 +463 +470 +492 +504 +506 +508 +501 +535 +539 +547 +549 +548 +563 +565 +564 +571 +586 +599 +593 +588 +591 +597 +611 +610 +617 +619 +617 +618 +614 +604 +603 +604 +590 +593 +592 +581 +577 +604 +611 +612 +610 +634 +651 +638 +636 +633 +634 +629 +624 +611 +623 +626 +631 +632 +631 +659 +672 +686 +681 +682 +680 +666 +668 +682 +680 +681 +700 +701 +690 +685 +693 +692 +691 +693 +692 +700 +704 +713 +716 +715 +727 +726 +725 +713 +718 +714 +715 +710 +709 +718 +717 +719 +720 +716 +705 +716 +719 +735 +746 +729 +735 +726 +743 +744 +740 +739 +730 +735 +738 +736 +743 +752 +754 +758 +767 +753 +754 +756 +754 +758 +755 +750 +754 +750 +749 +745 +743 +740 +739 +740 +738 +740 +746 +747 +772 +775 +768 +769 +781 +782 +788 +799 +813 +792 +782 +783 +785 +770 +761 +771 +798 +808 +810 +811 +829 +840 +826 +833 +829 +833 +815 +816 +818 +809 +810 +813 +819 +809 +787 +770 +765 +786 +793 +792 +787 +790 +791 +794 +790 +801 +804 +803 +781 +794 +778 +779 +777 +778 +786 +773 +775 +783 +781 +790 +781 +782 +791 +792 +815 +816 +808 +803 +786 +785 +781 +780 +781 +785 +754 +741 +725 +724 +725 +724 +726 +725 +727 +721 +718 +706 +721 +731 +739 +759 +752 +749 +767 +766 +787 +788 +812 +826 +828 +829 +835 +834 +831 +818 +808 +813 +827 +847 +848 +853 +857 +859 +860 +864 +867 +871 +870 +877 +874 +858 +857 +840 +844 +848 +846 +853 +860 +866 +862 +867 +885 +898 +929 +935 +944 +946 +952 +961 +975 +974 +970 +966 +983 +981 +986 +1001 +996 +995 +982 +984 +991 +982 +990 +984 +991 +992 +997 +995 +994 +998 +1004 +1010 +1011 +1010 +1013 +1016 +1025 +1027 +1029 +1040 +1038 +1041 +1045 +1047 +1048 +1050 +1023 +1024 +1019 +1025 +1035 +1036 +1045 +1052 +1053 +1050 +1049 +1050 +1048 +1049 +1059 +1061 +1059 +1031 +1032 +1042 +1051 +1055 +1064 +1058 +1032 +1037 +1039 +1061 +1087 +1088 +1080 +1085 +1069 +1052 +1054 +1060 +1062 +1063 +1062 +1063 +1062 +1048 +1054 +1050 +1031 +1028 +1022 +1034 +1038 +1039 +1036 +1045 +1055 +1054 +1053 +1058 +1088 +1089 +1086 +1095 +1096 +1090 +1087 +1095 +1099 +1097 +1091 +1093 +1068 +1061 +1078 +1073 +1079 +1082 +1068 +1079 +1078 +1067 +1068 +1084 +1091 +1096 +1070 +1061 +1052 +1047 +1065 +1056 +1069 +1070 +1072 +1081 +1083 +1084 +1078 +1079 +1080 +1082 +1085 +1081 +1085 +1086 +1094 +1096 +1097 +1079 +1081 +1082 +1080 +1077 +1084 +1085 +1084 +1088 +1091 +1092 +1101 +1102 +1101 +1116 +1115 +1114 +1117 +1123 +1120 +1113 +1111 +1116 +1119 +1118 +1130 +1116 +1119 +1122 +1120 +1121 +1150 +1153 +1156 +1162 +1163 +1189 +1191 +1192 +1189 +1187 +1186 +1177 +1167 +1140 +1149 +1160 +1142 +1147 +1148 +1170 +1169 +1188 +1190 +1189 +1193 +1187 +1181 +1188 +1193 +1192 +1194 +1216 +1223 +1209 +1199 +1214 +1218 +1211 +1212 +1222 +1227 +1234 +1244 +1235 +1238 +1232 +1238 +1236 +1231 +1223 +1217 +1218 +1229 +1212 +1236 +1237 +1240 +1255 +1257 +1258 +1261 +1258 +1255 +1258 +1256 +1258 +1279 +1275 +1274 +1282 +1292 +1293 +1296 +1287 +1323 +1322 +1332 +1333 +1316 +1327 +1332 +1334 +1314 +1311 +1315 +1317 +1320 +1359 +1362 +1360 +1362 +1372 +1377 +1389 +1382 +1373 +1380 +1388 +1395 +1384 +1375 +1382 +1383 +1368 +1363 +1356 +1352 +1356 +1360 +1355 +1367 +1371 +1382 +1409 +1379 +1421 +1429 +1430 +1448 +1451 +1452 +1449 +1439 +1460 +1431 +1429 +1430 +1427 +1416 +1417 +1454 +1472 +1473 +1476 +1475 +1477 +1476 +1482 +1481 +1489 +1488 +1490 +1495 +1493 +1500 +1517 +1500 +1498 +1494 +1502 +1505 +1536 +1537 +1538 +1543 +1542 +1541 +1554 +1553 +1555 +1558 +1549 +1550 +1557 +1558 +1560 +1561 +1565 +1560 +1565 +1572 +1573 +1575 +1571 +1581 +1605 +1614 +1611 +1619 +1618 +1614 +1612 +1616 +1629 +1628 +1632 +1635 +1644 +1637 +1638 +1632 +1613 +1614 +1615 +1614 +1609 +1611 +1620 +1615 +1608 +1612 +1646 +1647 +1665 +1668 +1665 +1668 +1676 +1677 +1682 +1695 +1696 +1708 +1709 +1686 +1681 +1668 +1669 +1655 +1667 +1681 +1689 +1710 +1718 +1749 +1748 +1746 +1749 +1752 +1748 +1745 +1744 +1743 +1745 +1743 +1744 +1726 +1725 +1724 +1728 +1727 +1739 +1740 +1733 +1739 +1740 +1757 +1759 +1758 +1759 +1762 +1802 +1799 +1792 +1786 +1787 +1793 +1794 +1797 +1798 +1800 +1803 +1802 +1792 +1793 +1795 +1783 +1782 +1772 +1771 +1772 +1774 +1778 +1765 +1766 +1767 +1769 +1771 +1772 +1788 +1781 +1790 +1789 +1791 +1813 +1809 +1810 +1813 +1814 +1819 +1823 +1815 +1814 +1822 +1826 +1812 +1817 +1814 +1818 +1800 +1801 +1804 +1800 +1802 +1813 +1825 +1822 +1832 +1840 +1841 +1830 +1834 +1835 +1841 +1840 +1845 +1881 +1883 +1887 +1886 +1890 +1889 +1896 +1897 +1917 +1923 +1925 +1923 +1924 +1909 +1899 +1904 +1905 +1907 +1905 +1908 +1922 +1912 +1920 +1924 +1920 +1921 +1920 +1919 +1935 +1937 +1955 +1956 +1967 +1972 +1977 +1984 +1982 +1986 +1980 +1975 +2005 +2007 +2018 +2027 +2040 +2039 +2040 +2042 +2040 +2041 +2040 +2034 +2060 +2066 +2074 +2076 +2080 +2081 +2082 +2066 +2071 +2074 +2069 +2070 +2076 +2075 +2079 +2082 +2081 +2080 +2085 +2093 +2097 +2091 +2096 +2097 +2106 +2103 +2110 +2107 +2098 +2097 +2110 +2113 +2097 +2102 +2103 +2107 +2103 +2117 +2097 +2105 +2103 +2099 +2101 +2094 +2102 +2099 +2069 +2067 +2057 +2071 +2073 +2075 +2073 +2060 +2064 +2081 +2057 +2055 +2056 +2064 +2066 +2067 +2069 +2070 +2076 +2075 +2074 +2101 +2099 +2116 +2115 +2119 +2129 +2126 +2124 +2122 +2126 +2143 +2140 +2141 +2146 +2145 +2148 +2164 +2154 +2151 +2148 +2152 +2130 +2129 +2131 +2118 +2123 +2129 +2130 +2127 +2133 +2132 +2142 +2143 +2157 +2156 +2140 +2139 +2141 +2139 +2140 +2142 +2134 +2126 +2128 +2129 +2131 +2126 +2146 +2145 +2134 +2153 +2151 +2140 +2139 +2161 +2165 +2169 +2150 +2151 +2153 +2176 +2183 +2182 +2188 +2165 +2160 +2161 +2165 +2173 +2155 +2154 +2141 +2140 +2161 +2158 +2148 +2164 +2165 +2176 +2163 +2168 +2158 +2159 +2194 +2201 +2203 +2202 +2211 +2213 +2210 +2193 +2199 +2201 +2199 +2206 +2231 +2239 +2246 +2249 +2265 +2266 +2267 +2281 +2291 +2292 +2293 +2296 +2295 +2275 +2273 +2275 +2274 +2286 +2291 +2301 +2300 +2302 +2298 +2300 +2288 +2298 +2300 +2291 +2309 +2303 +2304 +2309 +2318 +2308 +2315 +2314 +2313 +2315 +2314 +2315 +2325 +2326 +2310 +2308 +2314 +2313 +2312 +2311 +2312 +2311 +2310 +2304 +2310 +2308 +2311 +2296 +2295 +2289 +2290 +2292 +2291 +2289 +2290 +2288 +2300 +2302 +2307 +2313 +2312 +2309 +2310 +2312 +2313 +2314 +2315 +2314 +2308 +2309 +2313 +2325 +2324 +2322 +2300 +2298 +2291 +2301 +2298 +2307 +2309 +2308 +2345 +2341 +2342 +2345 +2360 +2367 +2371 +2374 +2368 +2369 +2375 +2406 +2405 +2422 +2423 +2422 +2419 +2417 +2416 +2417 +2421 +2427 +2445 +2449 +2432 +2448 +2454 +2437 +2429 +2430 +2439 +2415 +2418 +2425 +2421 +2401 +2414 +2412 +2416 +2432 +2450 +2443 +2426 +2427 +2428 +2427 +2429 +2430 +2434 +2438 +2431 +2433 +2431 +2427 +2433 +2455 +2462 +2463 +2465 +2461 +2462 +2463 +2496 +2497 +2493 +2486 +2472 +2470 +2475 +2483 +2491 +2492 +2505 +2510 +2511 +2507 +2508 +2506 +2507 +2505 +2506 +2504 +2524 +2528 +2519 +2527 +2543 +2549 +2555 +2567 +2555 +2561 +2560 +2561 +2560 +2541 +2540 +2537 +2530 +2532 +2528 +2529 +2528 +2522 +2516 +2506 +2520 +2526 +2527 +2531 +2534 +2544 +2545 +2542 +2541 +2543 +2544 +2543 +2542 +2558 +2560 +2558 +2559 +2552 +2551 +2558 +2573 +2590 +2589 +2583 +2574 +2565 +2569 +2580 +2596 +2597 +2596 +2585 +2586 +2587 +2598 +2587 +2588 +2571 +2570 +2567 +2579 +2581 +2579 +2572 +2577 +2575 +2574 +2582 +2585 +2592 +2600 +2601 +2608 +2606 +2609 +2612 +2619 +2631 +2636 +2633 +2640 +2654 +2649 +2611 +2598 +2600 +2604 +2608 +2600 +2607 +2623 +2624 +2633 +2632 +2637 +2655 +2658 +2662 +2675 +2676 +2699 +2711 +2714 +2710 +2718 +2750 +2719 +2713 +2714 +2737 +2739 +2733 +2736 +2754 +2773 +2776 +2794 +2795 +2823 +2825 +2826 +2828 +2830 +2815 +2823 +2821 +2825 +2829 +2833 +2834 +2833 +2832 +2844 +2838 +2840 +2845 +2837 +2849 +2878 +2859 +2858 +2859 +2864 +2868 +2870 +2863 +2859 +2860 +2858 +2860 +2857 +2851 +2852 +2856 +2818 +2820 +2822 +2819 +2818 +2819 +2823 +2827 +2836 +2834 +2835 +2842 +2856 +2854 +2853 +2854 +2855 +2854 +2858 +2859 +2866 +2872 +2871 +2869 +2875 +2874 +2888 +2881 +2883 +2900 +2897 +2885 +2880 +2882 +2883 +2886 +2887 +2903 +2894 +2884 +2876 +2877 +2876 +2875 +2887 +2863 +2865 +2880 +2885 +2866 +2882 +2883 +2875 +2873 +2876 +2875 +2912 +2916 +2932 +2927 +2914 +2906 +2911 +2912 +2910 +2908 +2903 +2929 +2925 +2907 +2905 +2906 +2909 +2897 +2895 +2903 +2918 +2945 +2946 +2937 +2919 +2923 +2943 +2947 +2950 +2951 +2963 +2978 +2972 +2954 +2955 +2957 +2969 +2972 +2984 +2987 +2969 +2970 +2974 +2981 +2949 +2946 +2952 +2966 +2968 +2969 +2970 +2956 +2947 +2941 +2949 +2939 +2940 +2953 +2959 +2947 +2957 +2963 +2968 +2964 +2939 +2912 +2904 +2907 +2928 +2948 +2961 +2969 +2963 +2980 +2985 +2986 +2987 +3015 +3017 +3027 +3028 +3031 +3040 +3043 +3044 +3043 +3054 +3053 +3055 +3053 +3047 +3051 +3025 +3030 +3040 +3044 +3046 +3049 +3054 +3057 +3059 +3056 +3060 +3068 +3085 +3104 +3108 +3114 +3115 +3118 +3121 +3118 +3132 +3134 +3129 +3126 +3123 +3111 +3112 +3080 +3097 +3086 +3088 +3089 +3093 +3092 +3096 +3126 +3127 +3128 +3133 +3134 +3137 +3138 +3135 +3141 +3142 +3143 +3162 +3152 +3149 +3166 +3172 +3170 +3171 +3185 +3187 +3193 +3192 +3196 +3186 +3203 +3213 +3216 +3238 +3237 +3246 +3247 +3252 +3250 +3249 +3241 +3246 +3253 +3251 +3258 +3271 +3274 +3268 +3274 +3273 +3269 +3272 +3271 +3266 +3277 +3270 +3274 +3285 +3270 +3263 +3255 +3256 +3247 +3248 +3252 +3259 +3252 +3253 +3259 +3263 +3259 +3240 +3254 +3257 +3241 +3250 +3251 +3254 +3271 +3273 +3281 +3295 +3296 +3293 +3299 +3292 +3301 +3304 +3306 +3303 +3301 +3303 +3304 +3303 +3275 +3273 +3276 +3302 +3307 +3316 +3317 +3288 +3296 +3298 +3313 +3312 +3313 +3306 +3292 +3295 +3315 +3316 +3308 +3311 +3310 +3294 +3327 +3331 +3330 +3333 +3352 +3360 +3362 +3366 +3357 +3361 +3360 +3351 +3345 +3342 +3339 +3338 +3364 +3365 +3368 +3375 +3385 +3389 +3390 +3389 +3407 +3408 +3402 +3433 +3437 +3436 +3435 +3439 +3454 +3425 +3426 +3422 +3426 +3423 +3419 +3420 +3416 +3417 +3426 +3427 +3403 +3406 +3395 +3396 +3397 +3398 +3399 +3407 +3409 +3410 +3397 +3391 +3408 +3419 +3425 +3428 +3420 +3423 +3424 +3426 +3437 +3440 +3434 +3436 +3440 +3443 +3444 +3450 +3454 +3455 +3460 +3484 +3482 +3487 +3489 +3492 +3493 +3498 +3493 +3478 +3479 +3478 +3505 +3506 +3508 +3505 +3500 +3499 +3498 +3499 +3495 +3494 +3492 +3489 +3490 +3492 +3490 +3492 +3487 +3488 +3491 +3484 +3486 +3487 +3483 +3461 +3459 +3463 +3476 +3466 +3464 +3465 +3474 +3487 +3485 +3477 +3464 +3463 +3469 +3465 +3462 +3448 +3452 +3461 +3463 +3466 +3470 +3475 +3488 +3477 +3473 +3472 +3475 +3469 +3458 +3455 +3440 +3430 +3439 +3440 +3437 +3442 +3443 +3446 +3447 +3442 +3453 +3462 +3463 +3462 +3463 +3461 +3455 +3454 +3450 +3449 +3450 +3447 +3451 +3454 +3459 +3460 +3461 +3463 +3466 +3467 +3468 +3469 +3474 +3481 +3480 +3481 +3482 +3474 +3472 +3484 +3502 +3522 +3507 +3509 +3504 +3497 +3487 +3476 +3473 +3495 +3494 +3495 +3493 +3500 +3503 +3516 +3518 +3517 +3524 +3528 +3531 +3530 +3526 +3525 +3527 +3521 +3520 +3526 +3527 +3521 +3527 +3521 +3524 +3525 +3519 +3520 +3540 +3566 +3577 +3575 +3576 +3561 +3562 +3563 +3571 +3572 +3577 +3575 +3607 +3606 +3611 +3612 +3613 +3614 +3615 +3614 +3605 +3619 +3618 +3624 +3634 +3639 +3638 +3660 +3661 +3653 +3650 +3651 +3652 +3650 +3648 +3649 +3653 +3655 +3650 +3651 +3650 +3685 +3656 +3670 +3687 +3696 +3695 +3682 +3685 +3688 +3686 +3672 +3664 +3663 +3659 +3664 +3676 +3689 +3694 +3697 +3713 +3705 +3706 +3725 +3724 +3723 +3728 diff --git a/2021/data/4.bingo b/2021/data/4.bingo new file mode 100644 index 0000000..788b56b --- /dev/null +++ b/2021/data/4.bingo @@ -0,0 +1,601 @@ +94,21,58,16,4,1,44,6,17,48,20,92,55,36,40,63,62,2,47,7,46,72,85,24,66,49,34,56,98,41,84,23,86,64,28,90,39,97,73,81,12,69,35,26,75,8,32,77,52,50,5,96,14,31,70,60,29,71,9,68,19,65,99,57,54,61,33,91,27,78,43,95,42,3,88,51,53,30,89,87,93,74,18,15,80,38,82,79,0,22,13,67,59,11,83,76,10,37,25,45 + +49 74 83 34 40 +87 16 57 75 3 +68 94 77 78 89 +56 38 29 26 60 +41 42 45 19 1 + +42 35 10 20 9 +49 39 40 41 73 + 3 48 91 81 88 +59 55 82 58 71 +61 51 17 26 72 + +31 49 21 84 83 +18 86 53 75 29 +85 2 51 76 52 +48 28 24 69 12 + 5 87 67 95 82 + +54 21 0 63 13 +84 29 27 12 82 +55 86 33 90 95 +72 96 24 88 37 +38 51 35 46 50 + +24 1 23 62 97 +53 72 99 59 81 +54 26 93 63 20 +79 41 2 86 98 +84 13 87 33 96 + +36 85 51 32 84 +41 70 65 86 73 +94 28 80 81 59 +96 82 7 10 83 + 8 21 29 91 16 + +56 36 87 10 35 + 8 90 37 22 96 +24 82 30 50 86 +70 52 55 51 57 +26 41 61 46 65 + + 6 28 71 21 50 +61 92 19 17 79 +85 69 63 32 41 + 8 36 37 38 83 +13 45 88 77 78 + +55 61 34 72 65 + 8 92 39 27 86 +69 16 66 94 53 +35 41 50 1 42 +31 43 3 85 59 + +55 78 47 85 50 +80 15 98 42 63 + 2 68 37 24 45 + 8 99 33 89 20 +35 28 60 5 34 + +76 4 33 91 0 +98 97 39 51 5 +43 86 58 63 93 +16 67 88 50 19 + 2 68 17 26 89 + +20 57 93 41 35 +76 7 14 58 54 +85 51 24 40 38 +47 13 82 29 10 + 9 21 8 87 17 + +65 82 87 15 49 +43 37 53 6 93 +89 83 66 84 33 +58 41 44 8 91 +23 1 73 5 26 + + 2 27 51 80 5 +88 17 32 75 0 +10 38 78 56 25 +48 11 63 73 50 +57 9 67 86 31 + +35 47 63 9 13 +12 14 82 37 32 +49 74 79 90 10 +22 50 41 46 15 +39 56 19 42 21 + + 6 48 3 2 95 +57 40 86 4 21 + 1 23 65 76 90 +47 63 29 58 49 +77 36 71 55 83 + +31 1 98 47 99 +85 56 81 29 76 +14 46 12 62 83 +86 45 74 73 32 +17 9 59 26 21 + +89 72 83 48 3 +81 34 27 42 41 +90 22 95 85 36 +44 45 31 73 57 +19 60 50 29 75 + +93 2 26 35 39 +91 7 85 69 62 +55 4 27 57 10 +92 44 30 73 22 + 6 58 16 36 9 + + 6 42 55 24 8 +19 43 2 21 90 +99 89 48 60 58 +72 87 1 66 63 +53 16 71 20 28 + +98 82 4 29 95 +40 63 71 64 96 +41 76 93 58 66 +30 36 28 59 74 +92 1 91 39 65 + +96 78 45 44 3 +53 29 75 51 64 +19 84 41 30 60 +86 47 99 71 42 +95 23 40 43 22 + +70 26 4 34 15 +66 51 12 16 36 +28 11 77 61 87 +27 75 38 65 31 + 6 33 56 10 76 + + 9 74 75 61 55 +63 49 29 48 44 +65 12 45 17 31 +43 71 88 96 57 +20 42 34 99 21 + +15 11 32 26 51 +23 20 19 14 82 +75 60 0 18 59 +30 66 40 57 47 +77 44 37 80 61 + + 3 40 26 25 33 +18 80 72 28 16 + 9 46 50 91 93 +88 13 52 1 65 +70 27 78 43 39 + +35 77 7 49 72 +59 8 87 60 15 +38 81 71 24 20 +50 54 94 31 75 +68 2 11 27 64 + +45 39 55 51 30 +56 0 2 28 10 +43 32 46 80 98 +15 82 17 92 89 +73 62 93 33 40 + +21 94 54 29 24 +40 35 73 43 77 +80 14 2 76 31 +17 11 8 42 45 +46 78 59 99 55 + +92 24 9 39 4 +55 20 17 65 99 +67 86 72 6 38 +53 51 27 63 93 +48 95 83 66 85 + +26 68 60 15 41 +32 55 33 71 63 +92 22 70 20 78 +85 89 29 27 84 +98 91 36 23 6 + +77 71 11 12 24 +98 85 36 29 35 +80 51 88 25 81 +23 9 33 61 48 + 5 66 94 54 10 + +89 67 34 98 57 + 4 20 80 83 28 +63 77 66 5 47 + 8 36 43 45 41 +81 18 90 91 15 + +20 93 58 27 99 +45 47 59 9 23 +25 71 14 48 62 +95 7 69 41 90 +53 1 10 98 70 + + 1 4 67 24 48 +53 88 77 70 86 +99 30 23 61 27 +82 95 73 37 78 +47 92 13 94 0 + +94 8 19 74 24 +10 60 2 65 18 +31 22 16 25 32 +75 4 86 55 26 +93 47 98 43 44 + +58 39 34 69 79 +88 78 85 84 23 +89 63 29 28 40 +37 83 56 74 32 +24 73 61 7 35 + +46 35 27 49 81 +92 41 33 64 5 +13 6 96 66 85 +76 3 19 17 2 +82 30 88 0 39 + +46 2 1 82 72 + 9 14 36 95 70 +56 65 13 35 28 +38 59 62 21 19 +99 77 16 52 8 + +74 94 50 56 7 +60 18 83 87 21 +85 42 64 53 40 +43 30 67 41 68 +32 63 97 82 9 + + 6 16 58 70 86 +42 28 51 38 54 +88 46 90 83 36 +65 24 95 63 52 +94 25 84 5 71 + +10 84 5 18 34 +76 46 82 49 98 +74 99 29 11 41 +42 92 20 64 39 +91 85 79 32 52 + +67 68 72 43 14 +86 5 24 40 70 +57 12 92 0 98 +60 58 15 13 2 +17 51 6 3 74 + +50 27 68 12 80 +79 26 17 59 86 +57 29 82 70 71 +93 6 78 39 24 +72 53 23 49 98 + +69 27 19 18 54 + 6 38 34 41 49 +17 94 93 25 86 + 1 45 60 44 62 +31 72 59 83 36 + +45 33 42 91 39 + 6 77 32 21 27 + 9 92 30 2 43 +89 79 86 11 83 +23 94 76 65 1 + +78 16 22 80 75 +42 61 8 35 93 +62 59 66 79 13 +44 77 7 87 68 +74 14 52 65 19 + +60 24 88 7 29 +95 33 36 81 71 +67 39 2 49 37 +78 25 28 35 93 +20 3 12 99 6 + +49 99 87 89 85 +86 63 42 38 68 +46 19 94 60 65 +18 51 8 0 3 +64 77 23 35 16 + +95 22 33 57 64 +12 37 75 6 74 +76 16 86 15 48 +70 99 24 19 52 +47 65 46 32 8 + +82 71 28 64 46 +88 90 85 69 84 +33 86 7 27 10 +45 48 0 31 99 +37 4 77 29 49 + +69 33 73 50 26 +24 41 15 91 78 +95 47 70 23 19 +80 14 60 56 3 +55 58 8 43 16 + +64 76 70 0 4 +58 26 95 88 53 + 1 45 50 97 93 +30 65 31 6 81 +12 11 74 68 94 + +13 14 60 87 56 +69 3 64 29 57 +24 86 78 21 15 +33 25 70 67 38 +22 73 11 50 96 + +73 15 22 78 63 +48 51 6 39 20 +11 91 12 0 65 + 2 90 19 64 43 +42 89 71 10 31 + +48 5 78 25 89 +82 57 32 80 60 +13 21 88 76 65 +38 72 53 4 51 + 0 31 20 17 36 + +41 71 27 24 58 + 3 54 43 36 75 + 7 1 39 59 95 +99 97 18 40 96 +50 61 49 69 31 + +58 93 37 23 25 +88 81 45 50 33 +76 97 4 21 72 +56 2 98 78 51 +32 17 19 29 6 + +73 91 87 49 74 +99 45 24 76 77 +44 67 3 60 27 +36 62 94 96 57 + 0 16 48 54 92 + +90 7 66 65 1 +27 42 3 11 26 +63 95 69 53 29 +43 12 52 37 96 +84 13 41 36 35 + +10 5 54 4 16 +51 17 22 49 3 +86 65 40 58 47 +71 69 20 7 98 +75 57 97 74 35 + +31 53 17 88 12 +74 39 59 82 68 +46 23 13 28 76 + 0 89 48 43 37 +34 50 86 19 66 + +70 82 88 32 9 + 7 15 38 56 62 +91 25 49 78 77 +40 42 44 79 18 + 1 84 28 73 97 + +67 38 62 93 81 + 1 63 17 86 90 +55 66 6 39 13 +72 80 5 70 11 +30 71 96 14 73 + +73 29 93 64 48 + 9 41 70 57 46 +33 92 78 82 91 +90 4 87 43 56 +83 28 59 85 8 + +23 99 26 4 56 +79 39 31 82 92 +17 20 44 70 35 +48 71 95 53 1 +97 24 41 91 87 + +93 61 95 53 27 +54 49 74 16 82 +30 17 59 64 79 + 4 28 36 9 38 +58 80 44 85 45 + +92 28 76 97 45 +93 34 3 75 81 +15 14 67 64 80 + 1 68 84 83 25 +19 20 56 78 58 + +98 38 94 26 30 +32 66 59 41 52 +40 37 73 18 39 +58 4 55 19 27 +62 69 51 44 77 + +48 4 3 60 11 +81 76 10 0 80 +41 93 25 53 49 +14 21 85 38 45 + 5 89 12 98 74 + +10 18 21 71 94 +14 64 44 83 47 +78 11 5 29 6 +56 36 85 73 26 +62 30 35 7 39 + +32 31 71 52 12 +62 35 44 95 68 +67 29 15 85 9 +27 72 58 21 93 +11 54 40 41 37 + + 7 45 74 17 9 +99 16 84 63 61 +44 21 59 69 66 +11 39 80 19 72 +89 58 81 42 87 + +91 84 78 7 95 +24 3 85 20 16 +29 38 52 41 21 +37 23 56 73 54 +11 47 5 65 51 + +93 94 24 74 88 + 9 72 82 6 73 +92 12 97 34 71 +35 3 0 2 19 +55 38 67 26 50 + +56 22 52 96 72 +21 67 65 37 64 +99 76 51 39 24 +90 4 57 75 47 +40 32 44 83 34 + +90 58 56 43 94 +99 61 95 18 72 +86 20 47 89 53 +97 38 0 39 93 +85 98 62 21 5 + +68 20 23 1 63 +37 97 47 30 70 +66 35 46 36 2 +29 87 82 59 10 +12 5 39 73 99 + + 1 82 87 52 42 +65 74 46 92 56 +25 29 26 34 51 +20 10 39 81 32 +12 11 89 18 27 + +94 36 29 72 10 +34 47 77 83 18 +38 76 6 48 97 +41 90 61 69 78 +14 74 66 55 33 + +78 25 8 24 74 +60 53 80 50 48 +66 92 55 17 3 +77 95 18 35 34 + 5 11 70 1 82 + +58 91 5 63 35 +99 37 76 90 73 +20 50 67 61 17 +13 62 54 32 21 +47 30 94 68 49 + +16 1 38 84 56 +53 79 14 17 47 +23 97 61 24 65 +83 89 4 29 90 +94 57 50 22 31 + + 9 50 63 65 17 + 8 22 66 4 19 +89 71 24 70 68 +47 1 56 6 40 +62 46 75 43 37 + + 2 15 10 18 14 +45 34 35 77 20 +76 55 48 28 26 +80 65 68 19 84 + 1 94 40 85 11 + +80 47 69 78 37 +88 10 95 86 96 +28 14 98 20 35 +16 6 8 50 38 +51 26 53 9 54 + +93 75 53 1 16 +30 66 76 19 51 +69 22 28 31 7 +15 36 96 17 97 +92 23 45 26 48 + +96 13 63 81 65 +39 47 48 5 31 +64 20 95 61 60 + 4 83 55 97 14 +92 45 88 99 79 + +11 35 56 27 50 +85 40 71 88 99 +59 39 84 44 43 +22 19 10 12 98 +13 7 76 23 21 + +94 67 79 35 47 +83 77 3 11 15 +74 10 70 14 44 +76 5 80 46 71 +20 36 53 88 40 + +34 24 12 63 47 +32 96 67 40 82 +42 7 87 61 10 +70 14 65 88 74 +92 9 53 60 56 + +43 38 91 30 72 +20 3 64 80 32 +90 37 28 4 14 +96 11 6 84 68 +58 60 45 61 47 + +45 11 65 41 46 +29 33 56 26 3 +21 90 42 96 27 +94 17 32 92 25 +43 99 36 70 87 + +52 99 88 76 66 +75 81 48 2 96 +55 59 39 97 34 +77 37 6 82 47 +64 29 32 19 86 + + 4 20 57 61 8 +28 33 42 30 86 +34 65 14 40 46 +43 49 37 22 39 +71 18 11 85 92 + +68 51 39 93 1 + 9 82 35 67 81 + 3 12 29 6 83 +58 73 97 26 20 + 2 28 99 64 77 + +88 41 91 98 89 +82 1 37 10 14 +52 44 90 34 21 +76 27 43 54 49 +31 84 46 57 77 + +73 99 79 76 43 +82 17 14 68 87 +39 53 21 7 81 +94 45 35 48 32 +67 49 62 63 23 + +99 0 85 12 83 +30 45 67 76 87 + 7 39 57 66 98 +13 82 46 28 24 +25 15 90 68 51 + +69 30 73 61 99 +12 13 7 53 20 + 8 18 28 82 67 +95 79 96 51 29 +56 31 92 54 57 diff --git a/2021/src/bin/01-sonar-sweep.rs b/2021/src/bin/01-sonar-sweep.rs new file mode 100644 index 0000000..13951f8 --- /dev/null +++ b/2021/src/bin/01-sonar-sweep.rs @@ -0,0 +1,20 @@ +#![allow(dead_code, unused_imports)] +use anyhow::Result; +use itertools::Itertools; + +use std::{io::{stdin, Read}, str::FromStr}; + +fn descending_window(size: usize) -> Result { + Ok(aoc::read_one_per_line::("./data/1.depths")? + .windows(size) + .filter(|win| win[0] < win[size - 1]) + .collect_vec() + .len()) +} + +fn main() -> Result<()> { + println!("Part 1: {}", descending_window(2)?); + println!("Part 2: {}", descending_window(4)?); + + Ok(()) +} diff --git a/2021/src/bin/04-giant-squid.rs b/2021/src/bin/04-giant-squid.rs new file mode 100644 index 0000000..e69de29 diff --git a/2021/src/lib.rs b/2021/src/lib.rs new file mode 100644 index 0000000..f100ab7 --- /dev/null +++ b/2021/src/lib.rs @@ -0,0 +1,34 @@ +use anyhow::Result; +use std::str::FromStr; + +pub fn read_one_per_line(path: &str) -> Result> +where + T: FromStr, +{ + Ok(std::fs::read_to_string(path)? + .lines() + .filter_map(|line| line.parse::().ok()) + .collect()) +} + +pub fn read_vec_per_line(path: &str, f: F) -> Result>> +where + T: FromStr, + F: Fn(char) -> Option, +{ + Ok(std::fs::read_to_string(path)? + .lines() + .map(|line| line.chars().map(|c| f(c).unwrap()).collect()) + .collect()) +} + +pub fn read_one_line(path: &str, sep: &str) -> Result> +where + T: FromStr, +{ + Ok(std::fs::read_to_string(path)? + .trim() + .split(sep) + .filter_map(|c| c.parse::().ok()) + .collect()) +}