diff options
| author | xander <xander@biltopia.org> | 2025-12-07 13:12:06 +0100 |
|---|---|---|
| committer | xander <xander@biltopia.org> | 2025-12-07 13:12:06 +0100 |
| commit | 516e6ed4a9066fa43d6159b2a0ec58416ab28013 (patch) | |
| tree | 9925207e97b9e6e1fd83a55bdb878c43071cf73a | |
| download | aoc2025-516e6ed4a9066fa43d6159b2a0ec58416ab28013.tar.xz aoc2025-516e6ed4a9066fa43d6159b2a0ec58416ab28013.zip | |
solve up to day 7
| -rw-r--r-- | .gitignore | 2 | ||||
| -rw-r--r-- | build.zig | 19 | ||||
| -rw-r--r-- | build.zig.zon | 17 | ||||
| -rw-r--r-- | input/1/1.txt | 4768 | ||||
| -rw-r--r-- | input/1/example.txt | 10 | ||||
| -rw-r--r-- | input/2/1.txt | 1 | ||||
| -rw-r--r-- | input/2/example.txt | 1 | ||||
| -rw-r--r-- | input/3/1.txt | 200 | ||||
| -rw-r--r-- | input/3/example.txt | 4 | ||||
| -rw-r--r-- | input/4/1.txt | 136 | ||||
| -rw-r--r-- | input/4/example.txt | 10 | ||||
| -rw-r--r-- | input/5/1.txt | 1187 | ||||
| -rw-r--r-- | input/5/example.txt | 11 | ||||
| -rw-r--r-- | input/6/1.txt | 5 | ||||
| -rw-r--r-- | input/6/example.txt | 4 | ||||
| -rw-r--r-- | input/7/1.txt | 142 | ||||
| -rw-r--r-- | input/7/example.txt | 16 | ||||
| -rwxr-xr-x | prepare | 11 | ||||
| -rwxr-xr-x | run | 3 | ||||
| -rw-r--r-- | src/day01.zig | 72 | ||||
| -rw-r--r-- | src/day02.zig | 78 | ||||
| -rw-r--r-- | src/day03.zig | 83 | ||||
| -rw-r--r-- | src/day04.zig | 99 | ||||
| -rw-r--r-- | src/day05.zig | 107 | ||||
| -rw-r--r-- | src/day06.zig | 100 | ||||
| -rw-r--r-- | src/day07.zig | 88 | ||||
| -rw-r--r-- | src/main.zig | 46 |
27 files changed, 7220 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..880cd5d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +zig-out +.zig-cache diff --git a/build.zig b/build.zig new file mode 100644 index 0000000..ac34dae --- /dev/null +++ b/build.zig @@ -0,0 +1,19 @@ +const std = @import("std"); + +pub fn build(b: *std.Build) void { + const target = b.standardTargetOptions(.{}); + const optimize = b.standardOptimizeOption(.{}); + + const mod = b.addModule("aoc2025", .{ + .root_source_file = b.path("src/main.zig"), + .target = target, + .optimize = optimize + }); + + const exe = b.addExecutable(.{ + .name = "aoc2025", + .root_module = mod + }); + + b.installArtifact(exe); +} diff --git a/build.zig.zon b/build.zig.zon new file mode 100644 index 0000000..a373852 --- /dev/null +++ b/build.zig.zon @@ -0,0 +1,17 @@ +.{ + .name = .aoc2025, + .version = "0.0.0", + .fingerprint = 0x52176dd5bb600e94, // Changing this has security and trust implications. + .minimum_zig_version = "0.15.2", + .dependencies = .{ + .mecha = .{ + .url = "https://github.com/Hejsil/mecha/archive/refs/tags/0.11.0.tar.gz", + .hash = "mecha-0.11.0-dVGaSDNfAQA6B-SiB1TGG0HoOBdw1BFGMdQJV44pEgB4", + }, + }, + .paths = .{ + "build.zig", + "build.zig.zon", + "src", + }, +} diff --git a/input/1/1.txt b/input/1/1.txt new file mode 100644 index 0000000..776d310 --- /dev/null +++ b/input/1/1.txt @@ -0,0 +1,4768 @@ +R6 +R18 +L39 +L36 +L11 +L24 +R3 +L47 +L11 +R5 +L49 +L12 +L7 +R39 +L9 +R50 +R4 +L30 +L19 +L44 +R43 +R16 +L40 +L19 +L3 +R27 +R10 +R5 +R7 +R41 +R16 +L12 +R27 +R22 +R4 +R28 +R46 +L42 +R29 +R17 +L31 +L12 +R34 +R43 +R32 +L16 +R44 +L37 +R31 +L21 +R74 +L56 +L47 +L97 +L43 +L45 +L12 +R48 +R10 +L58 +L70 +L30 +R45 +L45 +L10 +L18 +L72 +R14 +R97 +L55 +L56 +L99 +L5 +L73 +L36 +R13 +L75 +L25 +L13 +L87 +R59 +R41 +R19 +R4 +R58 +L81 +L97 +L3 +L79 +R26 +L39 +R92 +L13 +L30 +R80 +L17 +R4 +L24 +L66 +R37 +L33 +L38 +R90 +R78 +R32 +R154 +L54 +L11 +L89 +R91 +L829 +L44 +L18 +L759 +R42 +L83 +R93 +R349 +R58 +R859 +L94 +L65 +R1 +L1 +R760 +L68 +L33 +L59 +L97 +L403 +L32 +L868 +L59 +R10 +L13 +L30 +L31 +L90 +R327 +R58 +L88 +L84 +R13 +L32 +L81 +L78 +L22 +L91 +R235 +L87 +R67 +L24 +L4 +R4 +L45 +R88 +L69 +L391 +R87 +L604 +L562 +L204 +L87 +L48 +L79 +L10 +L76 +R89 +R93 +L47 +L35 +R34 +L109 +L461 +L53 +R404 +L15 +R953 +R47 +R47 +L33 +R28 +R22 +R39 +R69 +L872 +R28 +R72 +R950 +R250 +L893 +R51 +L358 +R631 +R327 +R21 +R63 +R34 +L76 +R96 +L63 +R67 +L92 +R46 +R46 +R88 +R95 +L96 +R56 +R57 +R187 +R52 +L795 +L44 +R68 +L12 +R96 +R81 +L33 +R83 +L19 +R39 +L41 +L36 +L924 +R89 +L6 +R26 +L11 +L377 +R77 +R59 +L67 +L88 +L83 +L38 +L843 +L140 +L297 +L34 +L90 +R60 +L2 +L52 +R15 +R54 +L45 +L81 +R45 +L73 +L9 +R2 +L127 +L386 +L61 +R81 +R82 +R18 +L24 +R24 +L44 +R644 +R39 +L65 +L74 +R80 +L80 +L62 +L38 +R598 +R52 +R561 +R31 +R1 +R502 +L63 +L9 +L52 +R79 +L5 +L92 +R598 +L1 +R63 +R12 +L38 +R80 +L73 +R91 +R56 +L24 +L90 +L90 +L56 +R31 +L66 +R4 +L33 +R70 +L96 +R59 +L205 +R5 +L89 +L77 +L44 +L985 +L44 +L450 +L11 +R36 +L48 +R58 +R54 +L18 +L810 +R70 +R22 +R168 +L32 +R70 +L70 +R33 +L13 +L56 +R631 +L27 +L94 +L74 +R54 +R63 +L17 +L10 +L790 +R13 +R53 +L442 +L24 +R55 +R45 +R78 +L69 +L9 +L175 +R30 +L86 +R631 +L17 +R87 +R79 +R51 +L19 +R19 +L9 +R9 +R9 +R33 +L41 +R499 +L57 +L33 +L37 +R73 +R48 +L27 +R62 +R371 +L79 +L59 +R44 +R298 +R85 +R824 +R66 +L79 +R70 +R29 +L96 +L68 +R89 +L54 +L470 +R78 +R39 +R4 +L555 +R634 +L68 +R42 +L74 +R87 +L39 +R52 +L55 +R80 +R75 +R1 +L1 +R62 +L49 +L17 +L96 +L21 +R130 +R91 +R92 +R76 +R32 +R69 +R731 +R4 +R89 +L82 +R73 +R16 +L44 +L56 +L280 +L96 +L412 +R988 +L28 +R928 +L435 +R55 +R844 +L90 +L50 +L224 +R47 +R53 +L23 +R617 +R43 +R72 +L77 +L32 +R412 +R288 +L46 +L53 +R99 +R76 +R59 +L35 +L239 +L55 +R494 +L16 +L624 +L14 +R54 +L45 +L42 +R87 +L62 +L404 +L26 +R86 +L80 +R479 +L15 +L778 +R52 +L552 +L44 +L56 +L1 +L81 +L18 +R98 +R54 +R9 +L61 +L72 +L728 +R82 +L99 +R96 +L974 +R95 +L18 +R18 +R78 +L3 +L76 +R1 +L24 +L76 +L223 +R54 +L94 +L85 +L98 +R62 +L16 +R30 +L55 +R25 +L17 +L99 +L784 +L778 +R88 +R83 +R7 +R59 +R15 +R29 +R58 +R39 +R221 +R79 +R82 +R18 +R58 +R42 +R5 +R95 +R33 +L33 +L81 +L99 +R54 +L74 +R976 +R12 +R160 +L216 +L615 +L17 +L798 +L288 +R49 +L63 +L65 +L602 +R67 +L59 +L24 +L17 +R30 +L56 +R31 +L5 +R111 +L158 +L53 +L664 +R64 +L53 +R79 +R743 +L671 +L98 +L70 +R70 +R19 +L89 +R670 +L83 +L57 +L44 +L45 +L71 +L63 +L37 +R96 +L82 +R40 +L86 +L405 +R76 +L39 +R56 +L277 +R2 +L550 +L31 +L544 +L563 +R51 +R769 +R91 +L72 +L635 +L896 +R12 +L97 +R956 +L385 +L87 +L94 +R94 +R55 +L90 +L65 +R79 +L79 +R83 +R517 +L227 +L81 +L109 +L8 +R30 +L5 +L93 +L1 +R94 +R59 +L26 +L72 +L61 +R77 +R67 +L29 +R85 +R95 +L98 +L97 +R20 +L32 +R591 +L275 +L38 +L18 +L2 +R32 +R82 +R40 +L69 +L9 +L16 +L6 +L46 +L12 +L42 +R59 +R59 +L18 +R890 +L89 +L27 +L55 +L979 +L40 +R230 +L30 +L3 +L79 +R82 +L29 +L719 +L52 +L41 +L59 +L80 +R81 +R549 +R64 +L61 +L794 +L959 +R80 +L154 +R25 +L79 +R84 +R94 +L50 +R17 +L48 +L11 +R189 +L1 +L5 +R28 +R31 +R96 +R804 +R909 +L431 +R22 +L68 +L32 +R907 +L7 +L713 +L67 +L69 +L535 +R73 +L3 +L24 +L77 +L96 +R14 +R1 +R96 +R87 +R13 +L16 +R42 +L26 +R38 +R62 +L298 +R98 +R19 +L446 +R80 +R62 +R82 +R12 +L14 +R31 +L99 +R73 +R424 +R76 +R76 +R276 +L54 +L698 +R20 +R15 +L11 +L138 +R28 +R586 +R39 +L39 +L31 +L69 +R65 +R56 +R79 +R86 +R71 +R32 +R11 +R31 +R69 +R97 +R284 +R19 +L44 +L756 +L49 +R49 +R208 +L97 +R389 +L725 +R748 +R47 +R20 +L90 +L8 +R33 +L25 +R9 +L58 +L51 +L68 +L28 +L41 +R37 +L51 +L49 +R14 +L14 +L569 +L86 +R55 +L73 +L33 +L36 +R53 +R89 +L11 +R8 +L94 +L3 +L8 +L52 +R27 +L67 +R689 +L89 +L290 +R30 +R60 +R85 +L85 +R86 +R14 +R45 +L49 +R4 +R29 +R9 +R441 +L685 +L746 +L18 +L37 +L47 +R54 +L58 +L242 +R27 +R67 +L22 +R1 +R27 +R21 +L43 +L78 +R40 +L14 +R74 +L3 +L53 +R75 +L19 +R82 +L82 +R38 +R93 +R94 +L14 +R88 +L99 +R65 +R35 +L88 +R12 +L4 +L20 +R25 +R13 +R62 +L39 +L62 +L13 +L606 +L227 +R47 +R47 +R53 +L31 +R58 +R73 +R91 +L16 +L73 +R47 +R51 +R21 +L721 +R90 +R27 +R24 +R19 +R24 +L16 +R32 +L208 +R13 +L222 +L332 +L51 +L35 +L29 +R949 +L684 +R99 +R38 +L38 +R662 +L45 +L49 +R732 +R29 +L83 +R51 +R59 +L821 +L735 +L49 +L49 +R75 +L336 +R966 +L350 +R43 +L95 +R77 +R69 +L515 +L98 +R56 +R106 +L101 +L60 +L42 +L3 +L94 +R437 +R63 +L84 +R84 +L54 +L46 +R93 +R7 +L581 +R181 +R854 +L686 +L88 +R33 +R87 +R83 +R48 +L231 +L63 +R63 +R7 +R93 +R885 +R15 +R47 +L70 +L54 +R1 +L93 +L31 +L90 +L110 +L7 +R27 +R73 +R365 +L58 +L65 +L525 +L10 +R30 +R9 +L429 +R90 +L39 +L28 +L33 +L3 +L597 +L69 +L108 +L54 +L63 +R98 +L5 +R215 +L282 +L32 +R946 +R45 +R48 +L39 +L154 +R484 +L29 +R442 +L11 +R80 +L12 +L68 +R168 +R20 +R98 +R78 +L96 +L27 +R23 +R80 +L376 +R598 +R88 +R26 +L89 +R294 +R85 +L102 +L82 +L18 +R44 +R41 +R56 +L91 +R50 +L60 +R60 +R471 +R529 +R60 +L60 +R66 +L62 +L346 +L94 +L64 +L57 +L2 +R97 +L73 +R235 +R96 +L15 +R619 +R14 +R80 +L67 +R73 +L45 +L55 +L37 +R37 +R4 +R96 +R790 +L13 +R23 +L43 +L57 +R77 +L77 +R87 +L787 +L2 +L598 +R59 +L24 +R65 +L644 +L47 +L51 +R586 +R34 +L21 +L45 +L24 +R33 +L5 +R84 +L731 +L69 +R52 +R48 +R30 +L48 +L582 +R16 +L310 +R94 +R10 +L19 +L91 +R4 +L14 +R510 +R11 +R71 +L482 +R47 +L47 +L10 +L56 +L24 +L74 +R64 +R80 +R87 +R16 +R229 +R94 +R29 +R25 +L5 +L55 +L1 +L536 +L63 +L6 +L933 +L66 +R18 +R56 +R31 +L28 +R28 +R70 +R30 +L83 +R183 +L378 +R878 +R93 +R50 +L8 +R60 +R705 +L25 +L33 +L42 +L99 +R62 +R37 +R911 +R50 +R94 +L55 +L106 +R52 +R40 +L86 +R87 +R437 +L49 +L35 +L13 +L88 +R45 +R46 +L62 +L68 +L55 +L67 +L94 +R19 +L3 +L25 +R45 +R80 +L67 +L806 +R76 +L86 +L27 +R55 +L76 +R31 +L45 +L10 +L45 +R312 +R88 +R93 +L2 +L91 +R827 +L27 +L291 +R33 +R78 +L42 +L78 +L786 +L680 +R53 +R15 +L50 +L37 +R75 +L60 +L81 +R51 +L74 +L26 +R34 +R66 +L82 +L18 +R67 +L925 +L49 +R150 +L1 +L18 +L59 +L65 +L48 +L78 +L60 +L82 +R68 +L78 +L5 +R83 +R7 +L7 +L96 +R96 +R64 +L664 +L42 +R42 +R83 +L49 +R92 +R94 +L20 +R38 +L74 +L447 +R99 +R784 +L11 +R854 +L43 +L3 +L64 +R7 +R38 +R74 +R51 +L3 +L41 +L14 +R55 +R64 +L464 +L977 +L313 +L6 +R92 +R4 +L34 +R34 +R542 +R61 +L90 +L60 +L53 +L93 +R94 +R137 +R78 +R42 +L19 +R94 +L833 +R967 +R333 +R80 +L80 +L87 +R21 +R756 +R17 +R72 +R1 +L219 +R75 +R35 +L60 +R94 +L10 +R105 +L50 +L421 +L29 +R47 +L11 +L36 +L74 +L338 +L93 +L26 +L69 +L723 +L77 +L83 +L17 +L82 +R41 +R61 +R7 +L80 +R8 +R58 +R87 +R34 +L36 +R2 +L18 +R24 +L63 +L48 +L35 +R44 +R96 +L84 +L73 +L43 +L88 +L12 +L48 +L889 +L63 +L65 +L80 +L23 +L32 +R397 +R616 +L36 +R76 +L35 +L18 +L16 +R409 +R196 +R11 +L926 +R62 +L867 +L47 +L94 +L56 +L94 +R22 +R827 +R73 +L87 +R71 +L87 +R44 +L37 +L3 +R403 +R27 +R69 +R45 +L45 +R41 +R1 +L443 +R701 +R15 +R8 +R77 +L73 +L27 +L70 +L9 +L436 +L61 +L8 +L68 +R63 +L71 +R8 +L48 +L306 +R87 +L68 +L68 +R83 +L97 +R45 +L64 +R88 +R259 +R894 +L53 +R695 +L95 +L43 +L57 +R16 +R36 +R49 +R736 +R50 +L70 +L479 +R11 +R16 +L134 +L49 +R21 +L387 +L16 +R63 +R37 +L73 +L81 +R554 +L17 +R36 +R451 +R30 +R31 +R51 +L42 +L140 +L82 +L18 +L11 +L5 +L84 +R929 +R71 +L715 +L33 +R848 +L91 +L82 +L27 +R227 +L12 +R82 +R77 +R26 +L45 +R45 +R757 +R43 +R97 +R3 +R901 +L1 +R11 +L10 +L831 +L26 +R56 +R55 +R36 +L85 +L77 +R38 +L45 +L22 +L271 +L933 +R63 +L97 +R55 +L65 +L80 +L265 +R13 +L15 +L78 +L27 +L77 +R90 +L68 +R85 +R70 +L64 +R64 +L44 +L26 +L90 +R60 +L70 +R70 +L15 +R21 +L39 +L46 +L24 +L43 +L66 +L5 +R17 +R43 +R657 +L92 +R40 +R63 +R88 +L99 +R78 +L88 +L13 +R81 +R90 +L738 +R13 +R52 +R215 +R59 +R13 +L695 +R63 +R70 +L61 +L20 +R68 +L287 +L80 +R24 +R556 +L226 +R426 +R67 +L291 +R24 +L594 +L6 +L41 +L38 +L21 +R386 +L10 +R1 +R35 +L39 +R23 +R72 +R32 +R57 +L598 +L8 +L51 +L753 +R53 +L3 +R58 +L529 +R95 +L93 +L95 +R93 +L826 +R52 +R54 +R94 +R23 +R82 +R95 +R489 +R29 +L18 +R28 +R72 +R435 +R743 +L78 +R59 +L669 +L42 +R58 +R87 +L93 +R94 +R72 +R34 +R35 +R65 +R77 +R83 +R940 +L35 +R35 +R78 +L978 +R49 +R29 +L80 +L43 +R45 +L18 +R3 +R15 +R331 +L180 +R16 +R210 +R27 +R196 +L891 +L9 +L52 +L85 +L34 +R91 +R821 +R59 +R84 +L8 +R62 +R8 +L46 +L7 +R77 +L70 +L136 +L860 +R1 +R709 +R40 +L96 +L58 +R613 +L10 +L68 +L51 +R159 +L43 +L176 +R42 +L843 +R77 +R988 +L788 +L82 +R82 +L191 +R91 +L898 +R98 +L31 +L69 +R97 +R3 +R24 +L61 +L16 +L84 +R37 +R63 +L79 +R16 +L613 +L10 +R23 +R96 +L91 +L31 +L92 +L23 +L459 +R39 +L522 +L577 +R87 +R73 +R57 +R90 +R92 +L14 +L25 +R38 +R86 +L24 +R77 +L178 +L99 +L98 +L94 +R43 +L69 +L82 +L80 +L42 +R6 +L28 +L56 +L16 +L761 +L23 +L98 +R98 +R38 +R94 +L532 +R28 +R90 +L18 +L62 +R548 +L8 +L87 +L83 +L34 +R87 +L97 +L86 +R443 +R79 +L501 +R1 +R13 +R52 +R33 +L98 +R46 +L466 +R96 +L76 +L582 +R82 +R47 +R53 +R8 +R18 +L57 +R31 +R865 +L65 +L70 +L94 +R59 +L43 +R48 +L19 +L54 +L13 +L6 +R72 +L855 +R75 +R784 +L29 +L66 +R478 +L613 +L51 +L18 +R4 +R68 +R85 +R13 +L44 +L711 +R531 +R51 +R36 +R87 +R19 +L24 +R97 +R76 +R30 +R28 +R69 +R1 +R99 +R34 +L68 +L51 +R629 +L95 +R811 +R140 +L94 +R77 +L47 +R95 +R169 +L90 +L10 +L77 +L45 +R87 +L65 +R77 +L99 +R78 +L73 +L83 +L93 +L7 +L89 +L92 +L1 +R58 +L76 +R67 +L67 +L68 +L48 +R16 +L174 +L84 +R58 +L51 +R51 +R845 +R25 +L487 +R628 +R19 +R470 +R35 +L45 +R910 +L7 +L31 +R738 +R789 +R24 +L6 +L81 +R2 +L57 +R75 +R48 +L160 +R30 +L29 +R81 +R584 +L36 +R736 +L77 +R61 +L84 +L665 +R34 +R31 +L687 +L113 +L47 +L41 +L76 +L76 +L241 +R354 +R45 +R14 +L32 +L47 +L253 +L28 +R28 +L60 +L40 +R923 +L60 +L163 +R399 +L16 +R17 +R72 +L72 +L6 +L60 +R66 +R96 +L23 +R28 +L1 +R81 +L1 +R68 +L67 +L32 +L20 +R213 +R25 +R33 +R270 +L70 +R425 +L48 +L377 +L25 +L42 +L33 +R104 +L85 +L19 +R669 +R331 +R57 +L40 +L217 +L63 +R15 +L98 +L18 +L55 +L384 +L69 +L85 +L72 +R429 +R45 +L45 +L52 +L62 +R44 +R56 +R414 +L876 +L224 +R641 +R9 +R11 +R78 +R1 +R496 +R98 +R17 +R49 +L506 +R590 +L862 +R93 +R39 +L5 +R51 +R238 +L38 +L644 +R999 +L61 +L94 +R691 +R4 +L55 +L60 +L780 +L481 +R33 +R65 +R83 +R22 +L22 +L430 +R1 +R29 +R83 +R817 +R93 +L14 +L76 +L903 +R39 +R94 +L3 +L43 +L729 +R65 +R12 +R237 +R28 +L12 +L37 +R30 +R65 +R43 +L31 +R42 +L68 +L8 +R72 +R13 +L9 +R73 +L97 +L176 +L584 +L15 +R950 +L629 +R98 +L59 +L61 +R2 +R519 +L227 +L4 +L80 +R90 +R85 +R89 +L767 +R45 +L34 +R65 +R617 +R371 +R29 +L48 +L52 +L214 +R293 +L7 +R28 +L39 +L61 +L56 +L63 +R590 +L6 +R35 +L73 +L327 +R99 +L399 +R827 +R30 +L21 +L636 +R88 +R5 +L70 +R680 +L111 +R8 +L35 +R40 +L5 +L70 +R38 +R46 +L90 +L88 +R19 +R71 +R14 +R60 +R51 +R30 +R319 +L97 +L49 +R46 +L44 +L556 +L90 +L10 +R88 +R12 +R86 +R13 +L88 +R89 +R926 +L26 +R57 +L492 +L65 +R623 +L46 +L72 +R1 +L46 +L60 +L80 +L20 +L40 +L46 +R914 +R361 +R94 +R11 +R33 +L51 +R86 +R692 +L754 +L74 +R174 +R683 +R17 +R91 +L45 +R54 +L55 +R55 +L84 +R98 +R86 +L154 +R62 +L535 +L73 +L354 +L38 +L8 +R97 +L69 +R72 +L30 +R330 +R57 +L81 +L59 +L96 +R24 +R37 +L51 +L31 +R71 +R80 +L24 +R373 +R485 +L85 +R19 +L150 +R31 +L660 +R760 +L63 +R23 +L279 +R63 +R56 +L988 +R2 +L35 +R70 +R91 +L440 +R49 +R13 +R34 +R19 +R31 +L387 +L478 +L81 +R73 +R27 +R38 +R12 +R36 +L86 +R55 +L160 +R5 +R51 +R45 +R59 +R96 +L49 +R98 +R95 +R694 +R11 +L10 +L14 +L839 +R97 +R98 +L532 +R75 +R16 +R71 +L88 +L49 +R75 +L55 +R55 +R53 +R21 +L55 +L19 +L48 +R20 +L68 +L5 +R1 +L35 +L48 +R83 +R61 +R439 +R35 +R65 +L65 +R25 +R957 +L871 +R54 +L37 +R42 +L14 +R65 +R44 +L54 +L19 +R96 +R177 +L98 +R98 +R51 +L75 +L76 +R9 +L3 +R628 +R24 +L43 +R67 +R189 +L189 +R43 +R270 +R80 +R20 +R62 +L49 +R94 +R19 +R579 +R3 +R97 +L625 +L32 +L578 +R90 +L55 +R10 +L83 +L33 +R61 +L98 +R74 +L90 +L41 +R534 +L84 +R305 +R45 +R21 +L621 +L1 +R29 +R72 +R44 +L44 +R65 +L41 +R76 +L256 +L44 +R33 +R67 +R37 +R63 +R95 +L95 +R8 +L208 +R85 +R867 +R48 +L95 +R36 +R556 +L47 +R8 +L58 +L84 +L116 +L56 +R56 +L93 +R43 +L15 +R31 +L26 +L40 +R10 +L10 +R19 +L63 +L656 +R57 +L91 +L57 +L87 +R13 +R85 +R171 +R57 +L68 +R20 +L22 +R264 +L31 +L11 +L38 +L50 +L12 +R947 +R53 +R203 +R86 +L17 +R17 +L89 +L41 +R89 +L6 +R58 +R46 +R54 +L26 +L308 +R76 +L42 +L58 +L27 +L37 +R22 +L789 +R64 +R86 +R809 +L30 +L291 +L12 +R363 +L61 +L39 +R65 +R98 +R26 +L45 +R56 +L748 +R22 +L20 +R50 +L4 +L76 +R76 +R685 +R29 +L68 +L64 +L82 +L49 +L71 +L190 +L290 +R887 +R49 +R85 +R16 +R11 +R12 +L62 +R2 +R91 +L880 +R30 +L64 +L677 +L12 +L84 +R82 +L24 +R48 +R65 +R33 +R92 +L27 +L472 +R712 +R87 +L26 +R26 +R19 +R81 +L82 +R94 +R36 +L48 +R77 +L287 +R78 +R421 +L176 +L86 +L27 +L98 +R586 +R79 +L67 +R20 +R74 +R33 +L78 +R17 +L43 +L815 +L827 +R19 +L488 +L95 +L17 +R176 +R24 +R51 +L451 +L72 +R71 +L41 +R42 +R32 +R67 +L99 +L49 +R154 +R54 +R96 +R45 +R11 +R89 +R363 +L646 +R83 +R95 +R69 +R375 +R61 +L53 +R91 +L13 +L66 +L959 +L9 +R46 +R13 +L66 +R12 +L66 +R70 +R96 +L496 +L647 +R47 +L60 +L63 +R23 +L94 +L6 +L4 +L96 +L74 +R74 +L1 +L99 +R2 +R86 +L47 +R84 +L17 +L8 +L78 +L670 +L52 +R6 +R94 +L95 +L36 +L3 +R50 +R16 +R68 +R28 +L99 +L34 +R5 +L49 +L82 +L57 +R81 +L18 +L49 +R74 +R32 +L32 +R579 +R34 +R62 +R51 +R99 +L62 +L79 +R6 +R30 +L920 +L23 +L26 +L49 +L602 +L52 +L70 +L78 +R70 +R12 +L52 +L90 +R73 +R4 +L33 +L76 +R470 +L78 +L56 +R56 +L29 +R94 +R97 +L81 +L81 +L272 +L76 +L72 +L344 +R864 +L76 +R53 +L77 +L43 +R43 +L9 +L5 +L52 +L88 +R35 +R42 +L75 +R794 +R58 +R180 +R51 +R469 +L41 +L29 +L430 +L449 +L77 +L74 +R89 +R55 +R56 +R680 +R99 +R21 +R2 +L402 +R218 +L6 +R99 +R989 +L10 +L577 +R56 +L69 +L1 +R701 +R191 +L1 +R510 +R7 +R93 +L14 +R14 +R42 +L124 +R776 +R44 +L67 +R29 +L753 +R53 +L92 +R71 +R83 +R315 +R95 +L23 +L70 +R47 +R307 +R46 +L17 +L862 +R95 +L34 +L61 +L14 +L467 +R81 +R4 +R38 +R58 +L92 +L18 +L790 +L5 +L83 +R488 +L369 +R529 +L75 +R43 +R72 +R57 +L457 +L65 +R67 +L659 +R81 +L824 +L540 +R40 +R7 +L19 +L88 +L57 +L68 +L75 +L60 +L725 +L15 +L550 +L59 +R902 +R190 +L1 +L4 +L78 +L35 +L190 +L75 +R71 +L70 +R370 +L78 +R233 +L22 +R96 +R42 +R258 +R58 +L82 +R24 +L740 +R613 +R7 +R81 +L66 +L95 +L79 +L17 +L25 +L79 +R83 +L49 +R36 +L34 +R764 +R99 +L99 +R61 +R858 +R81 +L82 +R7 +L25 +R40 +R55 +R53 +L30 +R86 +R96 +L94 +L6 +R12 +L82 +L68 +L62 +L33 +L96 +L71 +R79 +L97 +R18 +R73 +L62 +R588 +R18 +L17 +R99 +R63 +R938 +L70 +R8 +R62 +R9 +L71 +R6 +R256 +R24 +R83 +L22 +R4 +L99 +R99 +R15 +L56 +L44 +L90 +L14 +L105 +L95 +R2 +R99 +R32 +R25 +L77 +R19 +L80 +R88 +R92 +R19 +R25 +L92 +R41 +R6 +L63 +R30 +L66 +R52 +R624 +L985 +L30 +R694 +L88 +R333 +R52 +L52 +L62 +L38 +R83 +R7 +L90 +R94 +L63 +R66 +L197 +L776 +L33 +L52 +L39 +L68 +L935 +R31 +R49 +L69 +R992 +L43 +L12 +R194 +R25 +R16 +R320 +L228 +R26 +R826 +R29 +L52 +L2 +R34 +R67 +R34 +R53 +R213 +R78 +L298 +R20 +R20 +L96 +R91 +R85 +L61 +L39 +R988 +L72 +L16 +L69 +L507 +R76 +L280 +L25 +L33 +L62 +R8 +L8 +R42 +L42 +R98 +L7 +L4 +R97 +R6 +R410 +R54 +R63 +R683 +L28 +L72 +R70 +R30 +R31 +R69 +L66 +L34 +R45 +R555 +L71 +L24 +L36 +L481 +L139 +L31 +L18 +R50 +L50 +L96 +L968 +L659 +L68 +R15 +L82 +L764 +L96 +R18 +R16 +R11 +R73 +L8 +R14 +L506 +R136 +L22 +L31 +R70 +R11 +R21 +L785 +L15 +L785 +R61 +R39 +L68 +R68 +R39 +R69 +R92 +R99 +R41 +L50 +R89 +L79 +L88 +R88 +L25 +R63 +R26 +R48 +L471 +R620 +L59 +R12 +R54 +L30 +L2 +R64 +L97 +R97 +R939 +L24 +L815 +R392 +R69 +L61 +R67 +R86 +L53 +R81 +L81 +L841 +R8 +R133 +L105 +L26 +R14 +R47 +R70 +L149 +R28 +R25 +R96 +L95 +R84 +R760 +R51 +R60 +L33 +R408 +R69 +L94 +R90 +L646 +R46 +L61 +R27 +R24 +R16 +L5 +L301 +R718 +R5 +R77 +L305 +L95 +L92 +L8 +L5 +L87 +R75 +L20 +L334 +L5 +L24 +L5 +R5 +R858 +L38 +L20 +L68 +R67 +L31 +L99 +R70 +L39 +R36 +L336 +R92 +R8 +L51 +R51 +R25 +L525 +L88 +L12 +L35 +L31 +L58 +L2 +R26 +R54 +R52 +L32 +R20 +R992 +L1 +R15 +R30 +R76 +R12 +L31 +L828 +L67 +R8 +L239 +R39 +L13 +R13 +L39 +L61 +R88 +L15 +L73 +L98 +R277 +R121 +L553 +L22 +R50 +R29 +L66 +R662 +R83 +R18 +L42 +R41 +R38 +L71 +R55 +L22 +L94 +L659 +L52 +R5 +L543 +R48 +L9 +R10 +R12 +L95 +L201 +R178 +R921 +R86 +L7 +L22 +L724 +R46 +L49 +L68 +R17 +L67 +L992 +R42 +R17 +R92 +L27 +R35 +L76 +R13 +L61 +L41 +R79 +L17 +R73 +R112 +R73 +R779 +L88 +L193 +R252 +L35 +R57 +L27 +R862 +R38 +L70 +R69 +L45 +L14 +R46 +R14 +L33 +R273 +R94 +L14 +R17 +R63 +L74 +R857 +L127 +R44 +L79 +R714 +L35 +R470 +R72 +L72 +L877 +R2 +R90 +R434 +L74 +R373 +R29 +R53 +L250 +R24 +R26 +R285 +L85 +L55 +L3 +L70 +L975 +R819 +L16 +R19 +R11 +R340 +L70 +R87 +L78 +R64 +R27 +R20 +R80 +R72 +R69 +R43 +L84 +R949 +L149 +R390 +R12 +R5 +R12 +R281 +R61 +L70 +L91 +L53 +R76 +R54 +L25 +L47 +L25 +R54 +R77 +R8 +R5 +R78 +R17 +R55 +L82 +R40 +L432 +L17 +L481 +R16 +L90 +L76 +L52 +R30 +R4 +L35 +L25 +R326 +R83 +L73 +L10 +R49 +L21 +R972 +L15 +L49 +L336 +L4 +R64 +R440 +L28 +R128 +L3 +L97 +L82 +R23 +R59 +R53 +R36 +L608 +L26 +L93 +R281 +L317 +R74 +L99 +L13 +L27 +R481 +R58 +L49 +R49 +R74 +R26 +R913 +L15 +R19 +L72 +L89 +R90 +R922 +L23 +R50 +L48 +R682 +R74 +L20 +R98 +L381 +R704 +L152 +L652 +L21 +L11 +R13 +R6 +R5 +R90 +R28 +L36 +L63 +R672 +R91 +R326 +L84 +R477 +R56 +L49 +R839 +R85 +R76 +R23 +L26 +L10 +L66 +L21 +R40 +R64 +L95 +R89 +R59 +L57 +R70 +L513 +R43 +L32 +L93 +L36 +R37 +R360 +L60 +L68 +L80 +R32 +R64 +L10 +L14 +L1 +R73 +L69 +L77 +L549 +R2 +R73 +R48 +L532 +R32 +L472 +L628 +R99 +R855 +L54 +L67 +R10 +L865 +L89 +R962 +L66 +R98 +L983 +L91 +R42 +L752 +R96 +R66 +L61 +L42 +R32 +R12 +L39 +R83 +L46 +L80 +L50 +R30 +R42 +L42 +L33 +R33 +R48 +R52 +R44 +R56 +R33 +R79 +R88 +L81 +L396 +R77 +L94 +L27 +L20 +L59 +R42 +L77 +L963 +L2 +L85 +R24 +R276 +L5 +L10 +R93 +R7 +R37 +R937 +L37 +L37 +L31 +L69 +R921 +L21 +L14 +L919 +R933 +R62 +R35 +L90 +R670 +R23 +R78 +R22 +R54 +L74 +R782 +L324 +R62 +L16 +R4 +L88 +R23 +R577 +R528 +L35 +L53 +R360 +L8 +L89 +R97 +L5 +R5 +L33 +L879 +L188 +R29 +L93 +L9 +L61 +R53 +R81 +R82 +L937 +R76 +R79 +R78 +R20 +R502 +L19 +R19 +R29 +R71 +R57 +L28 +R38 +R262 +L34 +L46 +L49 +L27 +R27 +R320 +L8 +L78 +R66 +L80 +L20 +L35 +L18 +L536 +L11 +L4 +R65 +L61 +L33 +R862 +R92 +R76 +R3 +L21 +L79 +L139 +R45 +R694 +R94 +R671 +R130 +R34 +L29 +R22 +L22 +R94 +L94 +L37 +L23 +L69 +R4 +R62 +L44 +R7 +R65 +L84 +L12 +L97 +L43 +R71 +L13 +R15 +L38 +R43 +R44 +L26 +L25 +L31 +L69 +L451 +R409 +R41 +L69 +R57 +L87 +L65 +R65 +L631 +R831 +R59 +L86 +R3 +L81 +L46 +L478 +L171 +R60 +L960 +L51 +R151 +L597 +L3 +L48 +R50 +L30 +L68 +R523 +L66 +R37 +R216 +L14 +L20 +R90 +L70 +R58 +L22 +R116 +L166 +L80 +L83 +R77 +R226 +L98 +R72 +R14 +L63 +L92 +R54 +L25 +R2 +R10 +L94 +R670 +L44 +R68 +L82 +R363 +R293 +R29 +L60 +L11 +R41 +R2 +L87 +R40 +R96 +R280 +L92 +R888 +R434 +L34 +R26 +L726 +L58 +L73 +R131 +R319 +L93 +L74 +R85 +R29 +R34 +R38 +R62 +L97 +R97 +R36 +R171 +L91 +L765 +R179 +R70 +L21 +R93 +L27 +L345 +R48 +L208 +L17 +R16 +R3 +R16 +L98 +R4 +L235 +L29 +R48 +R885 +L1 +L20 +L12 +R40 +R49 +R511 +L5 +L25 +L70 +R80 +L73 +L64 +L78 +R933 +L4 +L94 +L23 +R45 +L12 +L38 +R28 +R803 +L6 +R3 +L65 +R2 +R73 +R17 +L1 +L26 +R20 +L20 +R79 +L64 +L17 +L98 +R95 +R87 +L82 +L6 +R30 +R39 +R62 +L11 +L32 +R51 +L90 +L65 +R22 +L66 +L34 +L68 +R90 +R26 +L137 +L73 +R519 +R43 +L49 +R81 +L60 +L1 +R96 +L48 +L22 +L56 +L11 +R70 +R96 +L78 +L2 +L40 +L247 +R69 +R81 +R37 +L16 +L199 +R192 +R52 +R55 +L87 +R55 +R32 +R64 +R36 +R326 +R66 +R17 +L9 +L88 +L89 +L23 +L3 +R3 +R56 +L856 +R71 +R29 +R23 +R52 +L270 +R7 +L75 +L37 +R95 +L26 +R10 +R58 +L29 +L52 +L218 +L38 +R4 +L47 +R943 +R75 +R44 +L23 +R55 +R49 +L8 +R56 +L48 +L51 +R37 +R81 +R33 +L49 +R47 +L98 +L14 +R14 +R57 +R432 +R25 +R418 +L32 +R71 +L25 +R54 +R53 +L353 +R56 +L5 +R14 +L65 +L46 +R23 +R723 +L87 +L69 +L44 +L39 +L61 +L72 +L58 +L86 +L484 +L71 +L84 +L145 +L74 +R48 +L174 +L929 +R93 +R642 +R56 +R938 +L95 +R42 +R45 +R14 +R49 +R34 +L89 +L66 +R20 +L54 +L550 +R454 +L474 +R70 +L83 +R93 +L46 +R36 +L46 +L54 +L4 +R42 +L804 +L237 +R488 +L885 +L569 +R85 +L182 +L12 +R48 +L70 +L748 +L52 +L69 +L31 +R826 +L35 +L71 +L886 +R66 +R43 +R9 +R48 +L977 +R42 +L29 +L97 +R61 +L7 +L90 +R95 +R32 +L13 +R83 +L49 +L95 +R95 +L351 +R7 +R50 +R66 +L3 +L20 +R162 +L62 +L87 +L13 +R52 +R48 +L658 +R63 +L5 +L24 +R32 +L40 +R32 +L11 +R13 +R97 +L30 +R31 +L21 +R68 +R49 +R560 +L89 +L55 +L60 +L52 +R625 +R751 +L54 +R95 +L94 +R677 +L88 +R45 +R565 +R25 +L3 +L170 +L98 +L13 +R37 +R56 +R9 +L451 +R86 +R85 +R30 +L15 +L96 +L118 +L5 +R869 +L92 +R49 +L7 +L131 +L44 +R75 +R58 +R63 +R279 +R75 +L80 +L95 +L25 +R37 +L68 +R156 +R116 +R24 +L190 +R51 +R193 +L47 +R30 +R78 +L590 +R87 +L52 +L92 +R192 +L43 +L14 +L943 +L6 +R6 +L91 +L9 +L271 +L56 +R27 +L977 +L74 +R96 +R55 +R57 +L89 +L78 +L90 +L57 +L57 +R14 +L26 +R93 +L66 +L1 +R27 +R62 +R11 +R72 +R28 +L60 +R52 +R821 +L96 +R83 +L634 +R34 +L48 +R705 +R95 +R48 +L951 +L85 +L81 +R202 +L85 +L718 +R57 +L28 +L777 +L40 +R45 +R61 +R29 +L29 +L809 +L44 +R54 +R16 +L20 +R103 +L78 +L59 +R37 +R95 +R71 +R72 +R25 +R37 +R896 +R37 +L33 +R58 +R42 +L93 +L941 +L92 +R41 +L74 +L73 +R68 +R64 +R82 +L70 +R88 +L973 +L772 +L82 +R33 +R636 +L42 +R8 +L27 +L43 +L81 +L57 +L43 +L28 +L22 +R56 +L735 +R10 +L38 +R60 +L30 +R79 +L294 +R85 +R275 +L15 +R34 +R6 +L8 +R8 +L726 +L74 +R77 +L88 +R27 +L371 +L30 +L3 +L549 +R10 +L740 +R64 +L97 +R82 +L82 +L131 +R31 +L85 +L4 +R18 +L229 +L55 +R59 +L4 +L337 +L63 +R877 +R567 +R56 +R84 +L243 +L19 +R1 +R777 +R58 +R42 +R21 +L21 +L61 +L39 +L315 +R92 +R23 +R28 +L528 +R13 +R87 +L61 +R4 +L143 +L80 +R80 +R517 +L54 +R37 +R60 +R40 +R96 +L28 +L45 +L79 +L75 +R35 +L68 +L36 +R1 +R99 +R7 +L7 +R76 +L73 +R2 +R17 +R207 +L81 +R15 +R34 +R3 +L16 +L684 +R54 +R960 +R86 +R946 +R69 +R85 +L67 +R773 +R61 +R87 +R32 +R14 +L869 +L855 +L69 +R33 +R85 +L741 +R82 +L34 +R70 +R50 +R48 +L71 +R15 +R56 +R26 +R79 +L16 +L70 +R81 +R794 +L76 +R14 +R83 +L515 +R92 +L69 +L23 +R74 +R1 +L77 +R2 +L62 +L38 +R37 +R63 +L140 +L853 +R493 +R390 +R26 +L16 +R98 +L183 +R85 +R58 +R889 +R53 +L26 +L96 +R33 +R1 +R88 +L23 +L277 +L66 +R507 +R19 +R18 +R977 +R45 +R93 +L684 +L96 +L78 +L35 +R74 +R26 +R39 +L22 +L38 +L79 +R24 +R354 +L78 +L677 +R22 +L56 +L289 +L13 +R14 +L58 +L43 +L503 +R19 +R16 +L32 +R65 +L68 +L99 +L67 +L31 +R460 +L73 +L87 +L2 +L98 +R91 +R9 +L379 +R79 +L68 +R28 +R242 +R66 +L4 +R66 +L33 +L71 +R31 +L57 +L2 +R90 +R69 +L57 +L86 +R71 +L737 +L80 +R232 +R79 +L179 +R52 +L20 +R77 +L67 +L42 +L8 +R97 +R40 +L29 +R4 +L59 +L53 +R16 +L62 +L67 +R21 +L346 +L93 +R48 +L96 +R998 +L45 +L85 +R32 +L23 +R70 +R40 +R51 +R97 +L7 +L41 +R53 +L153 +R474 +L10 +L764 +L36 +L14 +L22 +L152 +R24 +L80 +L23 +R503 +L80 +R11 +L24 +R38 +L813 +L103 +L29 +R70 +R69 +R21 +L202 +R479 +R63 +R125 +L780 +R45 +L790 +L36 +L64 +L48 +L52 +R22 +L432 +L84 +L13 +R70 +R17 +R20 +R4 +L207 +L565 +L85 +R53 +L28 +R11 +R25 +R31 +R61 +L87 +R987 +R60 +L60 +L14 +L75 +R60 +L71 +L780 +R17 +R55 +L92 +L464 +L87 +R28 +L83 +R96 +R610 +R681 +L21 +R50 +L10 +L86 +L88 +R39 +R835 +L32 +L68 +R304 +R14 +L29 +R547 +L89 +R53 +R616 +L16 +L51 +L29 +L56 +R136 +L1 +R301 +R923 +R777 +R813 +L413 +R5 +L791 +R86 +R63 +L19 +L97 +R82 +L29 +L53 +L35 +L645 +R245 +R351 +R2 +L65 +L99 +R35 +L38 +L98 +L9 +L91 +R80 +L94 +R44 +R387 +L73 +L55 +R729 +R63 +L805 +L76 +L306 +L474 +R29 +L422 +R78 +R995 +R248 +R56 +R96 +R2 +R66 +L77 +R71 +L293 +L269 +R24 +L64 +R940 +R48 +R967 +L48 +L65 +L2 +R3 +L78 +R460 +L73 +R62 +L74 +L11 +L76 +L90 +L63 +L61 +R129 +L28 +L797 +L15 +R21 +R6 +L15 +R99 +R1 +L61 +L5 +L8 +L726 +L69 +L703 +R1 +R58 +L721 +L83 +L75 +L83 +R75 +L2 +R64 +R736 +R52 +L30 +R378 +R750 +L85 +R37 +L13 +L224 +R37 +R29 +L55 +R826 +L273 +L51 +R56 +L83 +R51 +R22 +L74 +L48 +L82 +R2 +R80 +R555 +L45 +L10 +R555 +L66 +L88 +L20 +L781 +L609 +R44 +R65 +L575 +L25 +L34 +R31 +L87 +R93 +R97 +R73 +R33 +L5 +R999 +L2 +L16 +L2 +L80 +R66 +R2 +L18 +L28 +R78 +L798 +R798 +L94 +L980 +L22 +R99 +R85 +R77 +R7 +L39 +R67 +R36 +R84 +R80 +L973 +L754 +R27 +L30 +R3 +R7 +L71 +L13 +R4 +L92 +L240 +L80 +R52 +L40 +R96 +L28 +R96 +R19 +R17 +R913 +R387 +R19 +R62 +L36 +L26 +L419 +L34 +L87 +R36 +L703 +R88 +R59 +L59 +R13 +R13 +L26 +R44 +L344 +L98 +L88 +R201 +R50 +R21 +L17 +L20 +L49 +L17 +L83 +R14 +L14 +R169 +R85 +R46 +L7 +R7 +R719 +R5 +R15 +L39 +R640 +R60 +R573 +R592 +L65 +R74 +R26 +R59 +L59 +L4 +R64 +L60 +R370 +R71 +R59 +L30 +R30 +L14 +R414 +R29 +L561 +R32 +L64 +R64 +L42 +R24 +L482 +L89 +L11 +R86 +L69 +R24 +L5 +R76 +R88 +R61 +L61 +L16 +R816 +R56 +L96 +L460 +R60 +L14 +R76 +R49 +R888 +L59 +R71 +R29 +R53 +R347 +L90 +L10 +R35 +R88 +L635 +L5 +L637 +L16 +L30 +R89 +L59 +R70 +R99 +L305 +L22 +R82 +R599 +R33 +L582 +R96 +R931 +L231 +R51 +R78 +R11 +L40 +L42 +R85 +R568 +R618 +R921 +R50 +L68 +R68 +L52 +R52 +R5 +L5 +R8 +L53 +L60 +L27 +L51 +R34 +R53 +L4 +L26 +R72 +R148 +R35 +R68 +R103 +R55 +L14 +R59 +L136 +L54 +L93 +L17 +R64 +L8 +R88 +R556 +R12 +R38 +R50 +L73 +R79 +L824 +R418 +R53 +R761 +R786 +L513 +L87 +L65 +R7 +R1 +R22 +L65 +L17 +L86 +R858 +R12 +R12 +L696 +L2 +L81 +L26 +L74 +R86 +L4 +R18 +L38 +L62 +R94 +R6 +L95 +R56 +L61 +R36 +L94 +L47 +R98 +R7 +R41 +R59 +R30 +R54 +R16 +R69 +R31 +L88 +R11 +R86 +R91 +L30 +R30 +R6 +L6 +L94 +L6 +R93 +R67 +L61 +R1 +L84 +R84 +R81 +R37 +R34 +L87 +L62 +L65 +L30 +L8 +L97 +R15 +L22 +R9 +R28 +L16 +R44 +R30 +L2 +L6 +R1 +R36 +L27 +L28 +R23 +L4 +R39 +L46 +R40 +R13 +L28 +R1 +R45 +L37 +R6 +R18 +R37 +L6 +L41 +L27 +R11 +R13 +L12 +R40 +R18 +R46 +R49 +R46 +L29 +R35 +R48 +L10 +R10 +R16 +R40 +L26 +R42 +R6 +R30 +R19 +L43 diff --git a/input/1/example.txt b/input/1/example.txt new file mode 100644 index 0000000..53287c7 --- /dev/null +++ b/input/1/example.txt @@ -0,0 +1,10 @@ +L68 +L30 +R48 +L5 +R60 +L55 +L1 +L99 +R14 +L82 diff --git a/input/2/1.txt b/input/2/1.txt new file mode 100644 index 0000000..2e84484 --- /dev/null +++ b/input/2/1.txt @@ -0,0 +1 @@ +4077-5314,527473787-527596071,709-872,2487-3128,6522872-6618473,69137-81535,7276-8396,93812865-93928569,283900-352379,72-83,7373727756-7373754121,41389868-41438993,5757-6921,85-102,2-16,205918-243465,842786811-842935210,578553879-578609405,9881643-10095708,771165-985774,592441-692926,7427694-7538897,977-1245,44435414-44469747,74184149-74342346,433590-529427,19061209-19292668,531980-562808,34094-40289,4148369957-4148478173,67705780-67877150,20-42,8501-10229,1423280262-1423531012,1926-2452,85940-109708,293-351,53-71 diff --git a/input/2/example.txt b/input/2/example.txt new file mode 100644 index 0000000..a3f22ef --- /dev/null +++ b/input/2/example.txt @@ -0,0 +1 @@ +11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124 diff --git a/input/3/1.txt b/input/3/1.txt new file mode 100644 index 0000000..76f86aa --- /dev/null +++ b/input/3/1.txt @@ -0,0 +1,200 @@ +3443334373333545324339252335233845533545245422755419334136447332543353734352333342352363164324383844 +3433434334423225944433232334354334442333333924335333942343333233383543372333445344524534333323244433 +6445452443354336524556464436667635356536446542335532632338343422556865453434662554935342463434223136 +2522122122222222213514222332223223222122232532121112132223123212333143222121122332225253222212321211 +1222223242242124231221324122442244142124714212424435424317222323122242413232232443422232242244223233 +2234122222122211233222212122322222222222222212122222222222213223132341322332622221213243232112232212 +2356223112523523532351855315332431353232242235731412344613124336231133453223225343122332352374734222 +3343432333333433333353345383224352442322423613343232333233333222334353244322433323333349333323335332 +7342322222321224721259321122442322323912322222234431214315422526522422685252123223422224521263228262 +2321237353323325232227232324323625332343235343331932233222233323332333243732354322373633211232251338 +6587278866858777575848766583196774727779775755865586583751787657778977475965868675678578574775877768 +4243433343343335433332333662344232834535534353463535333433445334453536554362335333523333323222363333 +1222334223412222322312213223222224223224132322142333222313223222232233432133232522222122322232231432 +7266252247353442465575262453542242436244617535242642143465626662245355662263447433233352622264565552 +2252222223221222222322222211322222222222221222222222342312212222112222122222223221212222222121122311 +2252214253222222122211254121212253225342223513152224242122222322183252332223252231255521212124562145 +3232233343223221533552323233322812243222732333237371343223233422352234325413334443214233362223323333 +2342443423434526262344243443334434122353342643463324544542333433334534234212574643223435444444424243 +4234533874331232443932333323515328233454263273334347334324342533222225345733324339333234342333346138 +3225147738277523635463338685217615828176126784146642842386623467638862577174577655862764255576728659 +2222222222232222223122123222122222122122221122112122322222221225232222322222222222232211222112321222 +3479323224342333223222511252232243342322124343433333222423222214453551323235444432472352233322223245 +5463572146329235254353543532352353454434345543284253144835282525757726144212437443336453583455472233 +1222222122232121321224222122262222222212333232225232224222221222242225213721321323323223221132222221 +2341322341242324233451232255415814465512213322234248221211241242354232236212222122232223323452163412 +4454463265754646433444423485756661531442323357343522334426252546663346334245634521226274343347414441 +2647576354734635436333353353454273639633652433471856516225325343333553543454645525636257353443245656 +2434324664221452323121333334642342424422623424453634123334432232245624343446312873326264222232333352 +4341452433364323733343336332333324343344332343333633633443322323333313333234234432234323431333333333 +6539633785395567855785537696565568653433836276358445868355445588635456465735423644556666765566984565 +5242415277566773245362345636373244476363461772322135753412671171452255524256317474564632275365114489 +5234163333754933332443335632313411333333435246363534333435423743312133323253334516354442325433433232 +3232234523232335215332112333353212123545233533533432535143412323324442133233323333783335322314234332 +2222515311121345232324112232115452512513542442222322424443353212315524445431541121234353443231126789 +5313558143442512332546524125525243435455455424424335433324525342573623365424335654441164544354311347 +4455478257574554847563757556444944565455455661632453455457564745577344644385255775475355544554747447 +2222232222222816322121246651222326222342622252382321342283266252222222222222242222444422514231522245 +3343354327136217325663353616348466432624634323433348426344653794243336744293233743844836947223741433 +3424514445433844253564465344255143437345442344265435573554434425523544446613523362352333543424443543 +5335334765735554437649555196451745532315534523724335121443954695742359425344662446569273433433285945 +2632132473654522564767555356372445554543232535557673147423535263276525772527545342377672238656452562 +2312222333232122222223322222123224132232117122222412222122222224222222233321231121233242223222222221 +2352343234122223331264242632222252623232732252223228213733221142225222432527252213236244322222166222 +6434334432333333343432343433343213434333343372212235334424444233425312392255343327333342132323433234 +5637729423342234152122554387233542421266513424335373189249459522522285272426525523426355763452253544 +1222224233242322222222322233127322233331232132232223311212222822331232222124432222231246524221147222 +6475424747754497572362542656556457796568568769777433767624437569464776754776472354349766637572346952 +4242222221222222222222222241423224227112212222431231243222222422223222213324423211114226224421322222 +2213222222622232212222223221212232282221212223122422223124223222211233223231222234322223221122222212 +2421282221212151722211942221412212222232462252222222123322443224232253652231215222222144121223122124 +4353553222439342433445142433224325445464296514322425542453344221214414622423225234311424415513324222 +7622223151232222622212261222225152432242222226541222225324222524227222912222226682216221522423132222 +2412122222222214212322222212232322122232222141121221221112223212222222121122212222153121222222222222 +5551445735555524563425535545654564354444474555454574445775535664655549547554356643253394147355724553 +4457645566443248644666166554434865162753945446668549887534547977635566947447756334473445448979859463 +4363236852223895223662223424222622133211426312533541631223245257332312283241622222732255422423143263 +7432633323845322632582333598134366362223433935433566532323943332684232343362342236334532533418353332 +2542233541433411138234313242333621227213233443133332323344333233222231713334242211312224219332333637 +2252222665222222221322662222212211552222211452262222224722122173622231222227322222221254722231226122 +3755643313323333363755235253262279952396239263391354672333352621235382239432339636273433638355225232 +2112222225522752212222322211371222222222323122212315226215232212531334441421242323454351422225231222 +3234333533435132444344333334664343545434442324443333534333344333444324454344334323333433333334344344 +2222322622213282452522332221222222222232237432127221321321122233273922222222221222322221351222222221 +6129227274182272122984145224242222212132121124251451229412228226221232476134172221272227222222122155 +5272642647797454676726755477544645676654764686657874246376647346444767677484784466478486765477654455 +2221322222422121222122222221131222222122233232222242313222222232112122222212222212222223222422122212 +5852443543485534276376753656457653426447353379363769566362532752436883455659574766487634785555455141 +3372243334531332343136312123221323323126233222322232133332451333144344433215223243473223254363323231 +6435635764515673424343364453865733636633363326333443646576676843474316743743464566487654635434473765 +7645533351466656354332363646543565635855315535354323363632543755466655466643453344655147253433363544 +6986642968797789943597848365783697649676485763847693779673977765435987957576777545514656248774774678 +4222121222522325222112142222212212322212224112221222232122222413223243222222222422122222212232322322 +2232326121335233421131252223622233132322252512122232321538152334322542223222243521522222222112234654 +5342444664463483453437262633322135233373726432336234672536344245545365424532564533336433673244443256 +4634442425423525234475454552964857432553554548383544655653648152538648253744555326645255634434473446 +3218226214142132122212222233223212123122212232223132225271222223221212223322221231335522313224222226 +2223232222322722424241212521222421221141222232411222523223221222222222212221721113142222212122322832 +6565355545444463543535732644355667541335646434342233544316656665576522423334433535833453474524725733 +2532421333243234235353643313631443343384344333535334433435354323343433334323346325333133753542451122 +2282522432124725336322227335422122425322352722132212342221432235233253227133223321347513256225422232 +1253452292222333352435422435523532548132651242426224244225244233229332335341426244532272222222335646 +3627486635954534544524423344731347284252435743355334643685384393434345325534523334455563353332459254 +5423322244233223525424126524225544252424522547455545364463456265663534342325442235743323428465155724 +2124423262221415144242322112633222242422632221411232626232161222242254221232322512221224433442149222 +4345666479678668698677636849647678774678647888345593879897757987766298795455995675544798996739548647 +2212321232222212222326242272323631122322221222624225222421324221112222222222321142226212211212152315 +2641322223673222544141472338955335463224333238122225843432223232331345234424313224332335382352433334 +3535633432363242933333233533333634323414323432223351932543244454243532494323343253375832553563634263 +3585452227854556644975675429775442784231428228835285613535476485625633466326666686231288136933765346 +2265522222225222223422622222221227222533812222245322652243312129222222252522412124212421342332262222 +2221222221222222322111222222212212222222222222122222231122125211231222121221232332222222222222122222 +2224321242222222725222422222222122211221122322222211222333727121222212224213222211222221224313222222 +1222122244341212123222222221222434223222533222841142312423212122223221422122324123221223224232222221 +2212122424418142325432427234222223221121244272224222242122152212323212222542131441141222122222222242 +5247422325224324334251313334573324744323231653313243244343732543343543445533324254144222323444435434 +2222222213222221242412221222422412242222422222222243422222223322223312321222222224312222114242222122 +3433323211432232132333342315221231212122422222223222342532222232222322332322322122223362212332333222 +3336366236534333312658733734812673565367363633493427564523237435227565326333443426834362824644625364 +4357465572665564346562471343766669441943122463423433275637564576536879724267437222494748333653233755 +3251333123384395933353113591332432852332831353331563423331133323737233324232263533334453333438225331 +2221233222523121122232352233223273222162222122321221542123231721423323212234231221312422922232222122 +2347428434388444244454353267556431343444247474423244667448648646734446449355246426429447447667877484 +8223133312212352535242443324233233122222333322183335482423333235243223512333422218371255223152232273 +2333348272232421233328232223363248533322333433625354362434431131835242333338324343538422217313221333 +5244525525422225172222145521135243655351423435465222523127525225526564112232412222533344243322536522 +9337955566474353798357579763925278522639273594985695778467379693266636984829236465674439753475477496 +5547684493542734555559255658454363554452343755544534537387472843235652634565243655331467564552451353 +5443467255446574437533432441334544864864564822444474948446244458644346434464462464463723442446823442 +3333233243233313323577324313231333124332733833133632283286333128323233723332236333523233313333333333 +2362233252522234655222212124632222112222322122222112221223222831251242212221222221321513222221211222 +3354445327232543341248374345453445344433254354223343445433432334362532333452434254535453343443334323 +2231223332232221232122123312222342235222314222312123223211232212412222222332522222222222222221222222 +3122331422322226223252212432593231242142222522332233122321422322323232222323233321232322222422234232 +5335733324234435724423153333323142342535232253531532334343232333323333332253345522324353321633553533 +7169583588263547243342327722838442434722247325245338435256142653493663273773412363285334461371345338 +4315513145533243342177352723333231323465427245425542334392472445333535435572234447721542443115232365 +3598423344472794382532464291685232264482695248493462263157561768216278292523392646639572838674538327 +5523624134533422152411233222312342243132221333546324352223533333222363434433244244332322322232432323 +3133434421232232322223432222233332324722323233331323533243353212312734323222423233123422231133223222 +1422224443333422222353325323342344452434323253344243334431234423231122423323333343332321514234352443 +6395962918225862223357365712226336244825423496424453226299443829425838422422455423268785482242284422 +3643114411566633356554625155132613411634514446251351451346145565241362514361644441451632322655242789 +2523714443344511337123154283355233333362325372532226255455454325224258142552122322214274532253344542 +4553125267216322224232816122612162222321662422222425226932562221235674623355612326234343362433233388 +3333533343821121333522355383343333222333258325323354223327324343334123332322635322435442333344443333 +6223236422282522227431235325123474353122322463322133332647342441122434275163313223265554642123242324 +4272223622412225314212212522622282231832158451323322143823522223912742424122242624132257322244172622 +2224222155323132318342733243342211324912221342623533153232229332522461213221394315222126282217724553 +6444253222632333533343433313232463344324312623234253462151234425362314252346225462342332342362424424 +2333241133333142327223122676122234324325133273451333273432236333232332232333236323362153333511332423 +2622841423321437487245225223923344285242626133252223413726244525122143252222415613238265333255832251 +7422224429353455322152232434625152493853521211212124252942555212213414354224236532225745625232632442 +3121212122222223222222222233222122222412222231412232222222212312126222224221263242221221322222425232 +1334232453342333332322323332343444333323332332422144234453433372346432334433432241233234325432428322 +4945325934553842923574553641695874566754752896523778566836675548475879374364474775377487434446674963 +6343131336333332332234332243632221332242336323333233566232333233223122243233263333613433462363213243 +4333211242332332426414263423453341422333426442332334443334429325223544144442343223423232831223344343 +2334153354134131432442236224421112742323323244414422323512245431275123471434432283112342424431424633 +4534545535564344523732653644424324543536135645545423554446415556545453735455962344345435336344554543 +2363222824233642423243512331621435342321233333215422632323234242613332365438333521365224113394232852 +4234136254444236238432341433752234334336334422354254469347244244342434345315585233442384445354243237 +4213323213431314121332114434141344444132141313113144413112241421311141443321321323123232313423456789 +1343343443443323445354253424327354255342342311441633334435533523333353313235234233634523433234344332 +5655679687663778498467668476986855546947369596975837586696386596866728486757888448648436677688744654 +3553138525342232333314525344432255238835138282723438363743582321542582452873523723234747438252551324 +1244425125443553423454413427556553352248144443433327253355534353453583252542243233453442241554262342 +3562433533563245323438323433411123433324332336533472132253433543363323234135233413133324733323254353 +2123422622317222566221113211225224252222222223115262222714215782223271172282226233213626222212112286 +5476553333435254792363268464263246612943846133375433833334943323443374332644824426453562217343432234 +4533642264534842545364852444441433449423574454644384446843456444473434416342274464344364385466363414 +2553333321342232354553153452423232423344343223613573335643346441233334315233323233343363233523343343 +2222122722241242292222356221123322226212122223232272922122221222222222222224221234223222123212222226 +5864635976747746353755462554626715346468766683655468485847178685788563655943775686234852636677785234 +5324243244361436658433613342334233432254342453534463542344644316552243454822324453631535225254253294 +3453465234532143223414332162355225264753223414256623521652441223656325347156535254834235331452533438 +6443223813144537317435135263352345442373348642424725321731533252432336742322612245432474352545511431 +3363234564333333633362497243233343333343232733343233373234353332222323252736233393322333331339342333 +2443241324223433443655642336433232343343424334342342462334333433333433331432243334433433534344333343 +3554232454243364236347249222743222233228673743534134573522736256331443444342222542223762256765223254 +6144442432122352232123514333244422243233343432231362232243222232322324364352313323321442422233132232 +2122212322372122222222222321222131214222371422362222122122232222211221242222132322223223231222262222 +2121322232422324224223321222222133322225221127322327222222222212261222211172237241224222313222831352 +2229635382476445685567731513152346112256322232543768242126227657323575572257232242593845123284628282 +5655256356356414345348335574336464513646333545552444463142264644665355634532334363315632454645333363 +5775734453444434342446531444443324364553424442434221434233244443472343444234253341324134443444444452 +4944744464449343448344334242424449135452434444442445125458448357443444566344252364452444645474443444 +3422332723526222126332462442345336322829222323332243332421224453374332363222253692321272226427422244 +1232224222233122222212222212242242251422222331232222224322412232223222222223222512222223232222212222 +4236256464656326563412244364635525426422634252632461235444142224656474455665246462444765633675457545 +2152122472281322122422332422413243816824222232214231732243244344324224232712123213212322234142222211 +2932465313335325342244258274323563332423235344543152367233333833243933515436234398833237345311334453 +2114253242242421423325334211224322232222528233533327155232252235223221222362473522525312223222232233 +5545266544555454739575555554595564556554734454655655335157553145285634363484534535356572535555555445 +1424532124222222254421422423224222232253545224231125421422154425524445252421325221222444516522624512 +3233333333342334313334333333433442243332332333342333232312434542536322123339641324442444353532643343 +2275626231322521112322222222922235213331343334636156264463556442336445312221254224121422443332233252 +5837142312346243343356333272244344123354234255432544353533222412333245424233233747442331352442123538 +5533323435353234535633313423234233335433453252323232333843534232436744552133933546334663514483435357 +3623223233325322353532522322331221252232213314224354323422522335252353312322222423233112433123221533 +6652245353237562224222366245152425252254226743346226624254245223535363551226362625322232156213225223 +4543555325658545647363554356555443423347242844527854452256659352673744625422335545354444223763472395 +4245563467623222649626215474422425222222132294244413412343221442222261722633262264432241483142229485 +2433343343337543237236132281673423448424333333552783873366244273333455532631745524431327358417325638 +3523658544374454355545552357541541335445545455345734554554435546434545543335443345457348554555335564 +4532522232233224231184748922225222633234231854726422522552364922513448222412423427223235652546122276 +2241143324516423222423252632222332262332412223243324221422563224212222326224223252336342523222241222 +3324423341314144313333533531425435353455343223324323347435382244243545333322314324555144535334434322 +2344548144254334453735464536325454213654552425352355442444483443453414594244432335443433414334452463 +3313233111537242432322483232452144525253231342333532223212231233232243332542222231354233435224322224 +2132225222222331233221342122122132221232221232321232221222129222222222122221422223223222272222222221 +4345522253633552315442253235632134352442253424533523252245252522444225557251515244245575432556443315 +3675458614467383556471586343723636656299942262685272282858229627727742762492461557426175333293623532 +4566623243142426752274652321653253226553252545512454645454622272473122432663222326222544542294121527 +3432462388237445235355765535373547537452574467533462214534572777243567763523753574545535544266433765 +2343332222544322122633132333623133123542226536423422232822232421335332631422322432332122223154431422 +6426245323142423422454352443241244243226424352452344247545342462216226332484222425426222464333526234 +2235322223332225333123422223222423532421412344863121233237412433122343327322222221512112332343132224 +2225223322223234232321542252323222232322222321351322123227212331322222451232322231233322245353422214 +2333333328623223462232333243232533325132733333332323339273385336343233432354366373333326362532233213 +2645652857354336436442542255243563154464359244632516353543234545556466266556433433385634565844314346 diff --git a/input/3/example.txt b/input/3/example.txt new file mode 100644 index 0000000..7255fca --- /dev/null +++ b/input/3/example.txt @@ -0,0 +1,4 @@ +987654321111111 +811111111111119 +234234234234278 +818181911112111 diff --git a/input/4/1.txt b/input/4/1.txt new file mode 100644 index 0000000..654e8ef --- /dev/null +++ b/input/4/1.txt @@ -0,0 +1,136 @@ +@@@@@.@..@@.@@..@..@@@@.@@@...@@...@@.@@@@.@..@@....@.....@@..@@@@@@.@@.@@.@@.@@.@..@@@@@.@@@@@@@.@@@@@.@@@@@@@@@@@.@..@@@@..@@.@....@.@ +.@@@@..@@@@@@..@.@@.@@@.@@@..@@@@@@.@...@@@@@.@@@@.@.@@.....@@@@@@.@@@@@.@@@@..@@.@.@@.@.@@.@@@@.@@.@@@@@@@.@@@..@@@@....@@@..@....@@... +.@@.@@....@@@..@.@.@@@@@@@@@.@@.@.@.@@@@..@@.@.@@@.@@@....@.@.@.@.@@.@..@@@@@@.@@@@@.@@@@.@..@.@@@@@.@@@@@@@..@@@@.@@@.@@@.@@@.@.@@@.@.. +.@@@....@@@.@@.@@...@@.@@@@@@@@@@....@@.@@@@@@@@..@@.@..@@@.@.@....@...@@@.@..@@.@@@@@@..@.@@@@@@@@@@.@.@@@....@@..@@@..@@@@.@@.@@.@@@@. +@@@@@@.@@@..@@@..@@.@.@@@....@@@@..@@@.@..@.@@@@@@@@.@@@@.@.@.@@@@..@@.@..@@@@@@@...@@@.@@@@@@@.@@@@@@@..@@.@@@@@@@.@@.@@@@@@@.@...@@@@@ +@@@..@.@@@@@..@@@....@.@@@@.@.@@@@.@.....@.......@..@...@@@...@@@@.@.@@.@.@@.@.@.@@@.@.......@@..@.@@..@@@@@@@@@@@@.@@.@@@...@..@@@@@.@. +@@@.@@@@.@@.@@@.@.@@.@.@..@@@@@@@@..@@@@@.@..@@@@.@@@..@@..@@.@@@@@@..@@@@@@@@.@.@@@.@...@.@.@@@@@@...@@@@.@@@@@@@..@.@@.@.@@@@@@@@@.@@. +@@...@@@@...@@@@@@@@@.@@@.@@@@..@@@@.@@@@@@.@.@.@.@@@@@.@@@@@.@@@@@@@@.@@..@.@.....@.@@@@@@.@@@.@..@@.@@@.@@@..@.@@@@...@@@@.....@@@.@@. +@.@@@.@.@.....@@.@@.@@@@...@@@@...@@@.@@@@@@@@@@@@@@.@@@@@@..@..@@.@@@@@..@@.@@@.@@@..@.@@@@@@.@@..@.@@@.@@@@@@@@@@@.@@@@@....@@@.@@@@@@ +@@@@@@@@@.@@@@@@@.@...@.@..@@@..@..@@..@@.@@.@@@.@.@@@@@@@@@@@.@.@.@@@@@@.@@@.@@.@@@@.@.@@@@@@@@@..@@@@@@.@...@.@.@@.@.@@@@@@.@@@@@.@.@. +@@@...@.@@@@....@..@@.@@@@.@.@@.@@@.@.@...@@@@@@@@..@@@@.@@@@@@@......@...@..@@@@@@@@@@.@@.@@@@..@@@@...@@.@..@@@.@..@@@.@..@@@@@@@@.@@@ +@@.@..@@.@@@.@@..@..@@@.@@@@@.@@@@@@@@@@@@@.@@..@@..@.@.@@@@.@.@..@@..@.@@.@@@.@@@@@@@@@@@@@@@.@@..@@@@@@@@@@@@@@@@@@.@@.@.@@@@..@@.@@@. +@@@@.@.@@.@@@@@@@@@@.@@@.......@@@@.@..@@.@.@@@.@@@.@@.@.@@.@.@@@.@@@.@.@@@.@@@@@@@@@.@..@@.@@..@@@@@@@@.@.@@..@@@.@@@.@@.@@@@.@@@@.@.@. +.@@@.@@.@..@@@@.@..@@..@@.@@.@@@..@@@@@.@.@@@.@@@@@@@@.@@@..@@@..@..@@@@@.@@@.@@.@@.@..@@@@@.@@@@@.@@.@..@@@@.@.@@..@@.@@@@.@@.@@@@@@@@@ +@@.@.@@.@.@....@@@@..@.@@@@@@@...@@@@@.@@...@@@.@@@..@....@@.@@@.@.@@..@.@@@..@@@.@.@@@...@.@@@@..@@.@@@.@..@@@@@..@@.@@@@@@@@.@@@@@@@.. +.@.@@.@@@@.@.@@.@..@......@.@.@.@.@@@.@@@.@@@@.@@@@@.@@@@@@@@...@.@.@.@.@.@.@@.@@@@@@@@..@@@@.@@@@@..@.@@.@@.@@.@@@@@@@@.@.@.@@.@@@@..@@ +@@@.@@@@@.@@@.@.@@.@@.@@@..@.@@.@@@@..@.@..@@@@.@@@@.@@@.@@.@@@.@@@@@@@.@@@@...@@@@..@...@@.@@@@@@@@@..@@@@@@@@@@@.@@@@@.@@@@@@..@@..@@@ +@.@@@@@.@@@.@@.@@@.@@..@.@@@.@@@@@@...@..@@@@@@@@@.@@@@@@@@@@@@@@@@.@@@@@.@@@@@@@@@@@@.@.@@.@@...@.@@.@.@.@@@.@@@..@@@@@.@.@@@@@..@..@.. +@@....@..@.@@.@@@@@@@.@@@.@@@@@.@@.@@.@....@@..@@.@.@@.@@.@@@@.@.@@.@@@@..@@@@@@.@@..@@@@@.@@@@@.@.@@@@...@@@@.@@@@@@@.@@@@@@@@@@..@@@.@ +@@@@@....@...@@@.@@@@.@@.@.@@@@@...@@@@.@.@@..@@.@@@@@.@@.......@..@@@@@@..@@...@@@.....@.@@@@.@@@@..@@@..@@.@@@..@.@.@.@@@.@...@..@@@@@ +...@@@@@@..@@@..@@@@.@.@@@@@@.@.@@@...@.@@@.@@@@@@@@@.@@...@@.@@..@@@@...@@@@.@@.@@..@.@@.@@@.@@@@@@@.@..@.@...@..@.@....@@@..@@@@@@@@@@ +@.@@@@@...@..@@@.@@@.@.@.@@@.@@@....@.@@@.@@..@.@@@@@@.@@..@@@@@@..@@.@@.@.@@@..@.@..@@..@@@@@@@.@.@@@.@@@.@.@@..@@@@@@@@@@@@..@@..@@.@. +@..@..@..@@@@@..@@...@@.@@@@.@@.@@.@.@@@.@@..@@..@@@..@.@@@@..@@@@.@@@@.@@.@@@.@@@@@@@...@@.@@..@.@@@@@@.@@@@@@.@.@.@.@.@@@.@..@.@@.@.@@ +@@....@@@@@..@@@@@.@@@@@@...@@@@..@@@..@@@@@@@..@.@@@@@@@@.@.@@@@@@@@@@..@.@...@.@.@@..@@.@.@@.@@@@.@@.@@@.@@@..@@...@@@.@@.@@@@.@.@@@.@ +.@@@.@@.@.@.@@@.@@@@@@@.@.@@@.@@@@@@@@.@...@.@..@@.@@@@@....@@@...@.@..@@@@.@.@@.@..@@@@@@@@@.@.@@@.@@..@.@@.@.@@@@@.@@@.@@@@@.@@.@@.@@@ +.@@@@@.@.@@@@@@.@..@.@.@.@@@@....@@.@..@@.@@...@@.@@.@@@..@@@.....@@@.@@...@.@@.@@@@..@@@@.@@....@@..@.@.@@.@@@@@@@@.@@@.@.@.@.@@@@@@..@ +...@@@.@.@@.@.@@.@@@@@@@.@@..@..@@..@@.@@@@@.@@@@..@.@.@..@@.@..@.@@@@@@@.@.@@@@@.@..@@@@.@@.@...@..@@@@@@.@@@@@@@@@@@..@@@@@@@@.@.@@.@@ +@@@...@@@@@...@@..@.@.@@.@@@@..@@@.@@@@.@@@.@@@@@@@@@.@.@..@@@.@@@@@@@@.@.@@@@@@.@@@...@.@.@@@@@..@@@.@.@@.@@@.@..@@@.@@@@@.@@.@....@.@@ +@@.@@@@..@.@@@@@@@.@.@@@@@@@..@@.@@...@@@..@@@@@@@@@.@...@@@@.@@...@@@@@.@.@@@@..@.@@@@...@@.@@@@...@@@.@.@@@.@@.@.@@@.@@.@@...@@..@@@@@ +.@@...@@@@@@.@.@@@.@...@@@@@@..@@@@@.@@.@@@@@@@@@@@@.@@@@@.@.@@..@@@@@.@@.@..@@.@.@@@.@@@..@..@@@.@.@@@@@.@.@@.@@.@.@@.@@@..@@@@@.@@@@@@ +@@..@@@@@@.@@.@@@.@@@@@@.@@@@@...@..@@@.@@@.@.@..@.@@@.@@@.@@@@@@.@@@..@@.@..@..@.@@@@@.@...@@...@@@@.@@.@.@@..@@@.@.@@.@.@@@@.@@...@.@. +@.@.@@.@@@.@.@@@.@.@@@.@.@...@@@.@@...@@.....@...@@..@.@@.@.@@@@@@@.@@.@@@@@@@.@.@@@.@..@.@.@..@@@@.@@.@.@.@.@@@@@@..@.@@.@@@.@@@..@@..@ +@.@.@@@@.@@@@..@..@@.@@@@@@......@@@..@@..@.@@@@@.@@@@.@.@.@.@..@..@.@...@@@@@@.@.@@@@.@@.@@@@@.@.@@.@@@@@...@.@@@@@.@@@@@.@...@@.@@.@@@ +..@@.@@.@@@@..@....@@@@..@@.@.@.@@@@.@@.@@@...@@@.@@..@....@@...@@@@.@@@@@....@@@@.@@.@@@@.@@@...@.@@@.@@@@.@@@....@.@@.@@.@...@@..@@@@@ +@..@@.@@.@.@@@@@@.@@@@@@.@..@@@@.@.@@.@.@@.@@...@@@@@@.@@@@@...@@@@@@...@.@@@@@...@@@..@..@@@@.@@.@@.@@@@..@@@@@@@@@@@@@@.@@.@.@@.@.@.@@ +@@@@.@.@@@.@@.@@.@@@.@..@...@@.@@@.@@@@@...@.@@@.@@@..@.@.@.@.....@@@@@@.@.@@@.@@.@@....@.@..@@@.....@@.@@@..@@@..@@.@@@.@@@.@@.@@@...@@ +...@..@@.@..@@@@@@@.@@@.@@@@.@.@@@@@@@@@@@@.@@..@.@@@@@.@@@@@@@@.@@.@...@@.@@@@@@@.@@@@.@..@...@.@@@@..@@..@@.@@@.@.@...@@...@..@.@@@.@@ +@@@@@@.@@.@.@.@@@.....@@@@@@@..@.@@@....@@@.@.@@@@..@@.@@@@...@@@@@@..@@@@.@..@.@.@@@.@.@@@@@.@@@@@@@@@...@@.@@@@@@@..@@...@@@@@@@.@.@.@ +@@@@.@@@.@@.@.@.@@@@@@@@@.@@@@@...@.@.@@@.@@..@@@@@@@@@@@.@..@@..@@@@.@@..@@@@@@@@@@.@@..@....@@@@@@@@@.@...@@@@@.@@@.@@@@@..@@@.@@@.@@@ +@.@@.@@..@@....@@.@@.@@@@@.@@@@@@@@@@@@@@..@@.@@@....@..@@@@.@..@.@@@@@@@@@.@@@...@.@@.@@...@@..@@..@.@@@@.@@@@.@.@@.@.@@.@@@@@@@@@..@.@ +.@@@@@.@....@@.@.@@.@@@@@.@@.@@@@.@.@@.@.@@@.@@..@.@@@..@@.@..@@..@.@@@@@.@.@@@@..@@@@@...@@@.@.@@@@@@@@@@.@@@@.@@.@@@@..@@@.@@.@@@@@@.@ +..@..@@@@@..@@@.@@@@@.@@@...@@.@@@@..@@@@@@@..@@@@.@@.@.@@.@@...@@..@@@.@@.@.@@@@...@..@@.@@@..@@..@.@@@@@@..@@@.@@@.@@.@@.@@@@...@.@@@. +@@@@@@@@@@@@.@@@.@@...@@@.@.@@.@@.@@.@.@....@@@@@.@.@@@@@@@@.@.@.@@@.@@@..@@@.@.@@...@@..@@@.@@@.@@@@@@@..@@@@@@@.@.@@@.@.@@@@@...@.@@@. +.@@@.@@.@..@@..@@.@@@.@@.@.@@@.@@@@@.@@@@@@@@.@.@.@@.@@@@@..@...@@@.@.@@@@@@@.@.@..@..@...@....@.@..@@@@@.@@@.@..@@@@.@@@.@.@@@@...@.@@@ +..@@@..@@@@..@@@@.@@.@@@.@.....@@@@@@@@@.@@@@@@.@@@@@..@...@@@@@@@@@.@@.@@@@@@@..@@@@@@.@@.@@@@@.@.@@@@@@@.@@@@@@@@@..@@..@.@@@..@@@.@@@ +@@@@@.@@..@..@.@..@.@@@@@@.@@@@@@@@.@@@@@@@@..@@.@..@@@@@@@@.@@@@@@...@@.....@.@@@@@@....@..@@.@..@.@@.@@.@@@.@@@@@@@.@@...@@.@@@@@@@@@@ +.@.@@...@@.@.@.@@.@@@@@@@@@.@.@@@...@@..@@.@@@@.@@@@@@@@@.@@@@@@@@@...@...@@@@@.@@@@@@@@@@@@@.@@@@@@.@@@@@@@.@.@@@@.@.@.@.@.@@@@@.@@@..@ +@..@@@@@.@..@@@@@@@.@@@.@@.@...@@@.@@@.@@.@.@@@.@@@@@@@.@...@@@..@@@@@@@..@.@.@..@@.@@..@@@..@@.@.@@@@@@@@.@@@@.@.@..@@.@@@@..@@@@@@@@@@ +@@..@@.@@@@@@@@@@@@@.@.@.@@@.@@@@@@@.@@@@@..@.@@.@..@@@.@.@.@.@@.@...@.@@@@..@@@@.@.@.@@.@..@.@@.@@@.@@@@@.@.@@@.@.@@@@@.@.@.@@.@@@...@@ +@@@.@@@.@@@@@.@...@.@@@@@.@@..@..@@@..@.@.@@@@@@......@.@@.@@@@@@..@@@@@@@@@..@..@.@.@@.@@@@.@@@@.@..@@@..@@...@@@.@@@@@@.@.@......@.@@@ +@@@..@..@...@@@@@@@@@@.@@@..@.@@..@@@.@@@@.@@..@@@@@..@.@..@@@@.@.@.@..@@@.@@.@.@@.@...@.@@@@@@.@..@@@@@@@@@@@@@@@.@@@@@.@@.@@@@@.@.@@.. +..@@@.@@...@@@@@..@@.@@.@@@@@@@@.@@@@@@...@@....@@...@@@@@@@@@@@.@@.@@@...@@@.@@@@.@.@@@@.@@.@@@.@@@@@@@@@@..@@.@..@@.@@.@@@@.@.@@.@...@ +.@@.@@..@@@@@.@@..@@@@@@.@....@.@@@@..@.@..@.@@@...@@@.@.@@@@@@@.@.@@.@@.@@.@@.@@...@@@@@@.@@@@.@.@@@@@@@@...@@.@@@.@@.@@@@@.@...@@@@@@@ +.@@@@.@@@@@.@@@.@@.@.@.@@@.@.@.@@..@@@.@@...@@.@@.@@.@@@.@@@@@@.@.@@@.@..@..@@.@..@@@@@.@@.@.@@.@@.@..@@.@..@@@@.@@..@@@.@@@@@@@@.@.@..@ +@@.@....@@@.@@.@@..@.@.@.@.@.@@..@@@@@.@@@..@@....@@.@@@..@@@@@..@.@.@@@@.@@@@.@@@@...@@@..@@@@@@.@..@@@.@@@@@@@@@@@..@@..@@@@.@@.@.@..@ +..@.@@.@.@@@....@@@.@.@@@@@@@@@@.@@@...@.@@.@@.@@@@@@@.@.@@@@@@@@.@...@@@.@@@@@..@.@@.@..@.@@@@@..@@@@@@@@@@..@@.@@@@.@@@@@@@@@@...@..@. +@@..@@.@@@@@@@..@@..@@@@.@.@.@@.@.@@@@.@@@.@.@@..@....@@@.@@@....@@.@@@.@@...@@@..@@.@@...@@@.@@@....@@@.@@@.@@@@..@@..@.@@.@@..@@@.@@@@ +@@.@.@@@@@@@@@@@@@..@@@..@@.@@@@@@@@@@@@.@..@.@@@@@.@.@@@..@@.@@@@@...@@..@@@..@...@@.@..@.@...@@....@.@@.@..@.@@@@@@.@@@.@.@@.@.@@.@@.. +@.@.@@@@@@@@@@..@..@@.@.@@@@@@@@.@@..@@@@@.@@@@@.@..@..@@@.@@@.@@@@.@.....@@@@.@@@@@@@@@@.@@@@@.@@@..@@@.@@@..@.....@@...@..@.@@@..@@@@@ +....@@@@.@..@@@.@@@@...@@@@.@.@.@.@@..@....@@..@@@.@....@@@.@@@..@@@@@....@..@@.@.@.@@.@@@.@..@@@@.@....@@@@@@.@@@@..@.@@.@.@@.@.@@@.@.@ +@.@...@@@@@@@@@.@@@@@@.@.@.@@@..@@.@.@.@@@@@@.@@....@.@@..@.@.@@@@.@@@@@@.@@@.@@.@..@@.@.@@@...@@@.@.@@..@.@@.@.@.@@@@@@@@.@@@@@...@@@@. +@@.@.@@@@@.@@@.@@@.@@@.@@@..@@@.@.@.@@@@.@..@@@@.@@@@@@@@@.@@...@@@.@@.@..@....@@@@@@@.@.@@@@@@.@@..@.@@@.@@@@@@...@.@.@....@.@.@@.@@@@. +@@@.....@..@@@@.@.@@@@@@@...@.@@@.@@@.@@.@@@@@@...@@.@.@@@...@@@@@@@..@@@...@.@...@@@@@.@@..@...@@@@@.@@@.@.@@@.@@..@.@@..@@@@@@@.@.@..@ +@@@@@@@.@.@@..@@@@@@@@@...@.@.@@@@.@..@.@.@.@@.@@.@@..@@@.@@@@@.@@@@@.@@@@.@.@@.@@.@.@@..@@@@..@..@@@@@@.@.@@@@@...@@.@..@..@.@@.@.@@..@ +@.@@@@@@@@..@@...@@@.@@@@..@.@@@@@@...@.@@.@@@@@@.@@@@.@@..@.@.@@..@@..@@.@..@.@@..@..@@@@...@@@.@@.@@.@@.@@@@@..@@@.@..@.@@.@@@@@@...@. +@@.@.@@@@@@@@@@@@..@@@..@.@@@.@.@@@.@@@@...@@@@@@.@.@@@..@@@@@@@.@.@@@@@..@@@...@@@..@@..@...@@@@@..@@..@.@@.@.@@@@@@@@@@.@..@@@.@@@@.@. +..@@...@@@@@@@.@@.@.@@@@@@@..@@.@@@@..@@@@.@@..@@@.@@.@@.@@.@@.@.@@@..@...@.@@@@@.@@@@@@@@.@.@..@@@@@.@@.....@@@@..@@.@@@.....@@@@@..@@. +.@.@@@..@@@.@@@@@@..@@@@@@..@....@@@@@.@@@@@@.@@@...@@@@...@..@@.@@@@@@@@@@.@.@@@.@.@@..@.@@@@.@@.@.@..@.@@@@@@@..@@@@@@@@@..@.@....@.@@ +@@@@@@@@@..@@...@@@@.@@@@.@....@.@@@@@@.@@@@@@@.@@.@.@@.@@@..@@@@@@.@@.@@.@@@@@@...@@@@@@@@@.@@@@..@@@..@..@..@@.@.@@@.@@@...@@...@..@@@ +@@@..@.@@@.@@@..@.@...@@.@@@...@.@@..@.@@@@@@.@....@@.@@.@@@@@@@@.@@@@@@..@@.@.@.@@@@@..@..@@@.@.@..@@.@@...@.@@@@@.@..@@..@...@@.@@@..@ +@..@@.@@@@@@.@.@@..@.@@@@@.@@@@@@@.@.@@@.@..@@@@@.@@@@@@@..@.@@@@@...@@@.@@.@.@@.@..@.@..@@@..@@@@@@@@@@@..@@.@.@@@@@.@@@..@@@......@@.@ +.@@.@.@@@.@@.@.@@@@..@@@@@@..@..@@@@....@.@..@@.@@@@..@@@@.@@@@@@@@@...@.@@.@@@@.@@@@@@@@@..@.@@@@@@@@@@@@@@.@@@..@@.@@.....@@@@@@@@@... +@...@@@@.@@@@.@@@.@...@.@.@@.@@..@@..@..@@@@..@.@@.@@@.@@@@@@@@.@@@.@...@.@....@.@@.@@.@@.@..@@.@@.@@.@@.@@@@@.@@@@.@@@@@.@@.@@@@@..@.@@ +@@@@@@@@..@@...@@..@@.@@@.@.@.@@@..@.@@@.@.@.@@@.@@@.@@...@@@@.@.@@@@@@@.@.@@@.@@.@@@.@@.@@@@@@.@.@@.@.@.@@@..@@@@.@@@@@@@....@@.@@...@@ +@@@.@@@@@@@@@@@.@..@.@....@@@@@.@@@@@..@@@@.@@......@@@@@@@.@.@@@.@..@@@@.@.@@@@@.@@@.@..@.@@...@.@.@.@@.@...@..@@@..@@@.@..@@@@.@..@@@@ +...@@.@@@.@@.@@@@@..@@..@@.@@...@.@@.@..@.@@@@.@@@...@..@@@@@@@@@@@@@.@@@@.@.@.@@.@@@.@.@@@@.@..@@@@.@.@@.@@.@@....@@..@@@@...@@@@@.@@.@ +@@@@@......@@.@@@.@@...@@@@@@@.@.@@@....@@.@..@@.@@.@@@@@@@@@@@@..@....@@.@.@@.@@@@@@@@.@.@@@.@.@.@@@@@@@@@..@@@@.@...@.@@@@@@@..@.@..@. +@@@.@@.@.@@@@.@@@.@@@.@@@@..@..@@@@.@@@.@....@@@@@.@.@@@@@@.@.@@@@@@...@@..@@@.@@..@..@..@.@..@@@@.@@@@@@@@@@@.@@@.@@@@.@.@@@.@@...@..@. +...@.@@@.@.@@.@@@@@...@@.@@@@....@@@@@@@@@@@..@@.@..@@...@..@@.@@@@.@..@.@@@....@@@@.@@.@.@@@@@@@...@.@@..@.@@@.@@@@@..@@@@@.@@@@@@@@@@@ +@@.@@@@@@@....@..@@@@@...@@.@@@@@....@.@.@@.@@@.@@.@@@@@.@@@@@@@@@@@.@.@@.@@@@@..@.@@@@@@@.@..@.@.@.@@@@..@@@@@@.@..@@@..@..@@@...@@.@.. +@@@..@.@@@.@...@@@..@.........@@.@.@@@@.@..@@@@@@@@.@@@@.@@@@@@@.@@..@..@@@..@.@@@...@@@..@.@.@@@@.@.@@..@@@@.@..@@.@@@@..@@@.@@.@..@@.. +@.@@@@@..@@@.@@.@.@@.@@@@@@@..@.@@.@.@@@..@.@@@.@@@@@@.@@@@@..@@.@@..@@@@@...@@@@.@@@.@@@..@@.@@@@@..@@@@@.@@@@.@...@.@.@.@..@@@.@@@@@.. +.@@@....@@...@.@.@@.@.@@@@@@@@@@.@.@..@@.@@.@@....@..@@.@..@@@.@@@@@@.@@@.@@@@.@@..@..@.@..@@@@.@@@.@@@@@@@.@@@@.@@@@@@@@.@@@@.@@@@.@.@@ +@@@@@@@@.@@@.@.@@@@@@@.@......@@.@@@.@..@@@.@.@..@@.@@.@.@.@.@@.@@@@.@@@@@.@.@@@.@@.@.@.@@@@.@@..@@@.@@..@@@@.@@@@@..@@@.@@@@.@@.@.@@@.@ +@.@@@@..@@@@@...@@@@.@..@@@@@.@.@..@@.@@@....@..@@@....@.@@@..@..@@.@@@@..@@@@@@@...@...@@.@@@@@@..@@@@@@..@@@@@@@@.@@@.@@@@.@.@@.@.@@@@ +@@.@@.@@.@@@@@.@.@@@.@..@@..@@@@@..@@@@@@@@@..@..@@@..@@@@@.@@..@@@@@@...@.@@@..@@..@@@.@@.@@@.@..@..@@@.@@..@@@@.@@@@@@.@.@..@@@..@.@.@ +.@@@@@.@@@@@.@@@@@@@@@@@@.@@.@@....@@.@@.@@@@@@.@.@@@.@.@.@.@@@@@.@....@.@@.@@.@@.@@@@...@@@.@..@..@.@@@@@..@.@..@@@@@@@@@@@@@@.@@@@...@ +..@..@@@.@..@@..@@@..@@@.@..@.@@@.@@@@@@.@.@.@@@@@..@@@@@.@..@.@@.@@@.@@@@@..@@@...@@@@.@@@@@@.@.@@@@.@@.@@....@....@@......@@@@@@..@@.. +@@@@@@@.@.@@@@.@.@@.@@@@.@.@@@@.@.@@@.@@@@@@.@@@..@@.@..@@..@..@.@.@.@@@.@..@@...@.@@.@@@@.@...@.@@@@.@@..@@@@@@@.@@@@.@@@@@..@@@.@@@... +.@@@..@@@@.@@@.@@@@@.@@@...@..@..@@@@@..@.@@@..@@@@.@.@@@@.@@@.@.@@@.@@@@@@.@@@@..@@@.@.@.@@@....@@@@@@..@@@.@@..@.@@.@@..@.@@@@@@.@@@@. +@@.@..@.@@@@@.@@@@@@@@@.@.@@@@@@.@.@.@@...@..@..@.@@@@@@@@@@.@.@@.@...@..@.@.@@..@@@.@..@@@@..@@..@.@.@@@@@@.@.@.@@@@@@@..@.@@@@.@@@@@@@ +.@..@..@@.@@...@.@@@@@@@.@@@@@@.@@.@@.@...@..@@@.@..@@@@..@...@@@.@..@.@@.@@@.@@.@.@@@@..@...@.@.@@.@@..@..@@.@@@.@...@@..@@@@@@..@@.... +@@@..@@@@@@@.@@.@@@@..@..@@@...@@@@@@@@@.@.@..@@@..@@@@.@.@....@..@@@@@..@@@@@@@@@.@@@.@..@@@@@@..@@@...@.@@@@@.@@.@.@.@...@@@.@.@@..@@. +@@@.@.@@@@....@.@@@.@@@@@@@@@@@@@@@.@@.@.@@@@@@@@@.@.@@.@@.@@@.@@.@@.@@@@@@@@.@@.@..@..@@.@@.@@@....@@..@@@@@@@@@@....@@@@@..@@.@@.@@@@. +@..@@@@@@@@@@..@@..@.@.@.@@@@@@@@@@@@.@.@@.@@.@@..@.@@@@@.@@@@@@@@.@@@..@.@....@@..@@.@..@..@@@.@.@..@.@..@@@@@@@@@@..@.@.@@@..@@@@@@.@. +@@@@@.@@..@@@@@@@@@@@.@@@.....@.@@....@@@.@@@@.@.@@@@.@.@@.@@....@@.@@@@.@@.@..@..@@@@@..@@@..@@..@@@@.@@@.@..@@.@..@@...@@@@...@@@@.@@@ +@@.@..@@..@...@@@.@.@....@@..@@@@.@@@@..@@@.@@@.@@@..@@@@..@@@@@@@@..@@@@@@@@.@..@....@.@.@@@@@@.@@@@@....@@@@@....@@@@.@@@....@@.@@.@@@ +@@.@@@@.@@..@.@.@..@@.@...@@..@@@..@@@@..@@@@.@@.@..@...@.@@@@.@@@@@@.@...@@@....@@@@.@.@@..@@.@@@@@@@..@..@@.@@@@@@@@@@.@.@.@@@...@.@@@ +.@..@@@@@..@@@@.@@@.@@..@@@@..@@@.@@.@..@.@..@@...@@.@@@@@@@.@@@@@@.@@.@@.@@@@@@@@@@..@...@@.@@@@..@@@@.@@.@@.@..@...@@@@...@.@@@@@..@@@ +....@@@..@.@@@@@@.@@@@.@@@..@.@.@@.@@@@..@@@.@@@@.@.@@.@@..@..@@@......@.@@@@.@@.@.@.@@..@.@....@@@.@@.@@@@....@@@@@.@.@@@..@..@@.@@@..@ +@@@@@.@.@@@@@..@@.@@@.@.@@@@.@...@@@.@.@@@@@@@@@@@@@..@@@@@..@@@@@.@.@.@@.@@@..@@@@...@..@@.@.@@@.@@@@@..@.@.@@@.@.@.@.@..@@@@..@.@@@@.. +.@.@.@@@.@.@@.@@@.@@@@..@.@@@@..@.@@@.@@.@.@.@.@@@@..@@@.@@@@.@@@@@@@@@.@.@@@@@.@.@.@@@@@.@.@@.@.@@@.@@.@.@..@@@.@@@@@.@@@@@@@@..@@@@@@@ +@..@@..@@..@..@@@.@@.@@.@@@.@.@@.@@@@..@@.@...@@.@@...@@@@..@.@.@...@.@.@.@@@@@@@@@.@@@@@@@@.@@.@@..@.@.....@...@@.@@.@@..@@@@...@@@@@@@ +@@@.@@.@@@..@@@.@@@@@@.@@@.@@@.@@.@@@.@@.@.@..@@.@@...@@.@@.....@.@@@@.@@@.@.@@@@@.@@..@.@@@@@@.@.@@@@.@@.@..@@@@..@@@@.@@@@..@@@@@..@@@ +.@..@@@@@@@@.@@.@@.@.@@.........@@.@@.@@@..@@..@@.@.@.@..@@@@.@@@@@@.@@@..@@@.@@@@.@@.@@.@@..@@@@@@@@.@@@@...@@@@@@...@@@@@.@....@@@@@@@ +@@.@.@@@.@.@@...@.@@.@@@.@@@@@.@..@@.@@@.@...@@@@@@@@.@@@.@@@@@@.@@@.@.@.@@@.@.@@@@..@..@@..@..@@.....@..@@....@.@@@@@@.@@@@@@.@@.@@@@@. +@..@@@@@@.@.@@@@.@.@@.@@.....@.@.@@@.@@@.@@@....@.@@@.@@@.@@.@@@@.@@.@@.@@@......@@@.@@@@@@@@...@@@.@.@@@..@....@.@.@.@@.@@.....@@....@@ +@.@@@.@@@@@.@@.@.@...@@.@@@@@.@@@@.@.@@.@@...@@.@@@@@@@@@@@@@@@@.@@.@@@@@@@.@@@@@@..@@@@@@@..@.@@.@..@.@.@@@@@.@@@@@@@@.@@@@.@@@@@@@..@. +@@.@.@@@@....@.@.@@@@@@.@@..@@@@@@@.@.@.@@@.@@@@@...@.@@....@@.@@.@@@@@.@.@.@@..@.@.@@@..@@.@@@..@@@@@@.@@@@@...@.@@@@@.@@@@.@@.@.@.@@@@ +@.@.@.@@@@@...@.@@.@@.@@@@@...@.@@..@@.@.@@@.@.@..@@.@@.@..@..@@@@@@@@@.@@@....@@..@.@@.@.@.@@@.@..@@@@@@@@@@.@.@@..@@.@@@@@@@@@@@@.@@.@ +.@...@@@.@@.@@@.@@@@@@@.@@@@@@.@.@@.@@.@@.@@@@.@....@..@...@@.@@@@@@@.@@@@@@@@@@@@.@@@@@@...@@@@@..@@@.@.@..@@@@@.@@@...@@@@@.@@@@@@@@@@ +.@@..@.@.@@.@@.@@@@@@@@.....@.@@.@..@@@.@@.@@.@@@@.....@.@@@@@.@@@..@.@@....@.@.@@..@..@.@@@..@@.@.@@.@@.@@@@.@@@@@..@@@@@@@...@@.@.@..@ +.@.@@..@@@@@....@@@@@@@.@..@.@@@@@..@.@.@@@@@@@@@.@.@@...@.@@.@.@@.@@.@@@@@.@..@..@.@.@@@@@@@...@..@@@@@@@@.@@@@@.@.@.@@@@@.@.@.@.@.@@@@ +@.@@@.@@@.@@@@.@@@@@@.@@.@@.@.@@..@...@@..@.@.@@..@@@.@.@@.@@@.@@@...@@@@.@..@@@.@.@@..@@@@@@...@@.@@@@@.@@.@@...@.@.@@.@..@@......@@@.@ +.@@..@@@@@@@@@...@@.@@@@@@@.@@@@..@@@.@.@@..@@.@.@.@....@@@@@@@@.@@@.@.....@@@@...@@.@@.@.@@.@..@@@.@@@@@@@@@...@.@.@.@@@@.@@@.@@@.@@@.@ +@@@...@..@@@@.@@.@@@@@.@@@@@..@@@@@@@@@.@@@..@@..@@@@.@@.@.@...@.@.@@@@@@@@@@..@@@@@@.@@...@@.@..@@@@@.@@@@@@@@.@@...@@.@.@@.@@@..@@.@@@ +@@@.@@@@@@.@@.@.@@.@@@.@..@.@.....@@@@@.@@....@@.@..@@@@@.@@@..@@@..@@.@@@.@@@.@@.@@@@@@.@.@@@..@@@@.@@@..@@@..@@@.@@@....@.@@@.@...@.@. +@.@@.@@@@.@@@..@.@@@.@@.@@...@...@@..@@@@@@.@@.@@@@@@@..@@@@@@@@@.@.@@.@@@@@@..@@..@.@..@.@@@@..@@@@@@@@.@@@.@@@@..@.@.@@.@@.@@@@@@.@@@@ +@..@@...@.@.@@@.@.@.....@..@.@@..@.@..@@@@.@@@..@@.@@@..@@.@@..@.@...@..@@.@..@@@.@@.@@@.@@@.@@.@@@@.@@@.@@@@.@...@@@@@.@@@@@..@@@@.@..@ +.@.@@@.@@.@@.@@.@@@.@@@@@@@@..@@@...@.@@.@@.@@.@@@@@@@@.@.....@.@.@@@@@@@.@.@.@@@@@.@@@@@@@@@@@@@.@@.@@..@.@...@.@@@..@@@.@@.@.@@.@.@..@ +@@@..@@@.@@@@@@@@@@.@..@@.@@@.@@@@@@..@@..@@@.@.@....@@@@@@.@@@@@@@@.@@...@@@..@@...@@@..@.@@..@@@@@..@@@@.@@@.@.@@@@...@..@.@.@@.@@.@.. +..@@.@.@.@@..@...@..@...@@@.@@@@@@@@@..@@@@@@..@@@@.@@@@.@@@@...@@@@@@@@@@.@@@@@@@@..@.@@@@@@@@....@@@@@@@@@@....@@....@@@@..@.@@@.@.@@@ +@.@.@@@@.@@.@.@.@@..@.@@@@.@@.@@@@.@@@@@.@@@.@@@@@@@@@.@@@@.@@.@.@@@@.@@@@.@@@@..@@@@.@.@@.@.@.@@@@@@@.@@.@@@@@...@@@@.@@@@@@@..@@@@.@@@ +.@@.@@@@@@.@.@.@@@@@@..@..@@@@....@@..@@@.@@@@@...@@@@@.@@..@@@@..@.@.@@@@.@.@...@...@@.@..@@@...@@@..@.@@@@@...@@..@@@@.@@@@@...@@.@.@@ +@@@@@....@...@@..@.@...@...@@@@@@.@.@@@@.@@@@@@@.@..@@@@@@@@..@@@@...@@.@@.@.@@.@@...@@@@.@.@@@.@@..@@@@.@@@....@...@.@.@@.@.@..@..@.@@@ +..@.@@.@@@@@@@@.@@.@@.@@@...@@..@@@@@@@.@..@@..@@@.@@.@@.@...@@.@@@@@.@@@@@..@@@.@.@@.@@@@.@@@.@@@..@.@@@@@@@..@@@....@@@@....@@@..@.@@@ +@@@.@@@.@@...@..@.@....@@@.@@..@@.@@@.@@.@@@.@@..@..@..@.@@@.@.@@@@@@@.@@..@@.@@@.@.@@@@@.@.@@@@@@@@..@@..@.@@.@@.@.@..@@.@..@.@@@@@@@@. +@@@@@.@@@.@..@@@.@@@@@@@@@@@.@@.@@@@@.@@@@@.@@..@@@@.@..@.@@@@@@...@@@@@@.@@..@@.@@.@@.@@..@@@@.@@.@...@@@@@@...@.@@@@@.@@@@@@@@@@@@.@.@ +@.@..@..@....@@@@.@.@@@@@.@@@.@@@@@.@@@@@@@@...@@.@@@.@.@..@..@..@@@@@..@@.@@..@.@@.@@.@.@.@..@@.@@.@...@.@@@@@@.@.@..@.@@.@..@@@..@@@@@ +@.@@@.@@.@@@@.@...@@@.@@@.@@@@@@@@.@@@@@@@@@@.@@@....@@@@.@@@...@@@.@.@@@@.@.@@@..@..@..@@.@@@@@@.@...@@@.@@@@.@@@@@@@@@....@@@.@@.@.@@. +@@@@..@@@@@.@@@@@@.@@@@...@..@@@.@@@@@@@.@.@@@.@.@.@@@@.@...@.@.@.@@...@@@@@@@@..@@@.@@...@@.@@@.@@@.@@@@@@@@@.@@@@.@@@..@@@@.@@@.@@@.@. +.@@@@@.@@@..@@@@@.@@@@@.@..@....@@.@@.@@@.@@@@@@@.@@@....@@@@@@@@@@@.@@..@.....@.@.@@@@@@@@..@...@@@.@@@@@@@@.@@.@@.@@@@.@@@@@.@@@..@.@. +@@..@.@.@.@@@@@.@.@@@....@.@.@.@.@@@@.@@@.@..@@@@@@..@@.@@@...@@@@@...@..@@@@.@.@@..@.@@.@@@@.@@@.@@@.@...@@@.@@@.@.@@@@.@@@@@@....@.@.. +@.@.@@@@.@@@.@.@@@@..@@@@@@.@..@@@..@@.@@@@..@@@@.@.@.@.@@@.@.@.@@@@@@.@.@.@...@...@@..@@@@@.@@..@@@@@@@@@.@@@@.@@@.@.@@@@@@.@@@@@...@@. +.@.@..@@@@@@@.@@@@@@.@..@..@@@@@@@@@@@@@@@.@.@....@@@@@@@.@.@@.@@..@@@@.@.@.@.@@.@@.@@@@.@.@@@.@.@@@@@@@..@..@@@@@@@@.@@@@@@@.@.@.@.@@@@ +...@@@@@@..@.@@@@@@@..@@@..@@@@@@@.@@...@..@@@.@@@@@...@.@.@.@@@@@@@@@@@..@@@@.@@@@.@...@.@@.@..@@.@@.@..@@@.@@@@@@@@.@.@.@.@@@..@@.@.@. diff --git a/input/4/example.txt b/input/4/example.txt new file mode 100644 index 0000000..8209399 --- /dev/null +++ b/input/4/example.txt @@ -0,0 +1,10 @@ +..@@.@@@@. +@@@.@.@.@@ +@@@@@.@.@@ +@.@@@@..@. +@@.@@@@.@@ +.@@@@@@@.@ +.@.@.@.@@@ +@.@@@.@@@@ +.@@@@@@@@. +@.@.@@@.@. diff --git a/input/5/1.txt b/input/5/1.txt new file mode 100644 index 0000000..59f2f83 --- /dev/null +++ b/input/5/1.txt @@ -0,0 +1,1187 @@ +436639876131680-436867778393908 +197700960860637-198893061877806 +255753644093984-256141049798709 +2351348670325-2617031498963 +132305455060243-136355961131249 +435738105327068-436449599122321 +103525263650762-109263601125387 +325790710810736-327242721326766 +14267065719571-19713754885181 +193190914974227-194389809136271 +293982406793751-295216301045006 +323845023844190-329536560310239 +292907892178176-294163809044607 +441279431671536-441734947012175 +195881464266764-197136077647965 +438992222880514-439720188043393 +1138886722630-1854190426883 +2351348670325-2617031498963 +260402819310713-260801313119541 +254684163193254-254912091501406 +320106355013024-320106355013024 +302542078244300-305345714739584 +298727251504138-300461809160696 +396167498820829-398717779535761 +4400855877487-4868742298198 +257130691987536-257951515966143 +541881978152383-541881978152383 +196610234096194-198190244156017 +349383978844235-349762616770401 +183960576643697-184978726668743 +444969405647581-446718802519496 +61304715018545-66159151881093 +81520617554440-87934729706190 +259834369549045-260402819310713 +434587230987565-435466102099160 +475435666013023-481706905967204 +533947161016854-541881978152383 +514845169944552-518052420123995 +416462519847165-420821553093953 +396167498820829-398717779535761 +466870584819758-468197356102742 +377045912599205-379402019526561 +121492005967889-128192960880608 +165350397722588-166567604961683 +523602216130118-528877477075963 +486794930310861-490399985238635 +346668568123798-347498421357501 +263741759784930-270004591104064 +453510559403827-453510559403827 +255753644093984-255883541623862 +237029632750300-240866198325708 +66159151881095-67650364848459 +494183422785944-500125695261257 +345448231703112-345736097412168 +299884465540750-301450036951233 +342394384522054-342917428478173 +342394384522054-343269756664439 +439720188043393-439932277547991 +199278226329158-200874723399666 +156628599411913-156628599411913 +114849046814540-118625964441381 +348650279799842-349135926566982 +251363096532313-251754519029658 +2351348670325-3059454811610 +121492005967889-128192960880608 +215903109993819-220160520317358 +4595724410262-4868742298198 +11764600261815-16408688324351 +305345714739585-309765283857435 +343686692179376-343965801195004 +198536528306933-199895172276409 +290236924432701-290236924432701 +448383547620704-449913008882160 +382502598531196-390914491628140 +405909420201677-410130541503465 +183960576643697-188237935670008 +51962013277697-53813300126585 +434353281411495-435243524406101 +223464595521448-223464595521448 +453510559403828-459559466120965 +252153126561253-252392000276325 +191071678578795-192431819097039 +362692344706710-370654124816167 +296854251448735-298173173031698 +443669236357665-445234551662341 +354976739042432-359653081133687 +3059454811610-3402903612047 +437155425700716-437395474195479 +553779369768552-558816033078841 +1854190426883-2617031498963 +202597802194011-206543173679956 +1138886722630-1854190426883 +192264299244619-193376425428411 +349135926566982-349762616770401 +255522055688549-255883541623862 +257951515966143-258174481575672 +255883541623862-256689490174132 +387931485549597-390914491628140 +6447002120018-6846703895094 +507044218634982-510418885916604 +523602216130118-528877477075963 +6846703895094-7184163411933 +132305455060243-138392298598800 +282461539896047-290236924432701 +426299821128178-431250671557138 +91615122525877-99193390510674 +77643299597-926402139635 +23129086310222-29305409989803 +295643608940970-297332743231859 +263741759784930-263741759784930 +494183422785944-494183422785944 +450219329929070-452081472445466 +477672953090653-481706905967204 +42025986713405-48342473949310 +7741071773556-8327653006670 +214028105426882-215903109993818 +254527097937093-254684163193254 +291709376480177-293396513721433 +112530102990519-118625964441381 +242070259011311-249530233518231 +297760250261113-299278734305541 +416462519847164-416462519847164 +56632535322167-58731225107501 +334482514270603-339477569119550 +81520617554439-81520617554439 +58203914594292-59974261998034 +349383978844235-349762616770401 +2135269863759-2859607276208 +8327653006670-9225102488933 +55390560834705-57384780686928 +34160582965213-38080109850518 +433924147210519-434104886793942 +514845169944552-521116262869677 +166567604961684-166567604961684 +6004431119448-6179579759733 +442544600864973-444396613753445 +314203428586513-320106355013023 +141827641940356-148641129957012 +445992312922664-447520263642758 +54576882197287-56478874126451 +272180081867612-276826775088461 +175555988602786-176659954496397 +483295065685033-487816296558127 +242070259011311-249530233518231 +5051996523582-6004431119448 +1854190426883-2135269863759 +194141831401666-195323930008516 +449106805556747-451175636597919 +233591212883937-240866198325708 +223464595521449-230205054673550 +463724193285528-470600784408067 +348650279799842-348863902351621 +352280675243247-358773687775854 +48342473949310-48342473949310 +431250671557139-431250671557139 +447099768779328-448528894445876 +349383978844235-350138800479175 +103525263650762-103525263650762 +350917040198065-351121872602028 +155000750859284-156628599411913 +50733245894011-52622686819434 +171762399865226-180370699099141 +438627291261910-439468151658994 +294843638106269-296309821215654 +73049437165533-77659104685675 +410879657749-1138886722630 +31094751119447-34160582965212 +433195393462687-433650918405706 +433924147210519-434353281411495 +256141049798709-257023728478502 +374512141167076-377045912599203 +94512132119711-96626145043644 +350028006993020-350408432945327 +405909420201677-405909420201677 +558816033078842-561397097410102 +544924158791414-547465000068998 +194756336340510-196079385685652 +206543173679958-208800572147213 +253635004041523-253905636443611 +348863902351621-349762616770401 +4868742298198-5051996523582 +52847898151490-55115334701038 +274411757710907-279797390154032 +29305409989804-29305409989804 +334482514270603-336538665223902 +547465000069000-551608311243321 + +350335533203126 +385360574958796 +234262113724981 +294830210489023 +478442158496421 +51060125845386 +489366011838543 +20467539616968 +309493089007385 +35476059920709 +516315157936106 +155843407835959 +456007142767771 +256248574496120 +117783252868310 +486322683612937 +175548061347876 +103964673729519 +249065312035976 +498092818843638 +72408239042494 +384863483578993 +480381880152261 +508904657505666 +141339195200670 +468527710921237 +240801362189672 +311624504474432 +267406879792256 +489790658687327 +172167204303582 +50742356801602 +409406749330462 +77312713808414 +474988254396465 +418028548325337 +203875723280166 +483556396831593 +274006514846650 +44162860853548 +236512782028922 +389003547781439 +97921956237812 +556595697000648 +207306737894164 +481950981140956 +122120359619218 +421488833582880 +318231942684891 +5761995102493 +235532974377623 +55763363544356 +353131795479559 +480489941763012 +94729503790645 +454791687732076 +526770326242653 +535146521681209 +430576500558725 +452804092737195 +167227885430837 +243240581180090 +207903495107687 +146666694218178 +210446424146226 +315494139920614 +446055563038145 +469572585798137 +47134806315711 +65382688781008 +6704514273820 +125525849945174 +216069220801594 +353194438127928 +111704888772907 +245978198462529 +556083956728719 +265743891386149 +120231141741495 +545284921187842 +397142470206228 +2914072097246 +320917378370749 +83386731174984 +418734755997286 +419574342385671 +335717636222461 +494793895423597 +223114699995722 +245599537185358 +365729873777363 +318608968969843 +427361798993788 +302196474473106 +283309598904556 +52428079676476 +538475062255329 +31115840248736 +312547528854616 +233910930594751 +115402673489436 +289957426559612 +151941978545988 +185874224269791 +509254517148165 +87483544474577 +361665510982486 +22442789669325 +402902102113318 +114530458429352 +74472503629811 +406841547599155 +236307603614021 +93528502139832 +377323554623858 +451429078651943 +93363731336668 +449744910433794 +548536035872863 +454145837835578 +475534011143611 +525649090440277 +303096921429072 +288960097387298 +364869866612129 +144937651290974 +441898870983094 +150166133135437 +495494237098195 +191201011747014 +468992254208908 +499863204504806 +24892464308673 +452470235372565 +61264210943118 +353365099308890 +2005600991552 +363508877872418 +557836774701927 +467719783836099 +546504846786729 +473888696863993 +511757753137477 +146280052846099 +266090868158842 +44964568205745 +92510698819492 +44049250730300 +240775881464072 +205074962701912 +184272633037162 +525514956307074 +365377265731443 +50788057369242 +134263171872264 +507103608334781 +448450171436406 +211123397837915 +528265207063504 +291853043601474 +549862060291166 +424108510909056 +283586104321846 +123701407478435 +227612611990824 +336420836095420 +539387439130632 +122079067379608 +229277523070520 +238003497073187 +38995216298170 +335806679080051 +306486852894838 +23795428097255 +180282177990399 +546137401853254 +232416498423919 +33285088052369 +76066140890754 +193290140301613 +499805085633896 +43337073440385 +429787346686911 +192927486506573 +211038043491124 +293032821411478 +243763645806763 +560629851358885 +537228036886047 +427847529028482 +44242024721859 +65731056630098 +155970437870471 +325990440518626 +388430555198874 +136132983443499 +540726756836203 +292559818825276 +244352202573471 +106316808502106 +410410586015926 +48426601921587 +181567510763963 +118072282589142 +106494543793667 +363582544211396 +304777829542749 +86942979495455 +84554465680621 +416590337967435 +479472288183507 +366216950049031 +306892600764410 +329450395319355 +550866675560102 +510535310472069 +317129496346605 +185308997168686 +327101122524533 +540877633468895 +193627093388125 +416876991364870 +417529557558348 +227499069849278 +397910116190177 +331933049256207 +520890291673750 +62217465500801 +553873886997682 +63605908906508 +173269523333398 +519001772512600 +305983930747469 +405486560469617 +539490225847749 +482433167612850 +454292040562867 +265805731868422 +142195748895645 +137593007471463 +230427725651681 +192700146268862 +15002883669233 +184404393246163 +272906145343591 +309729177460290 +317263563199829 +144708657780242 +114310461634963 +288568045429530 +225536134912638 +60707676760834 +115242733560461 +495185370761280 +235876755089517 +208107639941041 +348187702003158 +12904927621583 +165367311459622 +295457123959426 +219930318193898 +19043785910845 +338502378066123 +197264511405876 +520603954987306 +506715026610138 +265894659354076 +485388940068705 +494048371764580 +315622097097757 +253991283332714 +447704507963800 +51864842580539 +525073614236087 +446939056087325 +279295679728212 +80638543252164 +285638213741042 +224187531810143 +279524199887892 +186821738562114 +144881090223203 +198185990675999 +245325001365227 +376426022305901 +325855676545988 +186255794691783 +356294789705458 +539525945293020 +351269615643208 +304419654683550 +32996904990448 +525508918556984 +557244194331309 +319036241459597 +55103779028235 +113064457699087 +57870840608143 +439141147444072 +57828702776882 +286015033624460 +7762072158558 +223656672078296 +193564137438167 +534359123879040 +176922211075803 +305140187899636 +207743709951953 +292763506515034 +136929097153961 +353832774528044 +264860851142312 +129557229248886 +349921485593099 +520714758443675 +93092192949047 +374599574821953 +363221209235065 +216154337365793 +365774816589257 +397567141486590 +296631611876851 +248467879605740 +125185995834579 +406182968984545 +42188163981751 +246977315681721 +179506212825220 +389928186679853 +555750182006516 +205213910579475 +34895823631967 +129556898836918 +519169255693079 +275895777691751 +107187211210198 +237980334370650 +295176304479507 +127691425191387 +207333881364859 +337625495738410 +522245821730736 +113114791655341 +177437435245675 +177194089716495 +307931092900459 +385161056302666 +518618957916859 +26121486542669 +83261854220697 +438862947516233 +365037235100453 +523524240482758 +39049839274644 +162096928927647 +541260969900525 +223946260538682 +252185130164848 +95816552446210 +535633244766886 +114229384442459 +288630683873686 +192747459989976 +241726879176480 +81157613842641 +238386992905380 +467291052089506 +430437825044600 +73475224149330 +396158902280731 +16091670037687 +424870639400583 +492666201901775 +318757381207574 +14685487769412 +476193072794385 +235182011932630 +225473098603578 +505817046791470 +352819279357014 +478463151289923 +16345235096602 +429741187473253 +73549121829547 +8573061642485 +38870989832564 +175140441494098 +143672211811467 +91159778841005 +194349640774626 +59241446475351 +245228532110776 +38044681650664 +77237064743202 +73198381611822 +104716606354910 +508121933075497 +302885321766154 +62148733403893 +294985457958459 +347620995463151 +145696091652920 +145573778187879 +215432784827727 +47311538911018 +356994488349310 +416263051335457 +267902365076734 +359046479193283 +192322917472933 +257035518900533 +487680646496929 +268421586578880 +56496267577450 +177985804450780 +173404137006538 +251655153872098 +452053347034663 +367072364385785 +70610711163465 +562253761390897 +38996558124924 +178582443195523 +348530867097407 +243795265740137 +484365645434191 +342417907282479 +407862752418873 +56364941532306 +482877662606935 +451646806363799 +62240110110332 +535843423215812 +406752359584699 +95827666082447 +187713215199074 +297224790712345 +192154689782220 +346753671504076 +284041880612235 +510436777566029 +309312946785960 +547301816650623 +287259927243741 +113530740453224 +45434698397451 +62982791019947 +214355819532745 +182915378576399 +7948207155585 +520244802580691 +166922771771084 +477760097313198 +560168939407503 +37281470801212 +472246704252716 +43381598096678 +269050299745852 +427294382592471 +99139161125895 +518541002269434 +409011824576078 +308899998997829 +550325898675705 +524331937170139 +282676832247312 +86132648344975 +307777606411601 +358916972434869 +236741518523411 +318978414004033 +231010712166659 +383891393419821 +459238395291798 +320596561731144 +387119936718599 +195211200728721 +448219528654728 +29244240551664 +17597308067329 +159146901454577 +49270538548912 +2427344390356 +155981875931572 +53351586242363 +198287856701980 +236311277873271 +546347262496577 +129990381648173 +467427296856269 +304131219228490 +1157560491232 +444183484196883 +235329314968580 +545264874533863 +364059739420789 +137034554096394 +381126041358073 +43628568996155 +528519120305109 +388937595803291 +217145294038584 +17389090174703 +195919232562390 +300162820880823 +314588955800373 +108671986848175 +241338337100107 +329208898832313 +234787895771582 +239848280934618 +498909678520551 +145658130456776 +189240493717556 +388876097204842 +247477111980740 +53867598130951 +61984582869740 +215224095656928 +507487146581447 +118060523785480 +323906933986147 +219174738596332 +389946475638394 +431040709119388 +135060750000040 +389157043060177 +73243619047108 +203689837956886 +485826931236200 +369938245429324 +273910814455024 +389055368445187 +510361561873841 +307606438398878 +518933413032260 +234024861072984 +519172379042536 +457904973043967 +501057872369242 +256598064895820 +409215086811804 +37793599493711 +498335356691302 +449472105728770 +271625859279111 +300092182559524 +298592199451515 +266934014432111 +455477437923449 +232759119822502 +448673981866378 +47316316772808 +15340919637791 +264786597709871 +36725199173728 +340268725338906 +427945720816710 +525630847706665 +268255843916453 +265750770421474 +259454162893178 +558466898233196 +457866529306107 +273109008804782 +210282731078572 +142429911176230 +75088701038842 +441617167465005 +366240041862759 +451270644202131 +398855414473903 +109057614331362 +55977658623470 +427139803038574 +293329250112719 +205018011348883 +559703115036774 +159333800427091 +224360666007307 +447177812658009 +191128228157881 +74943858619523 +172573214918508 +387399708957803 +218078298882496 +195568266529732 +228829935154819 +275961163179489 +550491805513006 +548218443021336 +208365943788739 +144352515620560 +282607101482790 +8274775675752 +56045524196333 +328091182388585 +469758062559351 +377563268786608 +557992496540156 +185449140720657 +383355777621512 +365547903978770 +236731499122202 +496608539777453 +416746892936693 +338326908521089 +28526629215640 +179724316537608 +385471082271645 +185491038732272 +116429947867893 +205939765934505 +555391007906677 +62755608266965 +417369336169553 +215602206359600 +60820800301773 +335285777672037 +269998317946937 +481262532435947 +16522151939220 +429459061577461 +248382716427584 +296662293820211 +418734458100433 +32320952211623 +420466996717905 +333332158104802 +390375811415981 +105702418625371 +366552772597254 +47855601705658 +192071774026783 +45621945037236 +377029031798650 +98189397886622 +446973952425719 +138021210848926 +178569649117302 +293105867870769 +81652320636119 +298825573668776 +284232934820775 +154690884178639 +133239323980123 +114522878457874 +91764309013649 +362940306301148 +455162353537361 +18460319323838 +306862905070115 +442973468244840 +17483635283493 +358418731925598 +434913379782982 +8484360320988 +132598327945002 +26980128322506 +25811004188634 +390231028374099 +380603448338658 +145943052416454 +559073959457316 +223593651735886 +545478564672272 +467802870583398 +299814347294366 +385324228319559 +177483354597704 +475998737825129 +304158679714957 +115635040500149 +364896031821143 +23187460314348 +95139913138122 +219586350407531 +362054684326468 +475103619263391 +560492315791414 +349787817169619 +515746153064109 +22487563790678 +287119826967871 +539464336413908 +244330585656069 +127069165162062 +357692004496152 +107327944999226 +276807376694206 +316284295981652 +38965919826305 +93692824689788 +213010741884323 +249488955418106 +380579679941806 +107674029193042 +198443625525465 +296324693730294 +14852103824275 +96618476088857 +468552712705725 +193971558175143 +525696462589531 +447280046959418 +536405799454170 +97977578106157 +516583183151712 +5563314188620 +399616447886004 +417202828527573 +483069718599709 +328694525220932 +384368322682664 +83422477961746 +31333667164060 +526335480994287 +233182844423274 +47478593118534 +397682396387259 +316273176238421 +454405946176112 +97421033252163 +2234849224190 +377231141670636 +456218700593158 +183987805788552 +194495680726909 +51515950375873 +228517623369942 +244472732958757 +390550574863594 +161229765665043 +481346506890947 +549263114568170 +176799201970835 +300339075331394 +518792141519158 +448789454464804 +155327014095772 +235160828838351 +104264942590199 +453515466475636 +176605077477901 +326717554248644 +42776286692453 +274615837144431 +447817416261963 +337824579175221 +172202342070460 +276483559792372 +254110170660191 +58153423620945 +43303503704323 +490410262523498 +267422245465704 +352533241673597 +182929067296611 +442867760904183 +24984554515132 +118016260270951 +307486759117545 +205099037842139 +297935653130510 +93101941544800 +178401890896640 +510076073486583 +353025246631866 +417211022829377 +497538740562489 +517593989229898 +85784635838591 +441057969418203 +247585870156658 +314622836369165 +358754429367923 +430123080356332 +199112820188122 +33783569804963 +75162909071003 +474106747323220 +345692882399984 +350343898995797 +17942693713226 +106845850117544 +317828690062067 +83573424694712 +63494535578801 +444407677285520 +103654938369132 +242438081026732 +526968242800863 +180213290097916 +262723516213345 +77230952072784 +193215134156420 +480896973548618 +285249307033482 +146464411142333 +18319440396198 +539265872743833 +134458351753147 +216813625637649 +236001270067552 +351588926393082 +517364282014045 +206699483321012 +269451693523172 +124412413211111 +265715354358310 +59109809813080 +416180649957460 +226235225375827 +363003238616165 +176453080285209 +35232926624253 +238970794341328 +457725227034292 +467501413622165 +424040480962121 +278669759502932 +546547288129340 +521495786924721 +119954411300682 +4639052571615 +516476336639880 +430116252278635 +24778200054684 +17487178330737 +211667819224560 +25125413973346 +411355776884705 +245987139676212 +354685274153181 +365371621459302 +147572350259503 +58555221088890 +331234396802940 +396392382488469 +207147915873631 +288824942338228 +224865305555546 +77334582249242 +263789967668607 +1608590816984 +545782143964917 +439725159715989 +48080832801616 +33792847092087 +25929447389340 +519079159855026 +125982133816588 +426614578624183 +437367058809330 +303697793935365 +114274053891440 +338111764338511 +544946413287104 +339101297061374 +166139400936980 +248028935503564 +478070789941675 +345537295704448 +534411977698376 +326074158905107 +229379087117005 +33066301851353 +136455842691843 +427275637182732 +525696843099220 +61790654998415 +204513922476504 +53636298852254 +517421264301419 +426343741871955 +196659201545557 +287163313488857 +286247862430081 +202793498434151 +98166881026715 +288054311494975 +134713392645450 +93098744337497 +319425306746364 +331101912939558 +151598845441234 +109489797445724 +450653351903818 +477988342867372 +385991512961749 +33282794076459 +145729801092378 +23473433102165 +527743797997284 +36554656395796 +61711754967740 +300419539931760 +374789103857705 +387574026436934 +287671641636459 +499816085229578 +555815288028522 +514316544291227 +117166793718106 +303283750575194 +243455872780372 +485612352528873 +558085705343358 +483317554500975 +477645813981218 +316391304100105 +546360087365755 +324158100663886 +327504985090857 +204728776515463 +280206442600760 +500496936344179 +136517720187609 +434073056928477 +450650554201985 +358984004811241 +356467169269031 +562456272273029 +28392388413323 +417968216910045 +526654474535198 +54950516257959 +53178099677859 +305099509010718 +367405219355916 +73252365889941 +1539279800352 +201526106502214 +276572317110923 +83608669927734 +141714416464935 +267756548100747 +237327357484946 +83451662953011 +225885973021310 +132869904167174 +537410846040249 +425848211676393 +268994342274960 +208464381560359 +91098144557508 +114983424419607 +133698258010346 +235857685962191 +48274039725146 +156887154332837 +15255604514178 +284213794291857 +550465382003962 +362232019945087 +359086047556744 +374768515611132 +396808642280769 +94831734336644 +412989252804170 +83862807377606 +94943210744398 +453532417747573 +43308745180999 +218785147438857 +346948021495876 +383150956958196 +199858400211026 +31870242576099 +200041218696351 +443483000481261 +25553480682221 +436712276096262 +407641268867040 +451874991975388 +426554608097422 +6259084817637 +148286494726676 +478671150687313 +150281614101687 +38917217989541 +539401202390532 +446579096428256 +117172710712819 +218793566500934 +186435642484689 +118987391037016 +550038020369094 +329303314596481 +349141810370996 +389350147844854 +478744362489155 +536701248319379 +98098886944833 +31879487059553 +531388488714611 +327623095481859 +55364872385510 +14473791845353 +426776256058947 diff --git a/input/5/example.txt b/input/5/example.txt new file mode 100644 index 0000000..2e9078d --- /dev/null +++ b/input/5/example.txt @@ -0,0 +1,11 @@ +3-5 +10-14 +16-20 +12-18 + +1 +5 +8 +11 +17 +32 diff --git a/input/6/1.txt b/input/6/1.txt new file mode 100644 index 0000000..231aa84 --- /dev/null +++ b/input/6/1.txt @@ -0,0 +1,5 @@ +8373 899 988 15 29 814 685 613 685 476 54 1 442 32 642 86 1 85 47 7 578 98 1 99 579 143 8 12 235 8974 21 4 61 6 73 624 464 51 8 98 42 18 566 837 138 44 5 5 52 75 16 8 683 5 82 8642 2 28 67 63 978 59 9652 128 4668 187 96 751 4254 555 548 298 25 8 73 3238 3228 57 926 99 83 1 379 7497 56 34 98 245 18 76 18 58 881 28 519 7246 83 356 368 738 1 15 79 144 4 62 11 21 792 314 4 855 2 289 96 9 7 57 722 4 1 816 361 49 49 95 39 39 299 556 617 23 484 71 5 4 54 5 65 32 24 127 697 5453 57 72 1 12 16 9 22 9297 9517 92 21 94 9 8 76 3868 4 93 56 44 41 386 49 7 44 42 868 1 76 46 74 53 69 889 26 553 5 9335 6 5 21 3 4 72 584 3 1243 84 8 13 289 538 7563 221 527 28 411 431 8 384 221 314 63 21 24 67 742 8 87 68 76 48 9 6858 2 789 535 68 45 776 4 3328 713 39 69 21 1 632 43 1895 581 74 48 16 464 25 843 86 461 2 37 8826 35 18 77 9171 93 847 17 8 3886 25 3 8 143 82 986 45 3656 695 8 462 4 764 91 738 93 783 892 1 36 85 82 97 17 82 72 94 822 28 6975 5384 9 815 53 44 3218 587 2752 45 79 81 959 1 184 31 979 645 8 2 7 22 21 9 521 25 13 69 925 797 247 8 4 84 47 13 43 91 145 53 582 83 816 71 66 88 1845 74 9577 48 2 22 781 328 1 81 398 28 26 133 58 5 26 978 8 29 466 938 62 83 71 2 99 399 485 7 288 66 3 55 234 23 18 546 849 792 188 52 3 62 24 42 14 9 8 46 358 98 57 79 1468 73 25 38 65 755 41 18 59 622 765 148 251 31 56 353 7 54 58 464 35 3 8 6 64 54 2 771 141 9856 118 453 8852 292 3 64 51 84 4258 11 2263 47 77 26 52 571 4 38 54 57 58 13 38 7 317 89 13 951 339 521 9241 796 63 4 4784 76 338 7 671 6 31 82 155 313 8773 942 2 45 145 54 8 93 452 418 61 77 9 3 4 32 7 545 1 8 66 59 1 3199 79 5 4 1381 4548 69 98 112 2633 83 77 235 6 5 5 9 41 455 76 3833 62 23 5 3 614 96 75 3 765 62 6793 28 8439 297 744 265 33 16 4 2 88 9 64 9 17 75 8 941 3774 12 11 49 5 31 8 73 574 62 96 5 364 7 8 89 8767 2817 44 127 5964 274 4229 29 47 984 27 529 236 7 58 611 86 3797 94 21 72 834 71 76 181 424 63 7 84 3152 247 9 37 23 3 3 8 686 8 749 3912 58 84 21 61 597 166 37 66 6541 52 8 562 4 924 45 99 857 9 14 6 644 23 287 2 68 61 25 77 611 76 88 69 4 2 36 22 5 91 947 848 6 3122 9 33 3258 364 9 191 231 895 962 86 3 423 7 8791 395 52 2 3 5 7 26 19 352 82 7827 9826 29 4 4 48 888 76 6255 1 3 33 735 9 77 67 3255 89 6 766 8273 42 18 838 1 319 237 8 846 978 393 6 157 281 1 84 568 143 38 7 358 13 697 39 96 4 69 11 5 77 43 14 75 6 84 43 3162 3 3 37 3922 821 5 4 5 141 1 97 22 63 3 214 4429 97 1822 5 9289 94 7 284 69 9891 28 922 4 8539 88 6 64 154 573 34 62 28 84 25 54 391 457 45 256 5 1 65 794 9 413 14 85 938 27 24 3236 39 7611 41 19 92 62 784 351 665 2 84 93 7447 28 842 667 26 6 268 45 387 95 297 914 69 925 617 67 214 33 371 16 378 178 532 38 425 799 21 46 315 59 38 2 76 149 8987 89 6 64 45 62 39 74 7756 66 22 5146 4 93 937 822 9 6324 7932 547 44 623 292 89 7287 41 64 2 243 65 3 55 5192 679 833 211 777 999 78 5 96 6 9746 41 633 59 97 36 6747 143 335 64 1 67 77 4 1512 782 1 41 669 257 57 445 77 1 24 46 8 9669 1793 9 69 53 922 21 2 6 8 45 86 72 85 45 371 8 3 47 677 39 189 63 793 6 9 63 489 616 23 72 538 31 46 61 6 532 56 374 4 7839 633 36 46 69 27 51 41 6678 69 6 7631 561 96 86 8 15 4413 85 82 9698 4 467 4 84 55 78 4 212 8364 48 863 598 2 15 387 611 752 64 5898 1895 8 83 261 8 214 44 64 972 79 4935 7 6 433 139 3874 22 317 71 46 981 223 32 18 833 8 37 53 77 1 6 64 933 223 24 111 473 7 86 +788 995 548 18 25 562 387 193 833 474 54 4 131 55 338 986 12 49 772 9 554 31 2 975 187 861 75 44 131 7843 32 775 24 1 24 68 674 13 88 42 76 65 284 522 259 934 89 72 28 688 52 9 878 35 44 3742 5 65 279 24 411 78 8173 385 9997 477 734 341 3958 948 548 7971 676 42 56 469 7787 69 583 11 96 59 793 6634 15 74 951 335 564 95 297 14 644 66 663 8696 25 476 1975 338 3286 9 67 352 68 661 17 12 861 128 4 31 4 644 381 832 3837 2 995 41 15 5 141 49 41 12 53 65 72 437 256 39 157 96 85 8 23 45 51 56 64 471 169 3834 25 34 5 17 98 18 55 268 5725 838 74 56 445 44 66 5645 89 35 324 35 58 994 11 69 793 54 566 27 58 19 72 4783 49 433 71 932 56 321 76 181 56 36 6 96 344 36 5971 14 29 38 284 2684 3893 176 486 74 989 613 316 996 389 565 33 33 777 913 22 829 77 89 36 354 554 2482 151 147 84 31 72 724 39 3854 887 691 94 43 46 545 12 7751 369 15 32 31 921 39 787 72 632 69 4 9894 47 42 619 5613 533 321 31 85 727 872 7 47 938 98 278 16 7418 542 2 256 85 425 14 664 58 46 327 79 564 61 42 4635 31 31 36 778 845 74 4546 8459 169 647 18 7 9753 316 7578 17 94 19 77 18 6984 683 644 731 58 5 48 87 41 43 876 19 796 6 931 815 691 9 79 99 46 134 11 67 911 49 238 6 162 98 47 35 8818 93 4538 73 89 98 116 739 7 45 913 68 82 22 14 89 41 816 3 99 21 997 16 631 824 6 89 462 784 72 8563 33 15 59 848 12 48 325 8893 494 6775 18 517 41 84 64 22 6 4 62 448 58 684 64 3539 848 76 29 23 153 59 555 69 15 939 957 114 95 45 89 6 66 195 431 834 34 51 94 356 72 2 2176 453 3611 993 785 1657 846 6 26 89 84 1422 59 3926 24 17 93 74 841 49 98 847 43 62 69 845 24 628 12 57 162 625 445 569 594 93 26 7683 563 118 2 356 92 85 72 93 989 5377 442 92 69 231 277 5 6617 242 568 21 33 5 44 6 97 7 268 361 1 23 26 817 2891 467 74 34 3111 343 99 65 72 686 45 673 281 81 95 4 52 99 387 83 5385 78 988 776 2 868 53 65 6 263 23 6472 37 2811 599 76 32 29 25 41 6 94 78 35 1 98 91 2 554 2762 94 24 624 42 58 2 348 861 15 99 3 542 16 82 56 4277 5694 52 831 3212 643 3586 39 67 739 76 531 735 6 47 39 867 5165 441 92 331 577 38 31 245 698 474 9 12 3324 819 87 53 953 3897 62 42 856 68 442 1129 14 31 5 81 561 719 95 37 7935 373 98 781 279 163 4 68 562 48 84 86 257 952 539 7 15 3457 46 87 77 126 88 32 9 96 82 82 4 38 29 7 5 9689 8 25 8224 916 92 118 367 977 397 39 345 355 2 4415 284 118 81 81 63 7 62 8233 378 38 1853 8586 38 19 85 87 871 35 4649 6 5 26 618 38 291 36 7923 432 84 899 2342 677 54 21 37 655 531 5 229 742 56 5 288 979 35 41 192 975 5 17 236 66 326 23 89 28 92 38 5 336 31 28 57 74 48 14 4534 6 31 22 188 681 43 57 84 775 441 7 58 34 5 625 615 57 3947 69 4498 94 6 218 18 212 83 778 196 7416 82 87 263 654 383 13 77 8993 698 28 34 978 742 77 635 1 1 29 662 48 357 155 558 45 24 659 5325 72 9526 8 87 36 14 491 39 531 2 12 27 7453 8 6378 634 1891 45 548 31 477 38 96 269 16 143 433 97 661 56 926 31 881 132 974 642 58 279 396 85 899 327 84 2 35 125 2453 38 1 32 13 95 847 337 8952 36 35 6538 2 91 192 624 54 3958 3872 552 3 28 551 36 265 13 38 79 395 432 34 39 9312 3146 454 823 441 856 873 5 81 54 5895 62 757 356 87 69 4458 6364 2616 54 96 41 45 3 6668 449 26 74 643 36 25 573 34 57 366 49 9 738 5147 63 51 561 882 2845 69 58 75 79 798 31 54 34 256 54 78 54 2656 93 716 62 143 9 91 12 87 298 25 63 651 45 31 28 539 361 92 857 99 991 773 68 85 52 64 21 12 8384 23 18 619 313 37 13 9 2 998 19 16 2251 5 5329 2 3773 19 45 74 24 5121 716 913 849 99 265 336 257 496 471 9632 9647 814 77 341 5 585 27 98 951 676 18 554 26 694 127 1854 17 135 99 35 457 218 1284 1499 722 5 426 714 92 54 8 36 532 664 58 471 659 281 89 +187 579 537 41 215 5566 982 287 466 725 8 32 538 81 475 754 527 81 612 83 24 93 21 1222 41 933 417 35 69 3922 55 215 16 81 85 43 744 53 59 757 65 36 861 612 222 269 97 24 25 112 4 69 44 39 7553 711 82 63 3668 79 16 63 2115 271 7794 29 536 43 8752 9 87 1833 435 378 33 959 1828 86 943 28 389 16 994 1517 37 96 946 918 223 84 433 8 828 64 5671 54 24 534 7166 535 6478 6 63 8 46 4291 83 4 543 8363 84 3 83 393 4922 545 4924 3 19 85 38 3 16 766 88 23 87 54 9 41 688 38 578 379 69 527 9 32 38 5 22 132 837 529 42 72 96 274 12 264 549 468 477 868 58 77 274 42 26 81 872 12 855 11 91 311 29 32 1289 922 578 528 22 44 6 9435 42 94 817 886 627 996 538 596 77 48 88 59 253 82 449 42 75 76 395 4311 8155 77 217 87 576 118 578 937 833 152 956 1 1135 7558 4 775 318 61 6 182 587 7765 537 77 93 43 669 66 87 3476 517 3791 25 84 21 57 17 115 655 43 41 16 955 3754 49 7 937 13 8 265 72 44 579 349 194 693 7 21 92 3463 5 88 682 54 491 67 656 749 81 798 95 697 154 355 72 9 4 95 122 93 19 4777 6 31 85 3246 511 111 68 827 448 315 56 3 3717 384 114 79 89 23 9 84 5287 656 433 453 48 16 91 79 49 478 15 76 967 1 4853 17 534 5 218 92 5 269 79 74 33 13 61 9 847 15 46 5 242 14 428 1 189 51 815 211 4 86 68 89 46 21 51 97 29 547 11 45 47 479 65 174 242 84 32 327 819 94 9175 5 78 13 932 86 48 581 9279 852 6516 58 317 14 172 35 59 43 45 9 711 22 863 43 3781 195 89 4 18 763 58 112 64 35 77 956 842 71 56 43 1 76 524 939 669 88 51 32 452 66 9 2897 693 9221 546 22 168 163 58 3 14 19 891 97 164 7 58 93 551 389 96 359 1725 31 56 27 911 55 42 16 29 44 53 769 433 483 85 59 5297 896 338 66 157 83 44 16 15 2937 3168 7 146 93 857 9184 99 9825 918 1 49 49 86 244 35 83 46 179 571 74 87 53 986 864 547 85 38 1858 169 4 81 38 283 36 653 928 686 88 82 366 11 371 77 1372 55 4836 737 29 712 3 28 32 8 86 457 99 7811 97 96 99 48 41 87 3 16 812 42 5 622 48 1 411 1291 41 49 988 352 3595 55 624 187 37 65 88 471 23 326 66 9356 227 6 667 2767 215 415 86 58 79 1 69 819 64 29 57 6367 6383 272 11 562 525 98 58 512 48 7874 44 766 1719 393 24 73 467 2693 68 51 675 18 7 7513 92 19 5 386 782 11 38 11 7527 741 381 35 553 22 5 562 62 38 17 78 529 598 542 36 63 6886 69 69 94 138 53 23 14 28 64 63 5 9 71 5 5 1191 26 129 4931 228 35 876 43 854 1425 246 446 264 423 2513 249 868 442 58 84 4 82 2751 627 4 858 6557 28 62 273 63 573 36 627 21 6 95 54 65 443 49 7726 598 15 264 5747 679 47 8 12 446 811 5 21 35 94 5271 147 27 51 75 79 537 5 42 49 116 756 26 54 855 68 88 124 552 938 53 24 32 762 41 9954 722 323 3 63 67 22 81 86 6 782 5 81 99 92 185 126 166 9528 56 8514 81 53 273 371 949 96 122 458 951 33 451 437 424 758 57 78 3943 363 71 99 366 334 14 72 94 47 9 459 31 14 175 767 66 6 241 3451 753 9386 5 99 76 61 816 35 61 38 75 58 4324 9 5173 243 9383 79 535 51 996 81 77 183 94 242 2159 52 492 63 176 16 292 899 167 841 26 773 1398 17 717 7675 22 32 99 144 8885 9 28 32 87 94 468 657 8978 14 19 425 4 59 425 955 773 127 879 386 2 78 821 39 319 945 4 722 71 2718 76 84 634 5419 226 173 493 266 8184 47 92 27 566 4 681 265 19 723 9879 3166 7343 14 19 81 39 553 844 788 17 53 66 25 91 788 55 737 211 67 9 34 71 24 918 569 726 9139 59 27 98 19 147 98 57 8 495 57 27 95 8263 48 948 56 217 8 24 789 19 955 568 34 57 76 33 17 681 36 18 15 544 278 472 48 74 27 52 15 65 8844 23 93 158 537 532 69 625 3 982 1 85 4676 9 4416 71 2582 35 393 56 79 6412 246 575 191 88 194 346 671 434 964 2564 5162 542 28 182 53 1 34 21 2275 668 7 4429 47 187 445 819 39 426 66 88 484 974 4797 7857 932 84 159 772 87 52 65 16 148 798 897 6 74 8283 79 +65 454 297 88 754 9295 77 83 53 418 6 93 93 6 97 227 392 9 744 74 77 82 25 8638 4 76 464 88 72 4718 33 271 92 83 41 9 879 76 48 543 98 4 434 875 748 167 55 55 1 443 3 71 88 92 6266 8 98 53 6275 95 29 61 8985 623 885 1 612 4 194 7 82 9195 474 516 9 44 182 59 22 27 262 357 142 6259 56 5 744 59 644 5874 913 6 194 55 1514 4 62 277 4258 138 1439 8 89 2 31 7565 35 2 9 8926 94 9 13 552 3389 662 4188 6 86 36 879 4 27 659 36 57 5 3 9 1 33 64 19 761 97 449 9 43 16 9 94 72 6 117 32 38 71 198 8 446 223 7 1 858 75 47 537 74 99 4 617 45 723 9 69 17 62 71 3667 637 768 989 59 77 4 1477 18 44 4366 94 651 4 416 788 67 93 88 45 6 456 9 35 17 89 22 7476 374 36 451 9 83 26 887 634 4 228 188 9 9945 8259 3 187 949 9 5 239 343 6 685 16 32 19 857 7 51 697 77 6954 14 23 84 1 4 437 98 48 15 71 65 1573 76 3 533 73 9 95 16 26 284 16 462 961 3 29 4 5951 83 35 742 6 389 81 843 987 41 738 16 71 232 43 78 5 7 11 695 38 49 2121 7 55 11 7889 41 432 2 85 217 292 91 7 15 744 11 35 37 79 9 82 9216 125 7 563 41 69 63 28 3 1996 58 52 682 2 4835 5 251 93 355 35 1 166 71 28 53 74 1 3 47 76 527 6 55 94 312 5 333 17 967 28 41 6 3 8 3 33 34 91 5 655 75 14 37 131 49 7681 792 12 32 8 183 49 9429 8 53 213 57 38 82 545 9797 473 3187 65 711 61 546 3 11 76 45 7 999 99 456 25 8476 931 89 6 848 228 7 744 81 4 47 855 762 553 16 4 16 41 947 464 7163 61 45 12 787 58 28 1361 275 5877 539 28 52 329 57 9 59 33 276 96 19 9 5 991 918 6 33 627 3711 22 19 2 464 81 93 21 25 4 38 82 792 74 14 158 8876 443 15 37 755 44 37 61 84 7225 36 2 375 64 22 4889 19 5551 41 1 63 6 248 6556 83 14 633 166 856 64 74 59 986 5 868 14 31 39 44 3 11 91 571 56 759 574 837 31 97 454 64 61 87 2 1 8577 714 75 71 7 35 27 6 2 9 77 2378 82 9 3 69 31 76 18 81 334 51 13 688 31 48 776 1894 767 4 184 889 7765 13 892 59 47 7 895 4 26 529 2 17 84 2 492 8139 77 2 87 12 1 5 66 9 92 99 9 1718 983 471 3 979 94 12 52 5 43 6319 31 834 791 677 99 12 413 9615 46 11 23 73 4 8 55 57 8 277 162 47 97 63 766 755 676 1 478 4 8 687 86 67 1 74 39 543 523 456 3 6672 32 9 7 951 2 59 13 29 54 43 63 7 64 7 66 5296 97 944 13 52 72 89 68 89 2132 249 119 381 877 96 475 674 976 911 42 48 89 2392 9 2 717 664 4 31 367 42 18 78 95 39 873 779 5 36 359 92 2722 156 73 69 54 599 59 1 149 893 217 72 4 53 1 1164 336 82 42 7 7 842 9 46 14 625 54 4 32 168 5 83 938 3565 487 17 83 615 311 64 19 147 611 5 34 21 75 18 29 3 561 3 24 83 41 121 682 865 7557 86 862 38 616 29 662 775 41 349 294 85 4 3585 969 6 9 9 39 9955 145 29 8 274 9 6 73 22 157 5 81 41 23 179 588 72 8 692 793 612 3636 2 15 8 5 945 75 91 97 58 77 25 7 2646 929 2993 31 91 94 7 3 78 598 35 77 1872 92 56 22 855 19 43 386 43 627 86 184 3264 1 913 4862 19 446 4 2 337 8 58 34 3 46 198 691 4 36 44 965 33 29 64 73 534 933 71 776 2 8 655 31 393 843 7 867 37 5653 63 98 7 3256 312 63 75 3 8697 36 44 64 176 3 6 846 71 978 116 4227 9272 92 78 9 5 314 11 631 486 57 3 84 95 57 49 537 998 48 47 3 1 86 498 278 323 5927 41 84 15 33 783 8 21 9 22 67 23 81 7954 27 873 28 3 18 27 242 3 191 461 46 2 99 18 65 563 6 29 47 921 8 8 4 38 56 55 93 62 21 49 63 36 134 211 31 262 6 76 5 34 3434 44 9546 38 5679 9 362 32 18 33 467 549 136 15 388 656 157 373 889 695 7981 569 35 686 45 8 53 55 3467 7694 7 7842 38 743 289 95 17 873 11 13 616 42 8844 6578 999 37 728 237 55 52 26 13 74 33 466 1 1 2513 98 ++ * * * + + * * * * + + * * + * * * * * * * * + * * * * * + * + + * + * * + * * * + + * * + * + * + * * * + + + * + + + + + + + + + * * + * + + * * * + + * + + * + + + * * * * * + + * * * + + + * + + + * * + * + * * + + * + + * + * + + + * * + + + + * + * * + + + + + * + * + + * * * + + * * * * + * * + + + + + + + + + * * * + + * * * + * * + + + * + * * + + * + + + * + * * + * + * * * * + + + * + * * * + * * * * + + * + * * * + * + * * * * * + * + * + * + * + + + * * * * + + * + + * + + + * + + * * * * + + * + + + * * + + * * * * * * * + * * * + * + + * * + * * + + * * + + + * + * * * * * + * * + * * + + + + * * * * + * * + + * * * + + * + + * * + + * + + + + * * * + * * + + + + + + + * * + + * + + * * + + * * + + * + * * + * + * + + + * + * + + * + * * * * + * + * + + * * * * * + * * + * * * * + + + * * * * * + + + * * + + * * + + + + + * * * + + * + + + + * * + * * * * * + + * + * + + + + + * + * + + + * * + + + + + + * * * * + * + + + * + * * * + + * * + + * * * + + + * * * * * + * * + * + + * * + * * * * + * + * + * * * + * + + * * + + * * + + * * * + + * + * * * + * * + + + * * + * + * * + + * * * * * + + * * + + + + * * + + * + + + + * + * * * + + + * * + * * + + * + * * + + * * + * + * + * * * + + + * + + * * + * + * * * * * + + + * * + + * * * + + + * + * + * * + * * * + + * + + + * + + + * * + * * * + * + + + * * * + * + * * + * * + + + + + * + * + * * + * * * * + + * * * + * * * * + * + * * * + * + * * * * * * * * + + * + * + + * * + + * + * + + + + * * + * + * + * * * * + * + + + + * + * * * * + * + + + * * + + * + * * + + + * + * + * * * * + + * + * + + * + * + + * * + + * + + + + + * + + * + * * * + + * + + * * + + * + + * + + + * + + * * * + + * + + * * * * + * + * + * * + * + + + + * * * * * + + * + + * * + + * + * + + + * + + * + + * + * + * + * + * + * + * * + + * * * * * * + * * * * + * + + + + + + * * + * + + + + + * * * + * + * * + * + + + + * + + + + + * * * * * * * + + * * * + * + * + + + + + + + + * * + * * * + + + * * + + * * * * + + + * + +
\ No newline at end of file diff --git a/input/6/example.txt b/input/6/example.txt new file mode 100644 index 0000000..337b837 --- /dev/null +++ b/input/6/example.txt @@ -0,0 +1,4 @@ +123 328 51 64 + 45 64 387 23 + 6 98 215 314 +* + * + diff --git a/input/7/1.txt b/input/7/1.txt new file mode 100644 index 0000000..43c81ba --- /dev/null +++ b/input/7/1.txt @@ -0,0 +1,142 @@ +......................................................................S...................................................................... +............................................................................................................................................. +......................................................................^...................................................................... +............................................................................................................................................. +.....................................................................^.^..................................................................... +............................................................................................................................................. +....................................................................^...^.................................................................... +............................................................................................................................................. +...................................................................^.^...^................................................................... +............................................................................................................................................. +..................................................................^.....^.^.................................................................. +............................................................................................................................................. +.................................................................^.^.^.^.^.^................................................................. +............................................................................................................................................. +................................................................^.^.^...^.^.^................................................................ +............................................................................................................................................. +...............................................................^.^.^.^.^.^.^.^............................................................... +............................................................................................................................................. +..............................................................^.^.^.^.^.....^.^.............................................................. +............................................................................................................................................. +.............................................................^.^.^.^.^.^.^.^.^.^............................................................. +............................................................................................................................................. +............................................................^.^.....^.^.^.^.^.^.^............................................................ +............................................................................................................................................. +...........................................................^...^.^...^.^.^...^.^.^........................................................... +............................................................................................................................................. +..........................................................^.^.^.^.^.^...^.^.^...^.^.......................................................... +............................................................................................................................................. +.........................................................^...^.....^.^...^.^.^.^.^.^......................................................... +............................................................................................................................................. +........................................................^.^...^.^...^.^.^.^.^.^...^.^........................................................ +............................................................................................................................................. +.......................................................^...^.^...^.^...^.^...^.....^.^....................................................... +............................................................................................................................................. +......................................................^...^...^.^...^.^.^.^.^.^.^.^...^...................................................... +............................................................................................................................................. +.....................................................^.^.^.^.^.^.^...^.^.^.^...^.^.^.^.^..................................................... +............................................................................................................................................. +....................................................^.^.^...^.^...^.^...^.^.^.^.^.^.^...^.................................................... +............................................................................................................................................. +...................................................^.^.^.^.^.^.^...^.^.^.^.^.^.....^.^.^.^................................................... +............................................................................................................................................. +..................................................^.^...^.^.^.....^...^...^.^...^.^...^...^.................................................. +............................................................................................................................................. +.................................................^.......^.^.^.....^.^.^.^.^.^.^.^...^...^.^................................................. +............................................................................................................................................. +................................................^...^.^.^...^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^................................................ +............................................................................................................................................. +...............................................^.^.....^.^.^.^...^.^.^.^.^...^...^...^.^.....^............................................... +............................................................................................................................................. +..............................................^...^...^.^.^...^...^.....^.^.......^.....^.....^.............................................. +............................................................................................................................................. +.............................................^.^.^.....^.^.....^.^.....^.......^.^.^.^.^.^.^.^.^............................................. +............................................................................................................................................. +............................................^.^.....^.^.^.........^.^...^.^...^...^.^.^.^...^...^............................................ +............................................................................................................................................. +...........................................^.^.....^.......^.^.^...^.^.^.^.^.^.^.....^...^.^...^.^........................................... +............................................................................................................................................. +..........................................^.^.....^.^.^.^...^.^...^.^.^.^.^.^.^.....^.^.^...^...^.^.......................................... +............................................................................................................................................. +.........................................^.^.....^.^.......^.........^.^.^.^...^.^.^.^...^.^.....^.^......................................... +............................................................................................................................................. +........................................^.^.^.^...^...^...^.^.^.^.^.^.^.^.^.^...^.....^.^.^.^.^.^...^........................................ +............................................................................................................................................. +.......................................^.....^.^.^.......^.^...^.....^.^.^...^...^.^.^.^.^.^.^.^.^...^....................................... +............................................................................................................................................. +......................................^.^.....^...^.^.^.^.^...^.^.^.....^.^.....^.^.^.^.^...^.^.^.^...^...................................... +............................................................................................................................................. +.....................................^.^...^.^.^.^.^.^.^.^.^.^.^.^.^.^...^.^.^.^.^.^...^.^.........^.^.^..................................... +............................................................................................................................................. +....................................^.^.^.^.^.^.^.^.^.....^.^.^...^...^...^.^.....^.^.^...^.^...^...^.^.^.................................... +............................................................................................................................................. +...................................^.^.....^.^.^...^...^.^...^...^.......^.^.^.^.^.^.^...^.^.^.^.^.^.^.^.^................................... +............................................................................................................................................. +..................................^.^.^.^.^.^.^.^.^.^...^.^...^...^.^.^.^.^.^.^.^.....^.^.^...^.....^.^...^.................................. +............................................................................................................................................. +.................................^.^.^.^.......^...^.^.^...^.^.^.....^.^...^.^.^.^...^.^.^.^...^.^.^.^...^.^................................. +............................................................................................................................................. +................................^.^.^.........^.^...^.^...^.^.^.^.^...^.^...^.^.....^...^.^.^...^...^.^...^.^................................ +............................................................................................................................................. +...............................^.....^.^.....^.^.^.^.....^.^.^.^.^.^.^.^.^.....^.....^.^...^.....^.^.^.^.^.^.^............................... +............................................................................................................................................. +..............................^.^.^.^.^.^.....^.^.^.^.^.....^.^.^.^.^.^.....^...^.^...^.^.^.^.^.^.^...^.^.^...^.............................. +............................................................................................................................................. +.............................^...^...^.^.^.^...^.^.......^.^...^...^.^...^.^.^.^...^...^.^.^.....^.^.^...^.^.^.^............................. +............................................................................................................................................. +............................^...^.^...^.^.^.^...^.^...^...........^.^.^.^.^.^.....^.^.^.^.^.^.^.^.^...^.....^.^.^............................ +............................................................................................................................................. +...........................^.^...^.^.^...^.^.^.^.^.^.^.^.....^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^...^.^.^.^.^.^.^.^........................... +............................................................................................................................................. +..........................^.^.^...^.^...^.^.^...^...^.^.^.^.^...^.^.^.^.^.^.^...^.^.^.^.^.^.^.^.^...^.^.^.....^.^.^.......................... +............................................................................................................................................. +.........................^...^...^.^.^.^.^...^...^.......^.^...^.^...^.^.^...^.^.^.^...^.^.^.^...^.^...^.^...^.^.^.^......................... +............................................................................................................................................. +........................^.^.^.^.^.^.^...^...^.^.^...^.^.^.^.^.^...^...^...^.^.^.....^.^...^.^...^.^.^.^.^.......^.^.^........................ +............................................................................................................................................. +.......................^.^.^.^.^.^.^.^.........^.^.^.^...^.^...^...^.^.^.^.^...^.^...^.^.^...^...^.^.^.^...^.^.^.^...^....................... +............................................................................................................................................. +......................^.^.^.^.......^.^.^.^.^...^...^...^.^.^...^.....^.^.^...........^.^.^.^.^...^.^.^.^.^.^.^...^.^.^...................... +............................................................................................................................................. +.....................^.^.^...^...^...^.........^...^.^...^.^.^...^.^.^.^...^.^.^...^.^...^...^...^...^.^.^.....^.^.^...^..................... +............................................................................................................................................. +....................^.^.^.....^.^.^...^...^.^.^.^.^.^.^.^.^.^.^.....^...........^...^.^.^.^.^.^.^...^.....^.^...^...^.^.^.................... +............................................................................................................................................. +...................^.....^.....^.......^.^.^.^.^.^.^.^.^.^.....^.^.^.^.^.^.......^...^.^.^...^.^.^.^.^.^.^.^.^.....^.^...^................... +............................................................................................................................................. +..................^.^.^...^.^.^.^.^...^.^.^...^.^.^.^.^.^.^.^.^...^.^.^.^.^...^...^...^.^.^.^.^...^.^...^...^.^.^...^...^.^.................. +............................................................................................................................................. +.................^.^.^.^.^.^...^.^.^.^.^.^...^.^.^.^.^...^.......^...^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.^...^.^.^.^...^...^.^.^................. +............................................................................................................................................. +................^...^.^.^.^.^...^...^.^...^...^.^.^...^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^...^...^.^.^.^.^.....^.^.^.^.^.^................ +............................................................................................................................................. +...............^.....^.^.^.^.^.......^.^.^...^.^.^.^.^.^...^.^.^.^.^.....^.^.^.....^.^.^.^...^.....^.^.^...^.^...^.^.^.^.^...^............... +............................................................................................................................................. +..............^.^.^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.^...^.^...^.^.......^.^.^.^.....^...^.........^.....^...^.^.^.^.^...^.^.^.^.^.............. +............................................................................................................................................. +.............^.^.^...^.....^.....^...^.^...^.^...^.^.^.^.^.^.^.^...^.^.^...^.^...^.....^.^.^.^.^.^...^.^...^.^...^.^.^.^.^.....^............. +............................................................................................................................................. +............^.^.^...^.^.^.^.^.^.^...^.^...^...^.^.^.^.^.^...^...^.^.^.^...^.^.^.^.....^.....^.^...^...^...^.^.^.^.^.^.......^.^.^............ +............................................................................................................................................. +...........^...^.^...^.^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.^.^...........^.^...^.^...^...^.^.^.^.^.^...^.....^.......^.^.^.^...^...^.^........... +............................................................................................................................................. +..........^.^.^.^...^...^...^.^.^.....^.^...^.^.^.^...^.^...^.^.^.^...^.^.....^.^...^.^.^.^...^.^.^.^.^...^...^.^.^.^.^.^...^.^.^.^.......... +............................................................................................................................................. +.........^.....^...^.^...^.^.^.^.^.^.^...^.^...^.^.^.^.^...^...^.......^.^...^.^.^.^.^.^.^.....^...^.....^.^.^.^.^.^.^.^.^...^.^.^.^......... +............................................................................................................................................. +........^.^.^.^.^...^...^.^.^...^.^.^.^...^.^.^.^...^.^...^.^.^.^.....^.^.^.^.....^.^.^.....^.^.^.^...^.^...^.....^.^.^.^.^.^...^.^.^........ +............................................................................................................................................. +.......^.^.......^.....^.^.^.^...^.^.^.^.^...^.....^.^.^.^.^.^.^.^.^.^...^.....^...^.^...^.^.^.^...^.^.^.......^.^...^.........^.^.^.^....... +............................................................................................................................................. +......^.^...^.....^.^.^.^...^.^.^.^.^.^...^.......^.....^.^.....^.^.^...^.^.^.^...^.^.^.^.^...^.^.^.^.^...^.^.^.^.....^.....^.^.^.^.^.^...... +............................................................................................................................................. +.....^.^.^.^.....^...^.^.^.^.^.....^...^.^...^.^.^.^...^.^.^.....^.^...^...^.^.^.^.....^.^.......^...^...^.^.......^.....^.^...^.^.^.^.^..... +............................................................................................................................................. +....^.^.....^.^.^.^...^.^.....^.....^.^.^.^.^.^.^.^.^.^.....^.^.^.^.^...^.^.^.^...^.^.^.^.^.^...^...^...^.^.^...^.....^...^...^...^.....^.... +............................................................................................................................................. +...^...^.^.^.^.^...^...^.^.^.^.^...^.^.^...^.^.^.^...^...^.^.^.^...^...^...^...^.^.^.^.^.........^.....^...^.^...^.........^.^.^...^...^.^... +............................................................................................................................................. +..^.^.....^.^.^.......^...^.^.^...^.^.....^.^...^.^...^.....^.^.....^.^.^...^...^.^.^...^.^.....^.....^...^...^.^.^...^.^.^.^.^...^.^.^.^.^.. +............................................................................................................................................. +.^.^.^.^.^.^.^...^.^...^.^...^.^.....^.....^.^.^.^.^.^.^.^.^...^.^...^...^.....^.^.^.^.^...^.^.^.^...^.^.^.^.^.^.......^.^...^.^.^.^.^...^.^. +............................................................................................................................................. diff --git a/input/7/example.txt b/input/7/example.txt new file mode 100644 index 0000000..57a2466 --- /dev/null +++ b/input/7/example.txt @@ -0,0 +1,16 @@ +.......S....... +............... +.......^....... +............... +......^.^...... +............... +.....^.^.^..... +............... +....^.^...^.... +............... +...^.^...^.^... +............... +..^...^.....^.. +............... +.^.^.^.^.^...^. +............... @@ -0,0 +1,11 @@ +#!/bin/sh +set -e +if [ -z "$(command -v zig)" ]; then + echo "Install zig v0.15.2" + exit 1 +fi +if [[ "$(zig version)" != "0.15.2" ]]; then + echo "Zig version is not 0.15.2. Let's hope this compiles." +fi +zig build -Doptimize=ReleaseFast +echo "Success" @@ -0,0 +1,3 @@ +#!/bin/sh +set -e +./zig-out/bin/aoc2025 "${1}" "${2}" < "${3}" diff --git a/src/day01.zig b/src/day01.zig new file mode 100644 index 0000000..2010816 --- /dev/null +++ b/src/day01.zig @@ -0,0 +1,72 @@ +const std = @import("std"); +const print = std.debug.print; + +pub fn solve(part: []u8, reader: *std.Io.Reader, _: std.mem.Allocator) !void { + if (std.mem.eql(u8, part, "1")) { + try part1(reader); + } else { + try part2(reader); + } +} + +fn part1(reader: *std.Io.Reader) !void { + var pos: i32 = 50; + var zero: usize = 0; + while (reader.takeDelimiterInclusive('\n')) |line| { + if (line.len == 0){ + break; + } + + const numSlice = std.mem.trimRight(u8, line[1..], &[_]u8{'\n'}); + const rotations = try std.fmt.parseInt(i32, numSlice, 10); + if (line[0] == 'R') { + pos += rotations; + } else if (line[0] == 'L'){ + pos -= rotations; + } + + pos = @mod(pos, 100); + + if (pos == 0) { + zero += 1; + } + + } else |_| { + } + + print("{d}\n", .{zero}); +} + +fn part2(reader: *std.Io.Reader) !void { + var pos: i32 = 50; + var zero: i32 = 0; + while (reader.takeDelimiterInclusive('\n')) |line| { + if (line.len == 0){ + break; + } + + const numSlice = std.mem.trimRight(u8, line[1..], &[_]u8{'\n'}); + var rotations = try std.fmt.parseInt(i32, numSlice, 10); + + zero += @divFloor(rotations, 100); + rotations = @rem(rotations, 100); + + if (line[0] == 'L'){ + rotations *= -1; + } + + const with_rotations: i32 = pos + rotations; + const new: i32 = @mod(with_rotations, 100); + + + if ((new != with_rotations and pos != 0) or new == 0){ + zero += 1; + } + + pos = new; + + + } else |_| {} + + print("{d}\n", .{zero}); +} diff --git a/src/day02.zig b/src/day02.zig new file mode 100644 index 0000000..f764589 --- /dev/null +++ b/src/day02.zig @@ -0,0 +1,78 @@ +const std = @import("std"); +const print = std.debug.print; + +pub fn solve(part: []u8, reader: *std.Io.Reader, _: std.mem.Allocator) !void { + if (std.mem.eql(u8, part, "1")) { + try part1(reader); + } else { + try part2(reader); + } +} + +fn digits(number: usize) usize { + var value = number; + var n: usize = 0; + while (value != 0) : (value /= 10) { + n += 1; + } + return n; +} + +fn part1(reader: *std.Io.Reader) !void { + var output: usize = 0; + while (reader.takeDelimiter(',')) |line| { + const trimmed = std.mem.trimRight(u8, line.?, &[_]u8{'\n'}); + if (trimmed.len == 0) break; + var split = std.mem.splitScalar(u8, trimmed, '-'); + var start = try std.fmt.parseInt(usize, split.next().?, 10); + const end = try std.fmt.parseInt(usize, split.next().?, 10); + while (start <= end): (start += 1) { + const n = digits(start); + if (n % 2 == 0 and start % std.math.pow(usize, 10,n/2) == start / std.math.pow(usize, 10,n/2)) { + output += start; + start += std.math.pow(usize, 2,n/2); + } + } + + } else |_| { + } + print("{d}\n", .{output}); +} + +fn part2(reader: *std.Io.Reader) !void { + var output: usize = 0; + while (reader.takeDelimiter(',')) |line| { + const trimmed = std.mem.trimRight(u8, line.?, &[_]u8{'\n'}); + if (trimmed.len == 0) break; + var split = std.mem.splitScalar(u8, trimmed, '-'); + var start = try std.fmt.parseInt(usize, split.next().?, 10); + const end = try std.fmt.parseInt(usize, split.next().?, 10); + while (start <= end): (start += 1) { + const n = digits(start); + for (1..n) |i| { + if (n % i == 0) { + const p: usize = std.math.pow(usize, 10,i); + if (start % p != 0) { + const div = start / (start % p); + var c: usize = 0; + + for (0..n/i - 1) |_| { + c *= p; + c += p; + } + c += 1; + + if (div == c){ + output += start; + start += std.math.pow(usize, 2, n/2); + break; + } + } + } + } + } + + } else |_| { + } + print("{d}\n", .{output}); +} diff --git a/src/day03.zig b/src/day03.zig new file mode 100644 index 0000000..c91e60a --- /dev/null +++ b/src/day03.zig @@ -0,0 +1,83 @@ +const std = @import("std"); +const print = std.debug.print; + +pub fn solve(part: []u8, reader: *std.Io.Reader, _: std.mem.Allocator) !void { + if (std.mem.eql(u8, part, "1")) { + try part1(reader); + } else { + try part2(reader); + } +} + + +fn part1(reader: *std.Io.Reader) !void { + var output: usize = 0; + while (reader.takeDelimiter('\n')) |line| { + if (line.?.len == 0){ + break; + } + + var max1: usize = 0; + var in1: usize = 0; + var max2: usize = 0; + + for (line.?, 0..) |b, index| { + const value: u8 = b - '0'; + if (value > max1) { + max2 = max1; + max1 = value; + in1 = index; + } else if (value > max2) { + max2 = value; + } + } + + if (in1 < line.?.len - 1){ + max2 = 0; + for (line.?[in1 + 1..]) |b| { + const value: u8 = b - '0'; + if (value > max2) { + max2 = value; + } + } + output += max1 * 10 + max2; + } else { + output += max2 * 10 + max1; + } + + } else |_| { + } + print("{d}\n", .{output}); +} + +fn part2(reader: *std.Io.Reader) !void { + var output: usize = 0; + while (reader.takeDelimiter('\n')) |line| { + var joltage: usize = 0; + if (line.?.len == 0){ + break; + } + + + var last_index: usize = 0; + for (0..12) |i| { + var max: usize = 0; + var max_index: usize = 0; + for (line.?[last_index .. line.?.len - 11 + i], 0..) |b, index| { + const value: u8 = b - '0'; + if (value > max) { + max = value; + max_index = index; + } + } + + last_index += max_index + 1; + joltage *= 10; + joltage += max; + } + output += joltage; + + } else |_| { + } + print("{d}\n", .{output}); +} diff --git a/src/day04.zig b/src/day04.zig new file mode 100644 index 0000000..5d7b455 --- /dev/null +++ b/src/day04.zig @@ -0,0 +1,99 @@ +const std = @import("std"); +const print = std.debug.print; + +pub fn solve(part: []u8, reader: *std.Io.Reader, allocator: std.mem.Allocator) !void { + if (std.mem.eql(u8, part, "1")) { + try part1(reader, allocator); + } else { + try part2(reader, allocator); + } +} + + +fn part1(reader: *std.Io.Reader, allocator: std.mem.Allocator) !void { + var output: usize = 0; + var list = try std.ArrayList([]u8).initCapacity(allocator, 0); + defer list.deinit(allocator); + + while (reader.takeDelimiter('\n')) |line| { + if (line == null){ + break; + } + + try list.append(allocator, line.?); + } else |_| { + + } + + + for (list.items,0..) |row, y| { + for (row,0..) |item,x| { + if (item != '@'){ + continue; + } + + var adjacent: usize = 0; + if (y > 0 and x > 0 and list.items[y - 1][x - 1] == '@') adjacent += 1; + if (y > 0 and list.items[y - 1][x] == '@') adjacent += 1; + if (y > 0 and x < row.len - 1 and list.items[y - 1][x + 1] == '@') adjacent += 1; + if (x > 0 and list.items[y][x - 1] == '@') adjacent += 1; + if (x < row.len - 1 and list.items[y][x + 1] == '@') adjacent += 1; + if (y < list.items.len - 1 and x > 0 and list.items[y + 1][x - 1] == '@') adjacent += 1; + if (y < list.items.len - 1 and list.items[y + 1][x] == '@') adjacent += 1; + if (y < list.items.len - 1 and x < row.len - 1 and list.items[y + 1][x + 1] == '@') adjacent += 1; + + if (adjacent < 4){ + + output += 1; + } + } + } + + print("{d}\n", .{output}); +} + +fn part2(reader: *std.Io.Reader, allocator: std.mem.Allocator) !void { + var output: usize = 0; + var list = try std.ArrayList([]u8).initCapacity(allocator, 0); + defer list.deinit(allocator); + + while (reader.takeDelimiter('\n')) |line| { + if (line == null){ + break; + } + + try list.append(allocator, line.?); + } else |_| { + + } + + + var previous_output: usize = 1; + while (output != previous_output) { + previous_output = output; + for (list.items,0..) |row, y| { + for (row,0..) |item,x| { + if (item != '@'){ + continue; + } + + var adjacent: usize = 0; + if (y > 0 and x > 0 and list.items[y - 1][x - 1] == '@') adjacent += 1; + if (y > 0 and list.items[y - 1][x] == '@') adjacent += 1; + if (y > 0 and x < row.len - 1 and list.items[y - 1][x + 1] == '@') adjacent += 1; + if (x > 0 and list.items[y][x - 1] == '@') adjacent += 1; + if (x < row.len - 1 and list.items[y][x + 1] == '@') adjacent += 1; + if (y < list.items.len - 1 and x > 0 and list.items[y + 1][x - 1] == '@') adjacent += 1; + if (y < list.items.len - 1 and list.items[y + 1][x] == '@') adjacent += 1; + if (y < list.items.len - 1 and x < row.len - 1 and list.items[y + 1][x + 1] == '@') adjacent += 1; + + if (adjacent < 4){ + list.items[y][x] = '.'; + output += 1; + } + } + } + } + + print("{d}\n", .{output}); +} diff --git a/src/day05.zig b/src/day05.zig new file mode 100644 index 0000000..2f971f9 --- /dev/null +++ b/src/day05.zig @@ -0,0 +1,107 @@ +const std = @import("std"); +const print = std.debug.print; + +pub fn solve(part: []u8, reader: *std.Io.Reader, allocator: std.mem.Allocator) !void { + if (std.mem.eql(u8, part, "1")) { + try part1(reader, allocator); + } else { + try part2(reader, allocator); + } +} + +const Range = struct { start: usize, end: usize }; + +fn part1(reader: *std.Io.Reader, allocator: std.mem.Allocator) !void { + var output: usize = 0; + + var ranges = try std.ArrayList(Range).initCapacity(allocator, 0); + defer ranges.deinit(allocator); + + while (reader.takeDelimiter('\n')) |line| { + if (line == null or line.?.len == 0){ + break; + } + + var split = std.mem.splitScalar(u8, line.?, '-'); + const start = try std.fmt.parseInt(usize, split.next().?, 10); + const end = try std.fmt.parseInt(usize, split.next().?, 10); + + try ranges.append(allocator, Range{ .start=start, .end=end}); + + } else |_| {} + + while (reader.takeDelimiter('\n')) |line| { + if (line == null) { + break; + } + + const id = try std.fmt.parseInt(usize, line.?, 10); + + for(ranges.items) |range| { + if (id >= range.start and id <= range.end) { + output += 1; + break; + } + } + + } else |_| {} + + print("{d}\n", .{output}); +} + +fn cmp(_: void, a: Range, b: Range) bool { + return a.start < b.start; +} + +fn part2(reader: *std.Io.Reader, allocator: std.mem.Allocator) !void { + var output: usize = 0; + + var ranges = try std.ArrayList(Range).initCapacity(allocator, 0); + defer ranges.deinit(allocator); + + while (reader.takeDelimiter('\n')) |line| { + if (line == null or line.?.len == 0){ + break; + } + + var split = std.mem.splitScalar(u8, line.?, '-'); + const start = try std.fmt.parseInt(usize, split.next().?, 10); + const end = try std.fmt.parseInt(usize, split.next().?, 10); + + try ranges.append(allocator, Range{ .start=start, .end=end}); + + } else |_| {} + + + std.mem.sort(Range,ranges.items, {}, cmp); + + var more = try std.ArrayList(Range).initCapacity(allocator, 0); + defer more.deinit(allocator); + + outer: for (ranges.items) |r| { + + const start = r.start; + const end = r.end; + + for (more.items) |*range| { + if (start >= range.start and start <= range.end) { + if (end > range.end){ + range.end = end; + } + continue :outer; + } else if (start < range.start and end >= range.start) { + range.start = start; + continue :outer; + } + } + + try more.append(allocator, Range{ .start=start, .end=end}); + + } + + for (more.items) |range| { + output += range.end - range.start + 1; + } + + print("{d}\n", .{output}); +} diff --git a/src/day06.zig b/src/day06.zig new file mode 100644 index 0000000..4105800 --- /dev/null +++ b/src/day06.zig @@ -0,0 +1,100 @@ +const std = @import("std"); +const print = std.debug.print; + +pub fn solve(part: []u8, reader: *std.Io.Reader, allocator: std.mem.Allocator) !void { + if (std.mem.eql(u8, part, "1")) { + try part1(reader, allocator); + } else { + try part2(reader, allocator); + } +} + +fn part1(reader: *std.Io.Reader, allocator: std.mem.Allocator) !void { + var output: usize = 0; + var problems = try std.ArrayList(std.ArrayList(usize)).initCapacity(allocator, 0); + defer problems.deinit(allocator); + + while (reader.takeDelimiter('\n')) |line| { + if (line == null) { + break; + } + + var split = std.mem.splitScalar(u8, line.?, ' '); + var n: usize = 0; + while(split.next()) |part| { + if (part.len > 0){ + + if (part[0] == '+') { + for(problems.items[n].items) |number| { + output += number; + } + problems.items[n].deinit(allocator); + } else if (part[0] == '*') { + var tmp: usize = 1; + for(problems.items[n].items) |number| { + tmp *= number; + } + output += tmp; + problems.items[n].deinit(allocator); + } else { + const number = try std.fmt.parseInt(usize, part, 10); + + if (n >= problems.items.len) { + try problems.append(allocator, try std.ArrayList(usize).initCapacity(allocator, 0)); + } + + try problems.items[n].append(allocator, number); + } + + n += 1; + } + } + + } else |_| {} + + print("{d}\n", .{output}); +} + + +fn part2(reader: *std.Io.Reader, allocator: std.mem.Allocator) !void { + var output: usize = 0; + var problems = try std.ArrayList([]u8).initCapacity(allocator, 0); + defer problems.deinit(allocator); + + while (reader.takeDelimiter('\n')) |line| { + if (line == null) { + break; + } + + try problems.append(allocator, line.?); + } else |_| {} + + + var n: usize = 0; + var accum: usize = 1; + var operator = problems.items[problems.items.len - 1][0]; + while(n < problems.items[0].len) { + var number: usize = 0; + for (0..problems.items.len - 1) |i| { + if (problems.items[i][n] != ' ') { + number *= 10; + number += problems.items[i][n] - '0'; + } + } + + n += 1; + if (number == 0) { + if (operator == '*') { + output += accum; + } + operator = problems.items[problems.items.len - 1][n]; + accum = 1; + } else if (operator == '+') { + output += number; + } else { + accum *= number; + } + } + + print("{d}\n", .{output}); +} diff --git a/src/day07.zig b/src/day07.zig new file mode 100644 index 0000000..620aaa3 --- /dev/null +++ b/src/day07.zig @@ -0,0 +1,88 @@ +const std = @import("std"); +const print = std.debug.print; + +pub fn solve(part: []u8, reader: *std.Io.Reader, allocator: std.mem.Allocator) !void { + if (std.mem.eql(u8, part, "1")) { + try part1(reader, allocator); + } else { + try part2(reader, allocator); + } +} + +fn part1(reader: *std.Io.Reader, allocator: std.mem.Allocator) !void { + var output: usize = 0; + + const first = try reader.takeDelimiter('\n'); + + var space = try allocator.alloc(bool, first.?.len); + defer allocator.free(space); + + for (space) |*b| b.* = false; + + space[(first.?.len - 1) / 2] = true; + + while (reader.takeDelimiter('\n')) |line| { + if (line == null) { + break; + } + + for (line.?,0..) |e, i| { + if (e == '^' and space[i]) { + space[i] = false; + space[i-1] = true; + space[i+1] = true; + output += 1; + } + } + + } else |_| {} + + print("{d}\n", .{output}); +} + +fn quantum(space: [][]u8, pos: usize, y: usize, output: *usize) void { + + if (space.len == y){ + return; + } + + if (space[y][pos] == '^') { + quantum(space, pos - 1, y + 1, output); + output.* += 1; + quantum(space, pos + 1, y + 1, output); + } else { + quantum(space, pos, y + 1, output); + } +} + + +fn part2(reader: *std.Io.Reader, allocator: std.mem.Allocator) !void { + var output: usize = 1; + + const first = try reader.takeDelimiter('\n'); + + var space = try allocator.alloc(usize, first.?.len); + defer allocator.free(space); + + for (space) |*b| b.* = 0; + + space[(first.?.len - 1) / 2] = 1; + + while (reader.takeDelimiter('\n')) |line| { + if (line == null) { + break; + } + + for (line.?,0..) |e, i| { + if (e == '^' and space[i] > 0) { + space[i-1] += space[i]; + space[i+1] += space[i]; + output += space[i]; + space[i] = 0; + } + } + + } else |_| {} + + print("{d}\n", .{output}); +} diff --git a/src/main.zig b/src/main.zig new file mode 100644 index 0000000..79979e4 --- /dev/null +++ b/src/main.zig @@ -0,0 +1,46 @@ +const std = @import("std"); +const print = std.debug.print; + +const day01 = @import("day01.zig"); +const day02 = @import("day02.zig"); +const day03 = @import("day03.zig"); +const day04 = @import("day04.zig"); +const day05 = @import("day05.zig"); +const day06 = @import("day06.zig"); +const day07 = @import("day07.zig"); + +pub fn main() !void { + if (std.os.argv.len != 3) { + print("Usage: {s} <day> <part> < <input> \n", .{std.os.argv[0]}); + return; + } + + var stdin_buf: [1024 * 1024]u8 = undefined; + var reader = std.fs.File.stdin().reader(&stdin_buf); + const stdin: *std.Io.Reader = &reader.interface; + + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + const allocator = gpa.allocator(); + defer { + _ = gpa.deinit(); + } + + const args = try std.process.argsAlloc(allocator); + defer std.process.argsFree(allocator, args); + + const day = std.fmt.parseInt(usize, args[1], 10) catch { + print("Not valid day format\n: {s}", .{args[1]}); + return; + }; + + try switch (day) { + 1 => day01.solve(args[2], stdin, allocator), + 2 => day02.solve(args[2], stdin, allocator), + 3 => day03.solve(args[2], stdin, allocator), + 4 => day04.solve(args[2], stdin, allocator), + 5 => day05.solve(args[2], stdin, allocator), + 6 => day06.solve(args[2], stdin, allocator), + 7 => day07.solve(args[2], stdin, allocator), + else => print("Day not yet implemented", .{}), + }; +} |
