From 244314a2f05ab0b3849f4a9a9cb830cff3b4a832 Mon Sep 17 00:00:00 2001 From: Luke Else Date: Mon, 1 Dec 2025 09:25:27 +0000 Subject: [PATCH] feat: Completed Day 1 YAY --- Cargo.toml | 6 +- assets/images/main.png | Bin 28691 -> 4268 bytes input/day01 | 4780 ++++++++++++++++++++++++++++++++++++++++ input/day01_test1 | 10 + input/day01_test2 | 10 + input/day13 | 0 input/day13_test1 | 0 input/day13_test2 | 0 input/day14 | 0 input/day14_test1 | 0 input/day14_test2 | 0 input/day15 | 0 input/day15_test1 | 0 input/day15_test2 | 0 input/day16 | 0 input/day16_test1 | 0 input/day16_test2 | 0 input/day17 | 0 input/day17_test1 | 0 input/day17_test2 | 0 input/day18 | 0 input/day18_test1 | 0 input/day18_test2 | 0 input/day19 | 0 input/day19_test1 | 0 input/day19_test2 | 0 input/day20 | 0 input/day20_test1 | 0 input/day20_test2 | 0 input/day21 | 0 input/day21_test1 | 0 input/day21_test2 | 0 input/day22 | 0 input/day22_test1 | 0 input/day22_test2 | 0 input/day23 | 0 input/day23_test1 | 0 input/day23_test2 | 0 input/day24 | 0 input/day24_test1 | 0 input/day24_test2 | 0 input/day25 | 0 input/day25_test1 | 0 input/day25_test2 | 0 src/main.rs | 3 + src/solutions/day01.rs | 66 +- src/solutions/day13.rs | 66 - src/solutions/day14.rs | 66 - src/solutions/day15.rs | 66 - src/solutions/day16.rs | 66 - src/solutions/day17.rs | 66 - src/solutions/day18.rs | 66 - src/solutions/day19.rs | 66 - src/solutions/day20.rs | 66 - src/solutions/day21.rs | 66 - src/solutions/day22.rs | 66 - src/solutions/day23.rs | 66 - src/solutions/day24.rs | 66 - src/solutions/day25.rs | 66 - src/solutions/mod.rs | 13 - src/utils.rs | 2 +- 61 files changed, 4866 insertions(+), 882 deletions(-) delete mode 100644 input/day13 delete mode 100644 input/day13_test1 delete mode 100644 input/day13_test2 delete mode 100644 input/day14 delete mode 100644 input/day14_test1 delete mode 100644 input/day14_test2 delete mode 100644 input/day15 delete mode 100644 input/day15_test1 delete mode 100644 input/day15_test2 delete mode 100644 input/day16 delete mode 100644 input/day16_test1 delete mode 100644 input/day16_test2 delete mode 100644 input/day17 delete mode 100644 input/day17_test1 delete mode 100644 input/day17_test2 delete mode 100644 input/day18 delete mode 100644 input/day18_test1 delete mode 100644 input/day18_test2 delete mode 100644 input/day19 delete mode 100644 input/day19_test1 delete mode 100644 input/day19_test2 delete mode 100644 input/day20 delete mode 100644 input/day20_test1 delete mode 100644 input/day20_test2 delete mode 100644 input/day21 delete mode 100644 input/day21_test1 delete mode 100644 input/day21_test2 delete mode 100644 input/day22 delete mode 100644 input/day22_test1 delete mode 100644 input/day22_test2 delete mode 100644 input/day23 delete mode 100644 input/day23_test1 delete mode 100644 input/day23_test2 delete mode 100644 input/day24 delete mode 100644 input/day24_test1 delete mode 100644 input/day24_test2 delete mode 100644 input/day25 delete mode 100644 input/day25_test1 delete mode 100644 input/day25_test2 delete mode 100644 src/solutions/day13.rs delete mode 100644 src/solutions/day14.rs delete mode 100644 src/solutions/day15.rs delete mode 100644 src/solutions/day16.rs delete mode 100644 src/solutions/day17.rs delete mode 100644 src/solutions/day18.rs delete mode 100644 src/solutions/day19.rs delete mode 100644 src/solutions/day20.rs delete mode 100644 src/solutions/day21.rs delete mode 100644 src/solutions/day22.rs delete mode 100644 src/solutions/day23.rs delete mode 100644 src/solutions/day24.rs delete mode 100644 src/solutions/day25.rs diff --git a/Cargo.toml b/Cargo.toml index 44d1799..937cb49 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] -name = "advent_of_code_XXXX" +name = "advent_of_code_2025" version = "0.1.0" -edition = "2021" +edition = "2024" [dependencies] -tokio = {version = "1.41.1", features = ["full"]} +tokio = { version = "1.48.0", features = ["full"] } diff --git a/assets/images/main.png b/assets/images/main.png index 88eebf85fafa742f49baa76b21e47c7c24754b4b..c2e70efdff85dfcb1b5f4034f2a167cdc038e201 100644 GIT binary patch literal 4268 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 literal 28691 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 diff --git a/input/day01 b/input/day01 index e69de29..d54a03a 100644 --- a/input/day01 +++ b/input/day01 @@ -0,0 +1,4780 @@ +L20 +L13 +L16 +L16 +L29 +L7 +L48 +L48 +L31 +R27 +L24 +L4 +L34 +L41 +L10 +R6 +R43 +R29 +R25 +R4 +L13 +R7 +R9 +L42 +R42 +L16 +L19 +L11 +L8 +R3 +R2 +R17 +R9 +R41 +R42 +L14 +L4 +R22 +L19 +L49 +L29 +R23 +R20 +L13 +L18 +L6 +L40 +L15 +R45 +R34 +R55 +R63 +L9 +L29 +R77 +R42 +R72 +L97 +L17 +L21 +R93 +R34 +L59 +L57 +L49 +R51 +L92 +R57 +R43 +R54 +R46 +L51 +R31 +L56 +L95 +L29 +L20 +R25 +R20 +R42 +R33 +R74 +L12 +R70 +L63 +L69 +L25 +R83 +R42 +L64 +R48 +L67 +L56 +L61 +L89 +R33 +R9 +R47 +R66 +L61 +L5 +L8 +R50 +R8 +L50 +L35 +L65 +R59 +R90 +L64 +L444 +R57 +R2 +R57 +L99 +L58 +L562 +L38 +L96 +L604 +R21 +L21 +R965 +L65 +L99 +R199 +L766 +R18 +R56 +R92 +L69 +R92 +L79 +R56 +L65 +L8 +R73 +L48 +L40 +R11 +R35 +L58 +R177 +R68 +L24 +L51 +L70 +L726 +R32 +L571 +R80 +R69 +L84 +L93 +L10 +L26 +L71 +R987 +L87 +L21 +R36 +L15 +R94 +L94 +R55 +L13 +L69 +L10 +R12 +R861 +R92 +R59 +R13 +L14 +R50 +L36 +R23 +R33 +R4 +L12 +R12 +R23 +R87 +L70 +R74 +L74 +L23 +R1 +L78 +L75 +L44 +L80 +R19 +L20 +L278 +L22 +R801 +L1 +L81 +R50 +R51 +L4 +R61 +R41 +L62 +R71 +L59 +R58 +R25 +L51 +R33 +L83 +L92 +L91 +R33 +R19 +L21 +L21 +R859 +R83 +L83 +L46 +R42 +L332 +L497 +L38 +R23 +R12 +L57 +L43 +R96 +L38 +L58 +L279 +R79 +R14 +R86 +L5 +R78 +R31 +L49 +R45 +R634 +R566 +L84 +L16 +R52 +L49 +R11 +L2 +L775 +L61 +L30 +R10 +L55 +R27 +R82 +R25 +L60 +L75 +R51 +L66 +R256 +R856 +R79 +L776 +R11 +L11 +R547 +R53 +R340 +R60 +L45 +R308 +R37 +L11 +L20 +L97 +L72 +R12 +R184 +R45 +R165 +R39 +L55 +R72 +L21 +R59 +R48 +R30 +L98 +L868 +L32 +R24 +R49 +R88 +R95 +R30 +L66 +R44 +R36 +L58 +L22 +L47 +L575 +L66 +R93 +L5 +R63 +R546 +L647 +L166 +R273 +R95 +R57 +L95 +R74 +R38 +L38 +L89 +L45 +R45 +R289 +R12 +R113 +L75 +L71 +L484 +R27 +R32 +R73 +L9 +R82 +R57 +R43 +R63 +R97 +R40 +R71 +R33 +R3 +L5 +R1 +L54 +R14 +L63 +R378 +R707 +L16 +R889 +L58 +L62 +L62 +L70 +R72 +L223 +L876 +R34 +R887 +R30 +L30 +R83 +R56 +L839 +L62 +R738 +L19 +L59 +L98 +R26 +R62 +R20 +R77 +L99 +L51 +L98 +R349 +L86 +R66 +L66 +L676 +R859 +L83 +R45 +L989 +R190 +L88 +R95 +L999 +L18 +R64 +R16 +R884 +L98 +R282 +L49 +L35 +L277 +L23 +R43 +L646 +R37 +R66 +L22 +R5 +L20 +R68 +R69 +L33 +L68 +R301 +L928 +R82 +R65 +R11 +R20 +L50 +L44 +R36 +L5 +L139 +L87 +R8 +L469 +R135 +L35 +R57 +L575 +L82 +L95 +L5 +R36 +R64 +R92 +L692 +R428 +L28 +R80 +R11 +L99 +R767 +R41 +R62 +L62 +L540 +L81 +R94 +L58 +R85 +R92 +L77 +L48 +L67 +R547 +R53 +R72 +R49 +L21 +R7 +R99 +L6 +R127 +R35 +R95 +L72 +L77 +L81 +R73 +R64 +L60 +L35 +L56 +R38 +L8 +R80 +R93 +R98 +R94 +L8 +L88 +L12 +L56 +L44 +R82 +R18 +R72 +L885 +L90 +R3 +L820 +R590 +L197 +R788 +R39 +L46 +L39 +R85 +R83 +R17 +L781 +R81 +L55 +R64 +R528 +L47 +L889 +R99 +L41 +R41 +L76 +L24 +R99 +L63 +R78 +R39 +L57 +R23 +L819 +L97 +L3 +L79 +R22 +R57 +L13 +R69 +R44 +R119 +L847 +R61 +L33 +L16 +R16 +L69 +R89 +L20 +R60 +R88 +R40 +L86 +L57 +R55 +R29 +L31 +L19 +L54 +L95 +L43 +R257 +R56 +R47 +R21 +R38 +R50 +R844 +R17 +L403 +R86 +R35 +L25 +L30 +L19 +R626 +R813 +R31 +R569 +L14 +L38 +R917 +R62 +R73 +L1 +R108 +R42 +L49 +L20 +R20 +R115 +R85 +R63 +L63 +L880 +R99 +R71 +R10 +L56 +L44 +L1 +L27 +L72 +L73 +R17 +R6 +R50 +R96 +L79 +L17 +L79 +L21 +R72 +L72 +R171 +R27 +L48 +L150 +R12 +L12 +R199 +R21 +R62 +R44 +R64 +R492 +R52 +R53 +L28 +R41 +R92 +R8 +L503 +R3 +L55 +R744 +R615 +L406 +L145 +L272 +L681 +L132 +R632 +R23 +L34 +R32 +L337 +L84 +L15 +L848 +L37 +L95 +R95 +L84 +L33 +L83 +R771 +R52 +R60 +L58 +R51 +L56 +L20 +R8 +R92 +R75 +L275 +L25 +R25 +R70 +R18 +R9 +R3 +R91 +R856 +L96 +L251 +L629 +R29 +R52 +L429 +R296 +L479 +R54 +R43 +L60 +L477 +R71 +R51 +L22 +L66 +R866 +L79 +L621 +L42 +R58 +R857 +R327 +L510 +L63 +L50 +L64 +L52 +R39 +L73 +L727 +L15 +R71 +L85 +L271 +R88 +L88 +L29 +R66 +R63 +R49 +L15 +L15 +R81 +R48 +L93 +R45 +L21 +L979 +L39 +R21 +R673 +L55 +L19 +L349 +R41 +L36 +R63 +R66 +R466 +L32 +R51 +R49 +R893 +L93 +R25 +L66 +R22 +L781 +L60 +R6 +R53 +R99 +R9 +L350 +L63 +R6 +R50 +R50 +R89 +R89 +L53 +L25 +L4 +L56 +L78 +L62 +R72 +L74 +L89 +R91 +L73 +L61 +L749 +L746 +L55 +R87 +L37 +R60 +L4 +L22 +R213 +L13 +L27 +R82 +R64 +R531 +R937 +R13 +L53 +L4 +L731 +L12 +L772 +L28 +L22 +L88 +R10 +R59 +L59 +L42 +L66 +R69 +L61 +L11 +L27 +L62 +R240 +L51 +L89 +R256 +R21 +L37 +R48 +R146 +R12 +L7 +L60 +L505 +R11 +L85 +L98 +R746 +R24 +L98 +R211 +L694 +L60 +L11 +L20 +L92 +R92 +L601 +L80 +L71 +L342 +R94 +L14 +L486 +R2 +L2 +R7 +R8 +R1 +L16 +L82 +L25 +R6 +L6 +L58 +R40 +R46 +R79 +L67 +R55 +R88 +L841 +R92 +R61 +R89 +L83 +R48 +L63 +L86 +R67 +L60 +L61 +L39 +R75 +R77 +R48 +R66 +L35 +L831 +R88 +R70 +R52 +L909 +L1 +L66 +R80 +R99 +R31 +L73 +L71 +L18 +R18 +L24 +L51 +R406 +R592 +L43 +L13 +R102 +R25 +L48 +L221 +R35 +R73 +L76 +R85 +L742 +R41 +L41 +R74 +R72 +L20 +R74 +L26 +L73 +L1 +R30 +L725 +L5 +L57 +L535 +L87 +L21 +L73 +R29 +L54 +L2 +R27 +R73 +L77 +L31 +L92 +R95 +L96 +R60 +L59 +R3 +R19 +R33 +L55 +L841 +L59 +L13 +R13 +L33 +R933 +L97 +L147 +R55 +R67 +R22 +L884 +R84 +L10 +L71 +R466 +R15 +R69 +R31 +L8 +R8 +L84 +L75 +R88 +R71 +R65 +R35 +L79 +R79 +L132 +R457 +L17 +R37 +L238 +R93 +R37 +L37 +R99 +R89 +L828 +L43 +L91 +R74 +L93 +R90 +R38 +R385 +R80 +R572 +R550 +L22 +R463 +L37 +L979 +L60 +R13 +R299 +L12 +L12 +L75 +R90 +R71 +R65 +L57 +R85 +R46 +R188 +L588 +R86 +R148 +R792 +R74 +R56 +R44 +L874 +R96 +R578 +L48 +R48 +L50 +L17 +R81 +L814 +L5 +R5 +R43 +L56 +R49 +L36 +L65 +R52 +L66 +R11 +L32 +L10 +L473 +L85 +R99 +L90 +R59 +L66 +R38 +L19 +R84 +R20 +L57 +L561 +L239 +L61 +R61 +L5 +L811 +R14 +L482 +L66 +R610 +L64 +L96 +R85 +L75 +R90 +R134 +R13 +L647 +L529 +L71 +R917 +L79 +R44 +L28 +L26 +R72 +R27 +R99 +L52 +L53 +R79 +L39 +L53 +L1 +R38 +L63 +L57 +R94 +L4 +R56 +R31 +L959 +R52 +R82 +R418 +R5 +L690 +R96 +L6 +R6 +L71 +L98 +R329 +L966 +L64 +L36 +R66 +L682 +R64 +L48 +R99 +L66 +L1 +L632 +R41 +L563 +L70 +L8 +L367 +L33 +L30 +L898 +L61 +L159 +L46 +R55 +L61 +R99 +L99 +L7 +L93 +L962 +L68 +R69 +R81 +L360 +R40 +L42 +R10 +L80 +L88 +R95 +L120 +R225 +R31 +L3 +L22 +R23 +L329 +L444 +R793 +L29 +L65 +L55 +L96 +R58 +L862 +R84 +L37 +L47 +R89 +L89 +L821 +R64 +R957 +R39 +L63 +R15 +L90 +R7 +R18 +R596 +R878 +L33 +L67 +R88 +L22 +L66 +R98 +L88 +R94 +L39 +R35 +R95 +R59 +R41 +L947 +R86 +L70 +L32 +L87 +R67 +L58 +R52 +R847 +R47 +L29 +L45 +L826 +L72 +R76 +R96 +R19 +L66 +R47 +L77 +L97 +R36 +L14 +R42 +R52 +L60 +R18 +L13 +R720 +R793 +L167 +R831 +L10 +L97 +L32 +L22 +L79 +R76 +R30 +L10 +R18 +L21 +R85 +R98 +L71 +R38 +L67 +R443 +L58 +R15 +R66 +L49 +L70 +L47 +R25 +L36 +L489 +L81 +R81 +R89 +R992 +R53 +R66 +R15 +R585 +L6 +L94 +R93 +R7 +L37 +L361 +L3 +R1 +R131 +L34 +R72 +L32 +R827 +L97 +L97 +L148 +R52 +R26 +L62 +L38 +R96 +L374 +R79 +R67 +L85 +R17 +R3 +L23 +L32 +R52 +L344 +L56 +R55 +R93 +R3 +R949 +L258 +R249 +R9 +L16 +L76 +R56 +R71 +L4 +L31 +L750 +R217 +L67 +R94 +R6 +R838 +R6 +R56 +R38 +L20 +R77 +L58 +L98 +R27 +L89 +L47 +L34 +L96 +R53 +R35 +L88 +R488 +R37 +R75 +L17 +L18 +L39 +R40 +L3 +L63 +R70 +L415 +L792 +L46 +R84 +L26 +R141 +R655 +L87 +R31 +R90 +L9 +L991 +L76 +L29 +L12 +R39 +R73 +R42 +L42 +L82 +L248 +R30 +L61 +L39 +L570 +R66 +L74 +L91 +L31 +R77 +R23 +R37 +L526 +R92 +R97 +L98 +L97 +R50 +L60 +R60 +L80 +R825 +L2 +R902 +R11 +L11 +R50 +R689 +R23 +L514 +R4 +R76 +R72 +L97 +R5 +L60 +L48 +L34 +R34 +R47 +R975 +L22 +L10 +L50 +L40 +L46 +L93 +R39 +L15 +L6 +R24 +L355 +L48 +L28 +R28 +R89 +R11 +R18 +R252 +L63 +R93 +R59 +L59 +R99 +R25 +R39 +R72 +L35 +R17 +L17 +L4 +L48 +R34 +L82 +R99 +L70 +L29 +R54 +R23 +R54 +L31 +L20 +R24 +R79 +R26 +R43 +R461 +R87 +R811 +L77 +R51 +R15 +L56 +L44 +R57 +R16 +R98 +R55 +L12 +L8 +R94 +R36 +R64 +L382 +R82 +R725 +R18 +L62 +R24 +R248 +R747 +L83 +L64 +R27 +R997 +L877 +R2 +L2 +R66 +L66 +L25 +R18 +L858 +R39 +L68 +L42 +L64 +L45 +L86 +R92 +R39 +L85 +R885 +R32 +L98 +L337 +L15 +L25 +R93 +L50 +L20 +L80 +L81 +R20 +L39 +R49 +R97 +R924 +L70 +L48 +R76 +L27 +L401 +L49 +L46 +R24 +R71 +R46 +L46 +L65 +L51 +R88 +L963 +L9 +L35 +R92 +L69 +R546 +L66 +R240 +R38 +R25 +L28 +L43 +L2 +L98 +R23 +R578 +L88 +R79 +R52 +R56 +R29 +L64 +L51 +L14 +R79 +R21 +L49 +R90 +R39 +R20 +L35 +R935 +L78 +R44 +L20 +L28 +L165 +L37 +R19 +R46 +R75 +L85 +R84 +L22 +L33 +L79 +L43 +R16 +L94 +R39 +L71 +L58 +R90 +R298 +R33 +R29 +R40 +L92 +L30 +L540 +L27 +R868 +L71 +L708 +R84 +L62 +L905 +L66 +R49 +L81 +R75 +L94 +L56 +R143 +R5 +L58 +R58 +R12 +R20 +R76 +R72 +L498 +R16 +R10 +L14 +R14 +L41 +L59 +R63 +R52 +R785 +R14 +R186 +L5 +R95 +L24 +L89 +R68 +L26 +R45 +L64 +R64 +R29 +L66 +R273 +R50 +L50 +R62 +L18 +R44 +L45 +R57 +R28 +L83 +R855 +L62 +L238 +R21 +R99 +L20 +R671 +R29 +R311 +R70 +L49 +L13 +L28 +L91 +L33 +R68 +R65 +L58 +R46 +L588 +L47 +R847 +R52 +L10 +R758 +L84 +L16 +R45 +L9 +R64 +R59 +L59 +L84 +L60 +R44 +R55 +L54 +L1 +R18 +L18 +R532 +R55 +R413 +R47 +R80 +L505 +R78 +R89 +L89 +L57 +L43 +R92 +L92 +L28 +R70 +L42 +L902 +R40 +R96 +R38 +R10 +R18 +R35 +L74 +L14 +R61 +R992 +R53 +R1 +R8 +L62 +R17 +R10 +R68 +L50 +L45 +L148 +L30 +L122 +R82 +R18 +L31 +R31 +R30 +R570 +L43 +L57 +L74 +L44 +R18 +L91 +L23 +L48 +L31 +L7 +R577 +R32 +L11 +R26 +R76 +L60 +R47 +L61 +R468 +R6 +R85 +L85 +L41 +R53 +L54 +R919 +L70 +R593 +R19 +R47 +L96 +L98 +R28 +R19 +R81 +R633 +L133 +R22 +R18 +L627 +L81 +L31 +R86 +R90 +L52 +R475 +R945 +R13 +R925 +L83 +R39 +R61 +R377 +R22 +L385 +R66 +L65 +R85 +R62 +R838 +L90 +L10 +L70 +R70 +L35 +R35 +L28 +L840 +L249 +R317 +L6 +L294 +L791 +L97 +L41 +L53 +L18 +L54 +R34 +L80 +R667 +R91 +L42 +R90 +R94 +R66 +L482 +R88 +L94 +R37 +L76 +L91 +L48 +R62 +R38 +L71 +L19 +L710 +L93 +R93 +R78 +R96 +L24 +R833 +R17 +L279 +R79 +L9 +R9 +L63 +L16 +L834 +L687 +L72 +R72 +L93 +L90 +L84 +L4 +L74 +L304 +R49 +L643 +R84 +R89 +R63 +L201 +L504 +L37 +R49 +L88 +L50 +R138 +L6 +L519 +R87 +R538 +L8 +R898 +L650 +R60 +L93 +L95 +R388 +L64 +R6 +R80 +R23 +R40 +L824 +L36 +L796 +L88 +R59 +L61 +L22 +L48 +L48 +L21 +R49 +R82 +R69 +R975 +L75 +R18 +R90 +R92 +L63 +R63 +L7 +L393 +L914 +R43 +R22 +R53 +L23 +L603 +R274 +L552 +R76 +R70 +L46 +R88 +R11 +R231 +R70 +R716 +L131 +R60 +R16 +R39 +L17 +R40 +R96 +R281 +R5 +L5 +L28 +L56 +R24 +L40 +L96 +L4 +R4 +L4 +R28 +R72 +R50 +L96 +L93 +L761 +L36 +L469 +L18 +L49 +L128 +L19 +L87 +L41 +L12 +L38 +L64 +L739 +L30 +L47 +R244 +L32 +L35 +R71 +R65 +L685 +L706 +R909 +R38 +L49 +L93 +L93 +R99 +R53 +L4 +L325 +L62 +R47 +R972 +L37 +L95 +L77 +L69 +R98 +R8 +R35 +R92 +R8 +L480 +R11 +R34 +R57 +L57 +R58 +L7 +L26 +L72 +R82 +R23 +R20 +R230 +R49 +L22 +L81 +L19 +L903 +R3 +L32 +L68 +L18 +R870 +L83 +R24 +L628 +L65 +R49 +R14 +R79 +R22 +R56 +L74 +L86 +R40 +L14 +R77 +L489 +L848 +R12 +L38 +R180 +R81 +R385 +L81 +L49 +R84 +L50 +R850 +R69 +L40 +L38 +R29 +R770 +L61 +R76 +L56 +R51 +R38 +R13 +R68 +L911 +L65 +R957 +R28 +R72 +L52 +L348 +L48 +R966 +L18 +L53 +L51 +R743 +L39 +L997 +L3 +R811 +R70 +R19 +R24 +L24 +L22 +L852 +R74 +R47 +R98 +L45 +R35 +R579 +L39 +L90 +L616 +L68 +R4 +R35 +R10 +L53 +L3 +R606 +R62 +R64 +R74 +R92 +L36 +R44 +L73 +R73 +R50 +L50 +R2 +L9 +R707 +L56 +L44 +L86 +R86 +R24 +L78 +L93 +L53 +R37 +R76 +R587 +R286 +L70 +R76 +R8 +R95 +L859 +L36 +R79 +L25 +R32 +L386 +L64 +L33 +L46 +L651 +L34 +L72 +R118 +L51 +L11 +L65 +L15 +R186 +R38 +L49 +L32 +L19 +L22 +L9 +R731 +L73 +L871 +L43 +L3 +R479 +R55 +R50 +R6 +L62 +L38 +R76 +R786 +R38 +L83 +L17 +R713 +L614 +R71 +R93 +L63 +L60 +R67 +R93 +L629 +L37 +L34 +L91 +L909 +L642 +R242 +R192 +R2 +L94 +L70 +L30 +R49 +L80 +L8 +L24 +R97 +R66 +L98 +R576 +L178 +L94 +R74 +L380 +R53 +L51 +R456 +L58 +R61 +R39 +L6 +L75 +L619 +R17 +L96 +R51 +R19 +R30 +R79 +L347 +L77 +L76 +R11 +L11 +L30 +R230 +R93 +L94 +L79 +L580 +L24 +R51 +L59 +L8 +R39 +L50 +R33 +L84 +R62 +R92 +L10 +L82 +L40 +L60 +L103 +R37 +L634 +R82 +R334 +R84 +L72 +L528 +R4 +L4 +R89 +R55 +L44 +R47 +R691 +R72 +L10 +R75 +L16 +R41 +L77 +R66 +L7 +R96 +R81 +L59 +R48 +R469 +L56 +L17 +R108 +R48 +R75 +L61 +L90 +R74 +R2 +L20 +L259 +L21 +R47 +R453 +R118 +L67 +R63 +L472 +L96 +R54 +L6 +R6 +L66 +L34 +L89 +L11 +L865 +L75 +L60 +L16 +R36 +R80 +L97 +L55 +R836 +L1 +R17 +L41 +L59 +L57 +L43 +L63 +R15 +L34 +L51 +R75 +R58 +L46 +L54 +L61 +L39 +R20 +L720 +L97 +R98 +L76 +R81 +L692 +R76 +L16 +L260 +R86 +L72 +L28 +L601 +L499 +R512 +L79 +R76 +R691 +L1 +L63 +R95 +L26 +L38 +L16 +L11 +L69 +L59 +L8 +R96 +R11 +R89 +L17 +L83 +L531 +R531 +R94 +L94 +R867 +R50 +L117 +R430 +R96 +R62 +R12 +L24 +L76 +L232 +R32 +R7 +R193 +L51 +R34 +R17 +L37 +R37 +L44 +L53 +R30 +L91 +L34 +R92 +L96 +R10 +R920 +L86 +R50 +L59 +L39 +R11 +L89 +R48 +L70 +R63 +L563 +L72 +R272 +R92 +L22 +L10 +L60 +L16 +R71 +L14 +R39 +R76 +R8 +R968 +R68 +R43 +R30 +L73 +L49 +L876 +R25 +L21 +R84 +L563 +R78 +L1 +L79 +L547 +R49 +R20 +R74 +R776 +L85 +L779 +R83 +R11 +R43 +R57 +R552 +L151 +R58 +R23 +R18 +R72 +L72 +R116 +R79 +R42 +L37 +L96 +L4 +L58 +R781 +R77 +L551 +R9 +R85 +R405 +R477 +R14 +R58 +R51 +R47 +L671 +R503 +R32 +R96 +L42 +R87 +L120 +R67 +L246 +R25 +R74 +R65 +R21 +L25 +R32 +L85 +L72 +L436 +R45 +L115 +L352 +L87 +L99 +R930 +L94 +R29 +R43 +R57 +R77 +R66 +R441 +L33 +L64 +R175 +L676 +R449 +R27 +R81 +L61 +L97 +R58 +L65 +L91 +R310 +R46 +R25 +L5 +L63 +L6 +R14 +R35 +R22 +R90 +L44 +L749 +R58 +L77 +R77 +L97 +L669 +R959 +R30 +L97 +R97 +L169 +L90 +R61 +L94 +L8 +L7 +L48 +R55 +L52 +R452 +L63 +R63 +R88 +L97 +L291 +L30 +L388 +R46 +R27 +R57 +R48 +R25 +R15 +R85 +L85 +L37 +R79 +L949 +R12 +L39 +R34 +L94 +R371 +R288 +R35 +R36 +L36 +R6 +R97 +R41 +R56 +R74 +L274 +L893 +R80 +L87 +R44 +R299 +L3 +R86 +R74 +R1 +L30 +L63 +L8 +L79 +R5 +R74 +R60 +R27 +R13 +R77 +L73 +R77 +L305 +R424 +R12 +R90 +R860 +R219 +L62 +L82 +R63 +R38 +L982 +R44 +R85 +R88 +L36 +R63 +R32 +L70 +L284 +R52 +R54 +R16 +L13 +L6 +L208 +L60 +L21 +L92 +L64 +R118 +R7 +R653 +R20 +L269 +L43 +R35 +L174 +L83 +R51 +R60 +L11 +L39 +R39 +R83 +R17 +R85 +L47 +R462 +L71 +L74 +R4 +R86 +R22 +L67 +R65 +L588 +L77 +R80 +L80 +L7 +L93 +L94 +R728 +L401 +L6 +L157 +R835 +R95 +L450 +R24 +R26 +L58 +L24 +L78 +R60 +R818 +R22 +R60 +R169 +L17 +R248 +R29 +R71 +L93 +L413 +L24 +R903 +R759 +L65 +L567 +L67 +L42 +R9 +R78 +L87 +R993 +R26 +L310 +R17 +R83 +R327 +L27 +R44 +R19 +R85 +L94 +L24 +L31 +R1 +R6 +R78 +L11 +R27 +R314 +L22 +R92 +R12 +R4 +R39 +L36 +L285 +L42 +L75 +L42 +L989 +R3 +L822 +R49 +L958 +R76 +R82 +L369 +L56 +L811 +R8 +L72 +R74 +R82 +L256 +L15 +R50 +R80 +R85 +R562 +R43 +R95 +R833 +R19 +R664 +R22 +L98 +L40 +L93 +R593 +L95 +R52 +L15 +R13 +R82 +R667 +R39 +L10 +L33 +L40 +R40 +L27 +L28 +L14 +R61 +L192 +R63 +L763 +R47 +R77 +L988 +L41 +R319 +L14 +L682 +R82 +R297 +L97 +L63 +L37 +R76 +L27 +R51 +R74 +R126 +R39 +L39 +L55 +R55 +R65 +L365 +L40 +R92 +R71 +R77 +L43 +L95 +L640 +L322 +L99 +L75 +R86 +R103 +R33 +R98 +R5 +R49 +L86 +L799 +L466 +L18 +L87 +L44 +R62 +L88 +L74 +L754 +R54 +L993 +L38 +R281 +L5 +R84 +R71 +L83 +L17 +R75 +R15 +R85 +R88 +R99 +L62 +L37 +L563 +R63 +R631 +L73 +L58 +R59 +L19 +R46 +R58 +L807 +R74 +L74 +R2 +L623 +R121 +L490 +R18 +R18 +L60 +L83 +L66 +L33 +R96 +R68 +R59 +L3 +L41 +R66 +L16 +L33 +R84 +L84 +R18 +L37 +R19 +L992 +L8 +R28 +R207 +L181 +L58 +R304 +R2 +L30 +R28 +R25 +L20 +R95 +R97 +R48 +R27 +R581 +L85 +L6 +L62 +L54 +L642 +L4 +L153 +R48 +L95 +R94 +L15 +L779 +L31 +L69 +R43 +L43 +R11 +L367 +R56 +R875 +R25 +R10 +L710 +L29 +R81 +L2 +L89 +R25 +R14 +L50 +R50 +R8 +L54 +R91 +R55 +R60 +R240 +L60 +L42 +R98 +R74 +L51 +R26 +R16 +L81 +L38 +R55 +L897 +L18 +L139 +R32 +R25 +L35 +L15 +L54 +R61 +L16 +R59 +L84 +R81 +L97 +R537 +L64 +L733 +R50 +L94 +L52 +R56 +L33 +R33 +R89 +L789 +L44 +L34 +R14 +R39 +L75 +R62 +L73 +R11 +R92 +L34 +L4 +R51 +R55 +R14 +R65 +L831 +R63 +R18 +R739 +L59 +R31 +L102 +L71 +R33 +R859 +R881 +L31 +R77 +L96 +L21 +L49 +L14 +R50 +R5 +R410 +L38 +R57 +L150 +R98 +R140 +L737 +R92 +L93 +R769 +R31 +L40 +R62 +R74 +L18 +R22 +L804 +R5 +L1 +R93 +R9 +R98 +R2 +R274 +L21 +L702 +R47 +R56 +R35 +L83 +L59 +R22 +R29 +R8 +L8 +L5 +R5 +R606 +R966 +R28 +L11 +L82 +L7 +L61 +L39 +L848 +R48 +R25 +R75 +R88 +L57 +R69 +R14 +L14 +L63 +L37 +L64 +R98 +L34 +R64 +R89 +R94 +L89 +R42 +L70 +L9 +R25 +R75 +R567 +R51 +L39 +L724 +L76 +L81 +L90 +L41 +R18 +L86 +R680 +L87 +R87 +R417 +R83 +L29 +L7 +L933 +L31 +R58 +R42 +L66 +R92 +L26 +L69 +L66 +R50 +L52 +L63 +R41 +R13 +L54 +L10 +R876 +R34 +L86 +R50 +L51 +L13 +L72 +L7 +L106 +L3 +L96 +L216 +L182 +L18 +L19 +L64 +R83 +L91 +L46 +R42 +R99 +L4 +L43 +L24 +L51 +R818 +R58 +L68 +L34 +R44 +L895 +R320 +R881 +R24 +L72 +R42 +R46 +R54 +R67 +R33 +R763 +R61 +R776 +R57 +R78 +L35 +R23 +R23 +L89 +R43 +L81 +L73 +R46 +R8 +R99 +L99 +R929 +L29 +R160 +L60 +R99 +L99 +R91 +L53 +L85 +L87 +R785 +R315 +R82 +R320 +R87 +L26 +L540 +L128 +R39 +L869 +L66 +L65 +R55 +L355 +R64 +L63 +R399 +L4 +L96 +R937 +R292 +L238 +R209 +R81 +L212 +R26 +L95 +L421 +R21 +R9 +R935 +R85 +R63 +L180 +L12 +L75 +L97 +R472 +L279 +L7 +R386 +L2 +L98 +L462 +L182 +L82 +R49 +L23 +L699 +L97 +R10 +L44 +R153 +L67 +R44 +L64 +R70 +L6 +R82 +R46 +R72 +L46 +R482 +L76 +L875 +L85 +R80 +R20 +R87 +R13 +L85 +L240 +L75 +R47 +R53 +R92 +R71 +L72 +L73 +L418 +L31 +L8 +L72 +L38 +L51 +R60 +R5 +R35 +R48 +L48 +L56 +R43 +L119 +R32 +R83 +R17 +R47 +L85 +R438 +R11 +L875 +R64 +R49 +R777 +R13 +R61 +L21 +L62 +L42 +R25 +L80 +L85 +L14 +R79 +L4 +R81 +L52 +L25 +R52 +R7 +R366 +L25 +R1 +L31 +R33 +R557 +R22 +R53 +R51 +L44 +R22 +L88 +R4 +L80 +L90 +R690 +R20 +R37 +R143 +R39 +L98 +L41 +L48 +R48 +L2 +R93 +L91 +L74 +R774 +L18 +R57 +L668 +L34 +R2 +L40 +L199 +R69 +R31 +R28 +L28 +R45 +L85 +L478 +R98 +L9 +L22 +L371 +L78 +L407 +L93 +R615 +R3 +R431 +L49 +R819 +R97 +L90 +L26 +L87 +L13 +R50 +L22 +L56 +R36 +L8 +R10 +L10 +L49 +R49 +R10 +R90 +L55 +L45 +R82 +L28 +L367 +R26 +L543 +L40 +L37 +L85 +R92 +L689 +R29 +R86 +L221 +R16 +R33 +L54 +L36 +L6 +L66 +R97 +R95 +L684 +L98 +L2 +R1 +R199 +R21 +R379 +L2 +R2 +L4 +R604 +R66 +R67 +L933 +R827 +R66 +R7 +R47 +R53 +L61 +L39 +R7 +R74 +L81 +R584 +R16 +R40 +R50 +R10 +L52 +R52 +L621 +R64 +L8 +R91 +L126 +R18 +L83 +R97 +R62 +L855 +L22 +R83 +L512 +R79 +L49 +L98 +L51 +L69 +R29 +R383 +L53 +L459 +L29 +L26 +L35 +L10 +L7 +R7 +R42 +R58 +L46 +L661 +L74 +R86 +L71 +R81 +R253 +R32 +L39 +R19 +R51 +L75 +L63 +R7 +R725 +R7 +R68 +R576 +L76 +R53 +L54 +R91 +L90 +R20 +L20 +R67 +L60 +R14 +R379 +L693 +L7 +L4 +L19 +R7 +R84 +R18 +R87 +L10 +R34 +R13 +R76 +R41 +L134 +L93 +L935 +L65 +L21 +R24 +L17 +R913 +R1 +L59 +R73 +L14 +R91 +R109 +R98 +R11 +R72 +R519 +L70 +R93 +L27 +L96 +L30 +L121 +L49 +R35 +R65 +L85 +R6 +R69 +L94 +R404 +R52 +L131 +L319 +R98 +R2 +L502 +L86 +L414 +L89 +R89 +L51 +R41 +L187 +R88 +R109 +L27 +R27 +R85 +R366 +L51 +L92 +L8 +L33 +R433 +R946 +L47 +R72 +R495 +L87 +R89 +R37 +R52 +L57 +R86 +R35 +R96 +L74 +L72 +L555 +L36 +L45 +R49 +L209 +R343 +L26 +L36 +R84 +R60 +L18 +L84 +R710 +L8 +L66 +R66 +R555 +R45 +R38 +R662 +L18 +L82 +L17 +L83 +R84 +R16 +L43 +L22 +R90 +L272 +R47 +L43 +L57 +R33 +R97 +R970 +L13 +R11 +R802 +R34 +R75 +L569 +R83 +L23 +R86 +R4 +R4 +R6 +R36 +R68 +R98 +R21 +R830 +R55 +R83 +L702 +R11 +L96 +R42 +R54 +R22 +L48 +L7 +L67 +R82 +R846 +R7 +R713 +R475 +R16 +R61 +L14 +L398 +R12 +L65 +R65 +L64 +R64 +R92 +R16 +R53 +R72 +R42 +R28 +L3 +L91 +R391 +R30 +R270 +R573 +R40 +R598 +L31 +R32 +L24 +L83 +L434 +R72 +R86 +R71 +R41 +L41 +L91 +R71 +R20 +R31 +R10 +R56 +L97 +L3 +R12 +L9 +R69 +R831 +L80 +L37 +R24 +R51 +L59 +L499 +L53 +L91 +L71 +R24 +R9 +R169 +L187 +R66 +L64 +R685 +R13 +R17 +L30 +R13 +L3 +L79 +R80 +R21 +L98 +L52 +L759 +R347 +R90 +L7 +R5 +L45 +R16 +L67 +L719 +R8 +L39 +L899 +L861 +R187 +R74 +R49 +L49 +R81 +L66 +R82 +R954 +L35 +L34 +R105 +R113 +R3 +L70 +L48 +R68 +L45 +L28 +R820 +L62 +R62 +R524 +R73 +L92 +R96 +R10 +L38 +L73 +L55 +L34 +R822 +L45 +L88 +L19 +R19 +L67 +R98 +L43 +L36 +R48 +R83 +R70 +R45 +R502 +L12 +L365 +L23 +R805 +R95 +L83 +L20 +R3 +R3 +R72 +L75 +R27 +L17 +R548 +R42 +L8 +R42 +R5 +L65 +L2 +L83 +R46 +R165 +L933 +L96 +L30 +R59 +R92 +R66 +R60 +L18 +L97 +L3 +L53 +L281 +R23 +L769 +R98 +L74 +R61 +L79 +L85 +L82 +L4 +R45 +R130 +R70 +L99 +R71 +R84 +L87 +L45 +L24 +L4 +R87 +L88 +L42 +R47 +R22 +R84 +L73 +L33 +R11 +L50 +L55 +L6 +R72 +L56 +R93 +L209 +R2 +L352 +L14 +R7 +R99 +L534 +R69 +L1 +R24 +L70 +R70 +R54 +L16 +L90 +R26 +L74 +L81 +L912 +L7 +R53 +R99 +L52 +R1 +L1 +L150 +R30 +R20 +L77 +L97 +L74 +L56 +L38 +L8 +L50 +L63 +L9 +L88 +L97 +L75 +R14 +R89 +L71 +L62 +L38 +R46 +R40 +R14 +R29 +L29 +L993 +R491 +R598 +L96 +R11 +R859 +R22 +R34 +L26 +L43 +R939 +R72 +L96 +R60 +L1 +L23 +R24 +R81 +R87 +R17 +R75 +L82 +R81 +L62 +R835 +L7 +L57 +L28 +R9 +L9 +L25 +R640 +R13 +L63 +L637 +R71 +L86 +L29 +R644 +L53 +R62 +R98 +L7 +R43 +R49 +L92 +R53 +R47 +R17 +R45 +L62 +L251 +R51 +R2 +L2 +L83 +R383 +R98 +R502 +R99 +L281 +R97 +R85 +R4 +L912 +L92 +L8 +L92 +R238 +L502 +L61 +R325 +L75 +R72 +L77 +R10 +L30 +L88 +L95 +R83 +R55 +R56 +R5 +L89 +L127 +L3 +L97 +R259 +L59 +L498 +R198 +R9 +L63 +L446 +L36 +R33 +L597 +R46 +R7 +R85 +R62 +L334 +R34 +L871 +L315 +R61 +R58 +L33 +R73 +R927 +L44 +L516 +L49 +R9 +L10 +L438 +L3 +L47 +R72 +R826 +R927 +R34 +R643 +L4 +L34 +R34 +L42 +R93 +R14 +L61 +R21 +R75 +L59 +R74 +L15 +L3 +L48 +L22 +R96 +R732 +L317 +R16 +R24 +L68 +R90 +R70 +L47 +L23 +R43 +L43 +R32 +L32 +L76 +L11 +L7 +R94 +R844 +R43 +L77 +L110 +R75 +R25 +R2 +R98 +R65 +L41 +R76 +L778 +R78 +L59 +L41 +L45 +R845 +R4 +L4 +L12 +L988 +L5 +R37 +L632 +R17 +R40 +L383 +R93 +L131 +L42 +R47 +L78 +R43 +L106 +R879 +L532 +L47 +L706 +L49 +R978 +L23 +R57 +R57 +L83 +L10 +L21 +L66 +L14 +L20 +R65 +R35 +L69 +L69 +R238 +L803 +R21 +L93 +R897 +L23 +R1 +L10 +R310 +R77 +L77 +L256 +L381 +R12 +L553 +R13 +R65 +R36 +L85 +R49 +L18 +R41 +L56 +L45 +R78 +R377 +L92 +R2 +L67 +R80 +R427 +L27 +L6 +R52 +L28 +R50 +L63 +L5 +L79 +L131 +L4 +L7 +R35 +L214 +L121 +R3 +L29 +L696 +R74 +R74 +R95 +L50 +R45 +R5 +L19 +L118 +R99 +L96 +L98 +L31 +L94 +L25 +L293 +R275 +L38 +R838 +L90 +R81 +L91 +L59 +L841 +R53 +L75 +L78 +R78 +R22 +R83 +R64 +R60 +L50 +L77 +R20 +R52 +R14 +L48 +L668 +R30 +L380 +R597 +R887 +R42 +L87 +L39 +L88 +R13 +R728 +R92 +L51 +R897 +R9 +R81 +L95 +R88 +L974 +R35 +L535 +R7 +R10 +R83 +L74 +R66 +R708 +R12 +R513 +R14 +R61 +R98 +R24 +L21 +R327 +L28 +R70 +L70 +L2 +L51 +R75 +R392 +R670 +L938 +R87 +R73 +R94 +R46 +L46 +R69 +R326 +R9 +L952 +L733 +L824 +R33 +R437 +L92 +L43 +L79 +L59 +R66 +L31 +L55 +L972 +R66 +L66 +R70 +R22 +R2 +L24 +L70 +L58 +L6 +R67 +L903 +R97 +R390 +R10 +L97 +R974 +L35 +L65 +L25 +R60 +L9 +L17 +R33 +R48 +L786 +R55 +L79 +R99 +L102 +L21 +R70 +R165 +R65 +L63 +R56 +L123 +L496 +R535 +L439 +L916 +R99 +R556 +L25 +R14 +L36 +L78 +L714 +L77 +L38 +L85 +L301 +L91 +L70 +L905 +L25 +L6 +R98 +L38 +L37 +R354 +L79 +L881 +R76 +L95 +L660 +L26 +L14 +R832 +R84 +L71 +L27 +R82 +R17 +R922 +L35 +L82 +L16 +R16 +R952 +R5 +R29 +L64 +L44 +R47 +R12 +R735 +L94 +R68 +R50 +L18 +L92 +R92 +R65 +L65 +L53 +R53 +L85 +L20 +L81 +L89 +R75 +L92 +R92 +R8 +R354 +L162 +R63 +R37 +L944 +R26 +R18 +L14 +R14 +R57 +L35 +L793 +R71 +L59 +R359 +L42 +L87 +R76 +L47 +R48 +L82 +L66 +R54 +L54 +R72 +R55 +L127 +L553 +R53 +L74 +L106 +R22 +L76 +L16 +L250 +L862 +L206 +L15 +R87 +L740 +R73 +R963 +L64 +L66 +R917 +L98 +R49 +R30 +L18 +R45 +R5 +R88 +R12 +R45 +L45 +R63 +L429 +R37 +L42 +R71 +R266 +R559 +L63 +R33 +L95 +L59 +R159 +R81 +L35 +R25 +L3 +R14 +L82 +L54 +L46 +R99 +R1 +R98 +R2 +R73 +L64 +R10 +R81 +L27 +L21 +L69 +R612 +R91 +R27 +R87 +R309 +R8 +L70 +R42 +R288 +L877 +L16 +L74 +L77 +R60 +R40 +R33 +L66 +L88 +R88 +L41 +L59 +L86 +L96 +L818 +L17 +R85 +L74 +L35 +L28 +R361 +L818 +R80 +L54 +L65 +R69 +L3 +R38 +L539 +R683 +L78 +R53 +L82 +L29 +L24 +L95 +R72 +L41 +R42 +L52 +L21 +L13 +R561 +L63 +R87 +L13 +L47 +R76 +R97 +R62 +L75 +R7 +L407 +R29 +L29 +L45 +L955 +R92 +L11 +L502 +L50 +L18 +L91 +L420 +R930 +R70 +R78 +R22 +R32 +R68 +R546 +L290 +L6 +L15 +R65 +R60 +L99 +R81 +R658 +L768 +L32 +R903 +L67 +R52 +L88 +R99 +L99 +R563 +L63 +L57 +R889 +L359 +L113 +L22 +R34 +L23 +R51 +L10 +R98 +R12 +R35 +R83 +L18 +L63 +L84 +L23 +L84 +L46 +L31 +R303 +R30 +R98 +L93 +R263 +R453 +R77 +L58 +L42 +L97 +L49 +L24 +R81 +R89 +L82 +R959 +R61 +R8 +L288 +R51 +R60 +R37 +R31 +R563 +L42 +L58 +L75 +R77 +L923 +L89 +L64 +L97 +R271 +L14 +L786 +L47 +R47 +L74 +L53 +L863 +R69 +R79 +R16 +L74 +L66 +R366 +L101 +R664 +R7 +R68 +L38 +L82 +L18 +R75 +L99 +L15 +R30 +L91 +L53 +R53 +L589 +L11 +R38 +L32 +R13 +L51 +R497 +R2 +L94 +L92 +L53 +L20 +L10 +R2 +R295 +L238 +L556 +R20 +L37 +L84 +L39 +R72 +L67 +R34 +L49 +L22 +R40 +L69 +L748 +L753 +L99 +R594 +R94 +L13 +L11 +R87 +R46 +L95 +R70 +R28 +R653 +R47 +R567 +L54 +L913 +L769 +R65 +L96 +L7 +L84 +R63 +L554 +L19 +R1 +L21 +R21 +L121 +L210 +R47 +L16 +R90 +R94 +L484 +L63 +R29 +L66 +L563 +R930 +L608 +R41 +R69 +R31 +R84 +R18 +L27 +L75 +R12 +R5 +L60 +L19 +R362 +L62 +R976 +R406 +L90 +R53 +R59 +L42 +R16 +R53 +R50 +L319 +L38 +R67 +R53 +R74 +L56 +R718 +R82 +L33 +L67 +L46 +L654 +L78 +L91 +L407 +L87 +L361 +L76 +R774 +R77 +R49 +L91 +L72 +L37 +R53 +R608 +L61 +R53 +L882 +R39 +R90 +R664 +R22 +R83 +R52 +R34 +R45 +L27 +L98 +R82 +L90 +R57 +L406 +L531 +R87 +R81 +R75 +L17 +L17 +R63 +L59 +L81 +R74 +R7 +R94 +L894 +L60 +L85 +L56 +L55 +L14 +L30 +L9 +L89 +L47 +R45 +L50 +L14 +L36 +L79 +L21 +R97 +L93 +R55 +R41 +L32 +L68 +R32 +R72 +R96 +L50 +R82 +R68 +R8 +L44 +R36 +L89 +R41 +R24 +R15 +R9 +R43 +L24 +R66 +R75 +R40 +L65 +L45 +L55 +L59 +L48 +L28 +R91 +L11 +L80 +R6 +R99 +L61 +L42 +L6 +R91 +R13 +L30 +R30 +L41 +R41 +L97 +R24 +L81 +R54 +L28 +R28 +L23 +R42 +L4 +L17 +R32 +R70 +L72 +L40 +R42 +L10 +L7 +R6 +R48 +L35 +R28 +L14 +R42 +R24 +L5 +L7 +L44 +L30 +L30 +R25 +R37 +R48 +L31 +L18 +L27 +R20 +L15 +R22 +L26 +R23 +L11 +L46 +L25 +R2 +L40 +L40 +L42 +R32 +R17 +R10 +R13 +R2 +L34 +R14 +L24 +L41 +R2 +L41 +R32 +L5 +R23 +L16 +R39 \ No newline at end of file diff --git a/input/day01_test1 b/input/day01_test1 index e69de29..d03fad7 100644 --- a/input/day01_test1 +++ b/input/day01_test1 @@ -0,0 +1,10 @@ +L68 +L30 +R48 +L5 +R60 +L55 +L1 +L99 +R14 +L82 \ No newline at end of file diff --git a/input/day01_test2 b/input/day01_test2 index e69de29..d03fad7 100644 --- a/input/day01_test2 +++ b/input/day01_test2 @@ -0,0 +1,10 @@ +L68 +L30 +R48 +L5 +R60 +L55 +L1 +L99 +R14 +L82 \ No newline at end of file diff --git a/input/day13 b/input/day13 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day13_test1 b/input/day13_test1 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day13_test2 b/input/day13_test2 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day14 b/input/day14 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day14_test1 b/input/day14_test1 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day14_test2 b/input/day14_test2 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day15 b/input/day15 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day15_test1 b/input/day15_test1 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day15_test2 b/input/day15_test2 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day16 b/input/day16 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day16_test1 b/input/day16_test1 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day16_test2 b/input/day16_test2 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day17 b/input/day17 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day17_test1 b/input/day17_test1 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day17_test2 b/input/day17_test2 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day18 b/input/day18 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day18_test1 b/input/day18_test1 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day18_test2 b/input/day18_test2 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day19 b/input/day19 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day19_test1 b/input/day19_test1 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day19_test2 b/input/day19_test2 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day20 b/input/day20 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day20_test1 b/input/day20_test1 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day20_test2 b/input/day20_test2 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day21 b/input/day21 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day21_test1 b/input/day21_test1 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day21_test2 b/input/day21_test2 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day22 b/input/day22 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day22_test1 b/input/day22_test1 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day22_test2 b/input/day22_test2 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day23 b/input/day23 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day23_test1 b/input/day23_test1 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day23_test2 b/input/day23_test2 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day24 b/input/day24 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day24_test1 b/input/day24_test1 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day24_test2 b/input/day24_test2 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day25 b/input/day25 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day25_test1 b/input/day25_test1 deleted file mode 100644 index e69de29..0000000 diff --git a/input/day25_test2 b/input/day25_test2 deleted file mode 100644 index e69de29..0000000 diff --git a/src/main.rs b/src/main.rs index f19220b..3b9e25d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,6 @@ +// Allow dead code for days not yet implemented +#![allow(dead_code)] + mod solutions; mod utils; diff --git a/src/solutions/day01.rs b/src/solutions/day01.rs index 9c6edbc..5cd9d39 100644 --- a/src/solutions/day01.rs +++ b/src/solutions/day01.rs @@ -5,16 +5,16 @@ pub struct Day01 {} impl Solution for Day01 { fn part1( &self, - _input: &mut Vec, + input: &mut Vec, ) -> Result, Box> { - Ok(Box::new("Ready")) + Ok(Box::new(Day01::count_zeros(input, false))) } fn part2( &self, - _input: &mut Vec, + input: &mut Vec, ) -> Result, Box> { - Ok(Box::new("Ready")) + Ok(Box::new(Day01::count_zeros(input, true))) } fn get_day(&self) -> u8 { @@ -22,7 +22,59 @@ impl Solution for Day01 { } } -impl Day01 {} +impl Day01 { + fn count_zeros(input: &Vec, count_passing: bool) -> usize { + // Dial starts at 50 + let mut pos: i64 = 50; + let mut zeros: usize = 0; + + for line in input { + let line = line.trim(); + if line.is_empty() { + continue; + } + + let mut chars = line.chars(); + let dir = chars.next().expect("empty line"); + let dist_str: String = chars.collect::().trim().to_string(); + let dist: i64 = dist_str.parse().expect("invalid distance number"); + + // Count any time that the dial moves past 0. + if count_passing { + // Count all zeros passed during the move + let step = match dir { + 'L' | 'l' => -1, + 'R' | 'r' => 1, + _ => panic!("invalid direction (must start with L or R): {}", dir), + }; + + for _ in 0..dist { + pos = (pos + step).rem_euclid(100); + if pos == 0 { + zeros += 1; + } + } + continue; + } + + // Move directly to the new position + match dir { + 'L' | 'l' => { + pos = (pos - dist).rem_euclid(100); + } + 'R' | 'r' => { + pos = (pos + dist).rem_euclid(100); + } + _ => panic!("invalid direction (must start with L or R): {}", dir), + } + + if pos == 0 { + zeros += 1; + } + } + zeros + } +} /// Test from puzzle input #[cfg(test)] @@ -44,7 +96,7 @@ mod test { .unwrap() .to_string(); - assert_eq!(answer, "Ready"); + assert_eq!(answer, "3"); } #[test] @@ -61,6 +113,6 @@ mod test { .unwrap() .to_string(); - assert_eq!(answer, "Ready"); + assert_eq!(answer, "6"); } } diff --git a/src/solutions/day13.rs b/src/solutions/day13.rs deleted file mode 100644 index 20a3ae8..0000000 --- a/src/solutions/day13.rs +++ /dev/null @@ -1,66 +0,0 @@ -use super::Solution; - -pub struct Day13 {} - -impl Solution for Day13 { - fn part1( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn part2( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn get_day(&self) -> u8 { - 13 - } -} - -impl Day13 {} - -/// Test from puzzle input -#[cfg(test)] -mod test { - use super::*; - use crate::*; - - #[test] - fn part1() { - let challenge = day13::Day13 {}; - - //Complete the Challenge - let answer = challenge - .part1( - utils::get_input(challenge.get_day(), utils::InputType::Test1) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } - - #[test] - fn part2() { - let challenge = day13::Day13 {}; - - //Complete the Challenge - let answer = challenge - .part2( - utils::get_input(challenge.get_day(), utils::InputType::Test2) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } -} diff --git a/src/solutions/day14.rs b/src/solutions/day14.rs deleted file mode 100644 index eee2290..0000000 --- a/src/solutions/day14.rs +++ /dev/null @@ -1,66 +0,0 @@ -use super::Solution; - -pub struct Day14 {} - -impl Solution for Day14 { - fn part1( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn part2( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn get_day(&self) -> u8 { - 14 - } -} - -impl Day14 {} - -/// Test from puzzle input -#[cfg(test)] -mod test { - use super::*; - use crate::*; - - #[test] - fn part1() { - let challenge = day14::Day14 {}; - - //Complete the Challenge - let answer = challenge - .part1( - utils::get_input(challenge.get_day(), utils::InputType::Test1) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } - - #[test] - fn part2() { - let challenge = day14::Day14 {}; - - //Complete the Challenge - let answer = challenge - .part2( - utils::get_input(challenge.get_day(), utils::InputType::Test2) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } -} diff --git a/src/solutions/day15.rs b/src/solutions/day15.rs deleted file mode 100644 index 38322e2..0000000 --- a/src/solutions/day15.rs +++ /dev/null @@ -1,66 +0,0 @@ -use super::Solution; - -pub struct Day15 {} - -impl Solution for Day15 { - fn part1( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn part2( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn get_day(&self) -> u8 { - 15 - } -} - -impl Day15 {} - -/// Test from puzzle input -#[cfg(test)] -mod test { - use super::*; - use crate::*; - - #[test] - fn part1() { - let challenge = day15::Day15 {}; - - //Complete the Challenge - let answer = challenge - .part1( - utils::get_input(challenge.get_day(), utils::InputType::Test1) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } - - #[test] - fn part2() { - let challenge = day15::Day15 {}; - - //Complete the Challenge - let answer = challenge - .part2( - utils::get_input(challenge.get_day(), utils::InputType::Test2) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } -} diff --git a/src/solutions/day16.rs b/src/solutions/day16.rs deleted file mode 100644 index 9c1fe90..0000000 --- a/src/solutions/day16.rs +++ /dev/null @@ -1,66 +0,0 @@ -use super::Solution; - -pub struct Day16 {} - -impl Solution for Day16 { - fn part1( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn part2( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn get_day(&self) -> u8 { - 16 - } -} - -impl Day16 {} - -/// Test from puzzle input -#[cfg(test)] -mod test { - use super::*; - use crate::*; - - #[test] - fn part1() { - let challenge = day16::Day16 {}; - - //Complete the Challenge - let answer = challenge - .part1( - utils::get_input(challenge.get_day(), utils::InputType::Test1) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } - - #[test] - fn part2() { - let challenge = day16::Day16 {}; - - //Complete the Challenge - let answer = challenge - .part2( - utils::get_input(challenge.get_day(), utils::InputType::Test2) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } -} diff --git a/src/solutions/day17.rs b/src/solutions/day17.rs deleted file mode 100644 index 2f7dba5..0000000 --- a/src/solutions/day17.rs +++ /dev/null @@ -1,66 +0,0 @@ -use super::Solution; - -pub struct Day17 {} - -impl Solution for Day17 { - fn part1( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn part2( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn get_day(&self) -> u8 { - 17 - } -} - -impl Day17 {} - -/// Test from puzzle input -#[cfg(test)] -mod test { - use super::*; - use crate::*; - - #[test] - fn part1() { - let challenge = day17::Day17 {}; - - //Complete the Challenge - let answer = challenge - .part1( - utils::get_input(challenge.get_day(), utils::InputType::Test1) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } - - #[test] - fn part2() { - let challenge = day17::Day17 {}; - - //Complete the Challenge - let answer = challenge - .part2( - utils::get_input(challenge.get_day(), utils::InputType::Test2) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } -} diff --git a/src/solutions/day18.rs b/src/solutions/day18.rs deleted file mode 100644 index 4db1e9c..0000000 --- a/src/solutions/day18.rs +++ /dev/null @@ -1,66 +0,0 @@ -use super::Solution; - -pub struct Day18 {} - -impl Solution for Day18 { - fn part1( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn part2( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn get_day(&self) -> u8 { - 18 - } -} - -impl Day18 {} - -/// Test from puzzle input -#[cfg(test)] -mod test { - use super::*; - use crate::*; - - #[test] - fn part1() { - let challenge = day18::Day18 {}; - - //Complete the Challenge - let answer = challenge - .part1( - utils::get_input(challenge.get_day(), utils::InputType::Test1) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } - - #[test] - fn part2() { - let challenge = day18::Day18 {}; - - //Complete the Challenge - let answer = challenge - .part2( - utils::get_input(challenge.get_day(), utils::InputType::Test2) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } -} diff --git a/src/solutions/day19.rs b/src/solutions/day19.rs deleted file mode 100644 index babf9c7..0000000 --- a/src/solutions/day19.rs +++ /dev/null @@ -1,66 +0,0 @@ -use super::Solution; - -pub struct Day19 {} - -impl Solution for Day19 { - fn part1( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn part2( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn get_day(&self) -> u8 { - 19 - } -} - -impl Day19 {} - -/// Test from puzzle input -#[cfg(test)] -mod test { - use super::*; - use crate::*; - - #[test] - fn part1() { - let challenge = day19::Day19 {}; - - //Complete the Challenge - let answer = challenge - .part1( - utils::get_input(challenge.get_day(), utils::InputType::Test1) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } - - #[test] - fn part2() { - let challenge = day19::Day19 {}; - - //Complete the Challenge - let answer = challenge - .part2( - utils::get_input(challenge.get_day(), utils::InputType::Test2) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } -} diff --git a/src/solutions/day20.rs b/src/solutions/day20.rs deleted file mode 100644 index e4f3d4a..0000000 --- a/src/solutions/day20.rs +++ /dev/null @@ -1,66 +0,0 @@ -use super::Solution; - -pub struct Day20 {} - -impl Solution for Day20 { - fn part1( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn part2( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn get_day(&self) -> u8 { - 20 - } -} - -impl Day20 {} - -/// Test from puzzle input -#[cfg(test)] -mod test { - use super::*; - use crate::*; - - #[test] - fn part1() { - let challenge = day20::Day20 {}; - - //Complete the Challenge - let answer = challenge - .part1( - utils::get_input(challenge.get_day(), utils::InputType::Test1) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } - - #[test] - fn part2() { - let challenge = day20::Day20 {}; - - //Complete the Challenge - let answer = challenge - .part2( - utils::get_input(challenge.get_day(), utils::InputType::Test2) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } -} diff --git a/src/solutions/day21.rs b/src/solutions/day21.rs deleted file mode 100644 index f4ce049..0000000 --- a/src/solutions/day21.rs +++ /dev/null @@ -1,66 +0,0 @@ -use super::Solution; - -pub struct Day21 {} - -impl Solution for Day21 { - fn part1( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn part2( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn get_day(&self) -> u8 { - 21 - } -} - -impl Day21 {} - -/// Test from puzzle input -#[cfg(test)] -mod test { - use super::*; - use crate::*; - - #[test] - fn part1() { - let challenge = day21::Day21 {}; - - //Complete the Challenge - let answer = challenge - .part1( - utils::get_input(challenge.get_day(), utils::InputType::Test1) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } - - #[test] - fn part2() { - let challenge = day21::Day21 {}; - - //Complete the Challenge - let answer = challenge - .part2( - utils::get_input(challenge.get_day(), utils::InputType::Test2) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } -} diff --git a/src/solutions/day22.rs b/src/solutions/day22.rs deleted file mode 100644 index a336b17..0000000 --- a/src/solutions/day22.rs +++ /dev/null @@ -1,66 +0,0 @@ -use super::Solution; - -pub struct Day22 {} - -impl Solution for Day22 { - fn part1( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn part2( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn get_day(&self) -> u8 { - 22 - } -} - -impl Day22 {} - -/// Test from puzzle input -#[cfg(test)] -mod test { - use super::*; - use crate::*; - - #[test] - fn part1() { - let challenge = day22::Day22 {}; - - //Complete the Challenge - let answer = challenge - .part1( - utils::get_input(challenge.get_day(), utils::InputType::Test1) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } - - #[test] - fn part2() { - let challenge = day22::Day22 {}; - - //Complete the Challenge - let answer = challenge - .part2( - utils::get_input(challenge.get_day(), utils::InputType::Test2) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } -} diff --git a/src/solutions/day23.rs b/src/solutions/day23.rs deleted file mode 100644 index 6b12cef..0000000 --- a/src/solutions/day23.rs +++ /dev/null @@ -1,66 +0,0 @@ -use super::Solution; - -pub struct Day23 {} - -impl Solution for Day23 { - fn part1( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn part2( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn get_day(&self) -> u8 { - 23 - } -} - -impl Day23 {} - -/// Test from puzzle input -#[cfg(test)] -mod test { - use super::*; - use crate::*; - - #[test] - fn part1() { - let challenge = day23::Day23 {}; - - //Complete the Challenge - let answer = challenge - .part1( - utils::get_input(challenge.get_day(), utils::InputType::Test1) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } - - #[test] - fn part2() { - let challenge = day23::Day23 {}; - - //Complete the Challenge - let answer = challenge - .part2( - utils::get_input(challenge.get_day(), utils::InputType::Test2) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } -} diff --git a/src/solutions/day24.rs b/src/solutions/day24.rs deleted file mode 100644 index 74be3fb..0000000 --- a/src/solutions/day24.rs +++ /dev/null @@ -1,66 +0,0 @@ -use super::Solution; - -pub struct Day24 {} - -impl Solution for Day24 { - fn part1( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn part2( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn get_day(&self) -> u8 { - 24 - } -} - -impl Day24 {} - -/// Test from puzzle input -#[cfg(test)] -mod test { - use super::*; - use crate::*; - - #[test] - fn part1() { - let challenge = day24::Day24 {}; - - //Complete the Challenge - let answer = challenge - .part1( - utils::get_input(challenge.get_day(), utils::InputType::Test1) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } - - #[test] - fn part2() { - let challenge = day24::Day24 {}; - - //Complete the Challenge - let answer = challenge - .part2( - utils::get_input(challenge.get_day(), utils::InputType::Test2) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } -} diff --git a/src/solutions/day25.rs b/src/solutions/day25.rs deleted file mode 100644 index 1293500..0000000 --- a/src/solutions/day25.rs +++ /dev/null @@ -1,66 +0,0 @@ -use super::Solution; - -pub struct Day25 {} - -impl Solution for Day25 { - fn part1( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn part2( - &self, - _input: &mut Vec, - ) -> Result, Box> { - Ok(Box::new("Ready")) - } - - fn get_day(&self) -> u8 { - 25 - } -} - -impl Day25 {} - -/// Test from puzzle input -#[cfg(test)] -mod test { - use super::*; - use crate::*; - - #[test] - fn part1() { - let challenge = day25::Day25 {}; - - //Complete the Challenge - let answer = challenge - .part1( - utils::get_input(challenge.get_day(), utils::InputType::Test1) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } - - #[test] - fn part2() { - let challenge = day25::Day25 {}; - - //Complete the Challenge - let answer = challenge - .part2( - utils::get_input(challenge.get_day(), utils::InputType::Test2) - .unwrap() - .as_mut(), - ) - .unwrap() - .to_string(); - - assert_eq!(answer, "Ready"); - } -} diff --git a/src/solutions/mod.rs b/src/solutions/mod.rs index e0584a5..8949770 100644 --- a/src/solutions/mod.rs +++ b/src/solutions/mod.rs @@ -10,19 +10,6 @@ pub mod day09; pub mod day10; pub mod day11; pub mod day12; -pub mod day13; -pub mod day14; -pub mod day15; -pub mod day16; -pub mod day17; -pub mod day18; -pub mod day19; -pub mod day20; -pub mod day21; -pub mod day22; -pub mod day23; -pub mod day24; -pub mod day25; use crate::utils::{self, get_input}; use std::{error::Error, fmt::Display, time::SystemTime}; diff --git a/src/utils.rs b/src/utils.rs index 10a4dec..fe5864f 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,7 +1,7 @@ use std::{ error::Error, fs::File, - io::{prelude::*, BufReader}, + io::{BufReader, prelude::*}, }; /// Enum used to specify input