Advent of Code 2025 - Zig

Days 1, 2, and 3

ejri.dev 299e5ff5

+1
.envrc
··· 1 + use flake .
+3
.gitignore
··· 1 + /.direnv 2 + /zig-out 3 + /.zig-cache
+37
build.zig
··· 1 + const std = @import("std"); 2 + 3 + pub fn build(b: *std.Build) void { 4 + const target = b.standardTargetOptions(.{}); 5 + const optimize = b.standardOptimizeOption(.{}); 6 + 7 + const exe = b.addExecutable(.{ 8 + .name = "aoc2025", 9 + .root_module = b.createModule(.{ 10 + .root_source_file = b.path("src/main.zig"), 11 + .target = target, 12 + .optimize = optimize, 13 + }), 14 + }); 15 + 16 + b.installArtifact(exe); 17 + 18 + const run_step = b.step("run", "Run the app"); 19 + 20 + const run_cmd = b.addRunArtifact(exe); 21 + run_step.dependOn(&run_cmd.step); 22 + 23 + run_cmd.step.dependOn(b.getInstallStep()); 24 + 25 + if (b.args) |args| { 26 + run_cmd.addArgs(args); 27 + } 28 + 29 + const exe_tests = b.addTest(.{ 30 + .root_module = exe.root_module, 31 + }); 32 + 33 + const run_exe_tests = b.addRunArtifact(exe_tests); 34 + 35 + const test_step = b.step("test", "Run tests"); 36 + test_step.dependOn(&run_exe_tests.step); 37 + }
+12
build.zig.zon
··· 1 + .{ 2 + .name = .aoc2025, 3 + .version = "0.0.0", 4 + .fingerprint = 0x52176dd5968cb572, 5 + .minimum_zig_version = "0.15.2", 6 + .dependencies = .{}, 7 + .paths = .{ 8 + "build.zig", 9 + "build.zig.zon", 10 + "src", 11 + }, 12 + }
+42
flake.lock
··· 1 + { 2 + "nodes": { 3 + "nixpkgs": { 4 + "locked": { 5 + "lastModified": 1764517877, 6 + "narHash": "sha256-pp3uT4hHijIC8JUK5MEqeAWmParJrgBVzHLNfJDZxg4=", 7 + "owner": "NixOS", 8 + "repo": "nixpkgs", 9 + "rev": "2d293cbfa5a793b4c50d17c05ef9e385b90edf6c", 10 + "type": "github" 11 + }, 12 + "original": { 13 + "owner": "NixOS", 14 + "ref": "nixos-unstable", 15 + "repo": "nixpkgs", 16 + "type": "github" 17 + } 18 + }, 19 + "root": { 20 + "inputs": { 21 + "nixpkgs": "nixpkgs", 22 + "systems": "systems" 23 + } 24 + }, 25 + "systems": { 26 + "locked": { 27 + "lastModified": 1681028828, 28 + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 29 + "owner": "nix-systems", 30 + "repo": "default", 31 + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 32 + "type": "github" 33 + }, 34 + "original": { 35 + "id": "systems", 36 + "type": "indirect" 37 + } 38 + } 39 + }, 40 + "root": "root", 41 + "version": 7 42 + }
+31
flake.nix
··· 1 + { 2 + inputs = { 3 + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; 4 + }; 5 + 6 + outputs = 7 + { 8 + systems, 9 + nixpkgs, 10 + ... 11 + }: 12 + let 13 + eachSystem = nixpkgs.lib.genAttrs (import systems); 14 + in 15 + { 16 + devShells = eachSystem ( 17 + system: 18 + let 19 + pkgs = nixpkgs.legacyPackages.${system}; 20 + in 21 + { 22 + default = nixpkgs.legacyPackages.${system}.mkShell { 23 + packages = [ 24 + pkgs.zig 25 + pkgs.zls 26 + ]; 27 + }; 28 + } 29 + ); 30 + }; 31 + }
+4510
inputs/day1.txt
··· 1 + R46 2 + L12 3 + R1 4 + R12 5 + R41 6 + R10 7 + L45 8 + R32 9 + R6 10 + R31 11 + R46 12 + L18 13 + L33 14 + R19 15 + R38 16 + L32 17 + R39 18 + L14 19 + L33 20 + L35 21 + R14 22 + R20 23 + L49 24 + R37 25 + L25 26 + R26 27 + L37 28 + L30 29 + R25 30 + L2 31 + R43 32 + R16 33 + L26 34 + R30 35 + R9 36 + L36 37 + R38 38 + L37 39 + R41 40 + R5 41 + L39 42 + R41 43 + R9 44 + L43 45 + L27 46 + R22 47 + R28 48 + R49 49 + L33 50 + R83 51 + L1 52 + R50 53 + R50 54 + L19 55 + R74 56 + R28 57 + L60 58 + L34 59 + R84 60 + R65 61 + L96 62 + L95 63 + L36 64 + R7 65 + R43 66 + L46 67 + R7 68 + L22 69 + L13 70 + R80 71 + L72 72 + L12 73 + L23 74 + L60 75 + L24 76 + R69 77 + R55 78 + R74 79 + L14 80 + L69 81 + L49 82 + L1 83 + L41 84 + R58 85 + L40 86 + R51 87 + L56 88 + R87 89 + L70 90 + R80 91 + R55 92 + R35 93 + R4 94 + L99 95 + L5 96 + L53 97 + R27 98 + L97 99 + L51 100 + L88 101 + R69 102 + R17 103 + R66 104 + L81 105 + R91 106 + R89 107 + L89 108 + L513 109 + R94 110 + R19 111 + R99 112 + L99 113 + L82 114 + L26 115 + R440 116 + L32 117 + R580 118 + R959 119 + L930 120 + L9 121 + R76 122 + L6 123 + L34 124 + L612 125 + L24 126 + L593 127 + L7 128 + R38 129 + R62 130 + L66 131 + R45 132 + L24 133 + R14 134 + R731 135 + R79 136 + R19 137 + R190 138 + R720 139 + L43 140 + L26 141 + R861 142 + L863 143 + L15 144 + L22 145 + R67 146 + L67 147 + L37 148 + L485 149 + R252 150 + R70 151 + R10 152 + L93 153 + L17 154 + R36 155 + R4 156 + L79 157 + L955 158 + R156 159 + L40 160 + L22 161 + L311 162 + R9 163 + L82 164 + L97 165 + R94 166 + L58 167 + L55 168 + R895 169 + R53 170 + L73 171 + L25 172 + R734 173 + L62 174 + L489 175 + L33 176 + L55 177 + L61 178 + R356 179 + R81 180 + R54 181 + R847 182 + L866 183 + R46 184 + L42 185 + L66 186 + L94 187 + R180 188 + R89 189 + R58 190 + R425 191 + L62 192 + L90 193 + R23 194 + R76 195 + L99 196 + R61 197 + R39 198 + R80 199 + L21 200 + R41 201 + R62 202 + R85 203 + L471 204 + L40 205 + L80 206 + L40 207 + R27 208 + R57 209 + L36 210 + L31 211 + L95 212 + L285 213 + L85 214 + R32 215 + L37 216 + R56 217 + L392 218 + R594 219 + L74 220 + L59 221 + R911 222 + R1 223 + R43 224 + L18 225 + R912 226 + R863 227 + L20 228 + L80 229 + R87 230 + L596 231 + R9 232 + L69 233 + L64 234 + R70 235 + R98 236 + L38 237 + R85 238 + L26 239 + L6 240 + R53 241 + R97 242 + L81 243 + L43 244 + L70 245 + L86 246 + L11 247 + L25 248 + R41 249 + L8 250 + R383 251 + R35 252 + L67 253 + L90 254 + L78 255 + L35 256 + L65 257 + R94 258 + R6 259 + R60 260 + R40 261 + R51 262 + L84 263 + R38 264 + L543 265 + L72 266 + R88 267 + L87 268 + R9 269 + L37 270 + R237 271 + L67 272 + R301 273 + L15 274 + R81 275 + L58 276 + R31 277 + R2 278 + L1 279 + L61 280 + R38 281 + R349 282 + L72 283 + R72 284 + R578 285 + R362 286 + L40 287 + R81 288 + R19 289 + R54 290 + L48 291 + L77 292 + R71 293 + R73 294 + L473 295 + R110 296 + R90 297 + R51 298 + L51 299 + R53 300 + L796 301 + R43 302 + R99 303 + L555 304 + R204 305 + R52 306 + R93 307 + R7 308 + R55 309 + R45 310 + L218 311 + L82 312 + L449 313 + L70 314 + R50 315 + R969 316 + L665 317 + L28 318 + R99 319 + R51 320 + R43 321 + R70 322 + L19 323 + R45 324 + L30 325 + R434 326 + R62 327 + L712 328 + L50 329 + R190 330 + R47 331 + L341 332 + L196 333 + R852 334 + L54 335 + L65 336 + R36 337 + L69 338 + R83 339 + L93 340 + L190 341 + L807 342 + R7 343 + L2 344 + R2 345 + R5 346 + R82 347 + L26 348 + R39 349 + R95 350 + R85 351 + L80 352 + R11 353 + R89 354 + L89 355 + L25 356 + R14 357 + L53 358 + L218 359 + R70 360 + R44 361 + L32 362 + L786 363 + R87 364 + L33 365 + R21 366 + L483 367 + L17 368 + L81 369 + L70 370 + L40 371 + L611 372 + L93 373 + L5 374 + R49 375 + R51 376 + L61 377 + L57 378 + R18 379 + R62 380 + R53 381 + R85 382 + R40 383 + L17 384 + R506 385 + L49 386 + L243 387 + R63 388 + L49 389 + R96 390 + L31 391 + R52 392 + L80 393 + L71 394 + L44 395 + R27 396 + R1 397 + L1 398 + R89 399 + L589 400 + R40 401 + L85 402 + R45 403 + L25 404 + L91 405 + L84 406 + R43 407 + L55 408 + L49 409 + R993 410 + L38 411 + R6 412 + L47 413 + L1 414 + L82 415 + R32 416 + L2 417 + L723 418 + R48 419 + R94 420 + R18 421 + L863 422 + L826 423 + L44 424 + L4 425 + R7 426 + R93 427 + R78 428 + R30 429 + L71 430 + L37 431 + L651 432 + L79 433 + L58 434 + R576 435 + L610 436 + R22 437 + R77 438 + L77 439 + R430 440 + R99 441 + L530 442 + R5 443 + L4 444 + L305 445 + L95 446 + L863 447 + L81 448 + R44 449 + L836 450 + L91 451 + R12 452 + R15 453 + R38 454 + R689 455 + L86 456 + R59 457 + L27 458 + R63 459 + R64 460 + R67 461 + R33 462 + R27 463 + R264 464 + R130 465 + R579 466 + L95 467 + L459 468 + L46 469 + R411 470 + L21 471 + R15 472 + R1 473 + L806 474 + L77 475 + R85 476 + L3 477 + L5 478 + L654 479 + R54 480 + L64 481 + L285 482 + R73 483 + L65 484 + R41 485 + R29 486 + L146 487 + R417 488 + L62 489 + L82 490 + R32 491 + R374 492 + R26 493 + L457 494 + L23 495 + L10 496 + R34 497 + R68 498 + L37 499 + R33 500 + L15 501 + L97 502 + L40 503 + L58 504 + L28 505 + L9 506 + L27 507 + R37 508 + R8 509 + R711 510 + R22 511 + L373 512 + L27 513 + L94 514 + R21 515 + L35 516 + L92 517 + R33 518 + L85 519 + R552 520 + R17 521 + L65 522 + R309 523 + R39 524 + L903 525 + R63 526 + R83 527 + R41 528 + L56 529 + R10 530 + R62 531 + L270 532 + L22 533 + R157 534 + L35 535 + L30 536 + L11 537 + R49 538 + L5 539 + R967 540 + R94 541 + R46 542 + L740 543 + R77 544 + R23 545 + L12 546 + L15 547 + R27 548 + R4 549 + L630 550 + L16 551 + L26 552 + R68 553 + L50 554 + L556 555 + R6 556 + R639 557 + R630 558 + L98 559 + L71 560 + R21 561 + L21 562 + R75 563 + R53 564 + L84 565 + R56 566 + R86 567 + R14 568 + R55 569 + L57 570 + R4 571 + R98 572 + L30 573 + R20 574 + R10 575 + R98 576 + R5 577 + R56 578 + R207 579 + R34 580 + L7 581 + R7 582 + L19 583 + R92 584 + L242 585 + R43 586 + L19 587 + R3 588 + L27 589 + L31 590 + L16 591 + R17 592 + L48 593 + R92 594 + L11 595 + R32 596 + L12 597 + L64 598 + R10 599 + L86 600 + L414 601 + R676 602 + L76 603 + L27 604 + R16 605 + R12 606 + R99 607 + L83 608 + L7 609 + R90 610 + L82 611 + L5 612 + R83 613 + R30 614 + L26 615 + L51 616 + L594 617 + R719 618 + L74 619 + L7 620 + L493 621 + L99 622 + L44 623 + L68 624 + L772 625 + R83 626 + L36 627 + L76 628 + L28 629 + R89 630 + L35 631 + L44 632 + L350 633 + L78 634 + L45 635 + R77 636 + R78 637 + L52 638 + L73 639 + L27 640 + L73 641 + R34 642 + L32 643 + R57 644 + L86 645 + L43 646 + L4 647 + L28 648 + R75 649 + L4 650 + R98 651 + R57 652 + L51 653 + R55 654 + L38 655 + R83 656 + R65 657 + R95 658 + R40 659 + L89 660 + L16 661 + L44 662 + L41 663 + L23 664 + L987 665 + R65 666 + L208 667 + R198 668 + L55 669 + R52 670 + R36 671 + R40 672 + L72 673 + R44 674 + R48 675 + R20 676 + L68 677 + R2 678 + L78 679 + R96 680 + R62 681 + L77 682 + L305 683 + R146 684 + R17 685 + L63 686 + L3 687 + R10 688 + R693 689 + L78 690 + L59 691 + R5 692 + R32 693 + L91 694 + L34 695 + R25 696 + L185 697 + R15 698 + L78 699 + L79 700 + R69 701 + R58 702 + R88 703 + R12 704 + R94 705 + R45 706 + L91 707 + R47 708 + L663 709 + R868 710 + L759 711 + L97 712 + R60 713 + R64 714 + L68 715 + R87 716 + R13 717 + R67 718 + R92 719 + R1 720 + R42 721 + L402 722 + R3 723 + R4 724 + R90 725 + L13 726 + R16 727 + R89 728 + R6 729 + L795 730 + L26 731 + L91 732 + R17 733 + R88 734 + R12 735 + R96 736 + L96 737 + R81 738 + R76 739 + R43 740 + L84 741 + R84 742 + R96 743 + L50 744 + R6 745 + L15 746 + L911 747 + L60 748 + L66 749 + L832 750 + R68 751 + L36 752 + R60 753 + R40 754 + L753 755 + R73 756 + L15 757 + L71 758 + R484 759 + R517 760 + R66 761 + R476 762 + L77 763 + R22 764 + R78 765 + R20 766 + R2 767 + L722 768 + L32 769 + R41 770 + L328 771 + L23 772 + R42 773 + L97 774 + R735 775 + L807 776 + R81 777 + R88 778 + R58 779 + R179 780 + R42 781 + L79 782 + L68 783 + R68 784 + R1 785 + L42 786 + R71 787 + R72 788 + R95 789 + L53 790 + R56 791 + L48 792 + L52 793 + R449 794 + R51 795 + L30 796 + L70 797 + R25 798 + L77 799 + R52 800 + R65 801 + R228 802 + L93 803 + R64 804 + R476 805 + R46 806 + R59 807 + R69 808 + R45 809 + R21 810 + R51 811 + L16 812 + L224 813 + L80 814 + R301 815 + R88 816 + R385 817 + L30 818 + R22 819 + L39 820 + L38 821 + L75 822 + R175 823 + L74 824 + L486 825 + L40 826 + L1 827 + R1 828 + L61 829 + L72 830 + L367 831 + R54 832 + R46 833 + R89 834 + L4 835 + R15 836 + L63 837 + R67 838 + R62 839 + R34 840 + R12 841 + R95 842 + R93 843 + R36 844 + L95 845 + L3 846 + R77 847 + R29 848 + R71 849 + L15 850 + L581 851 + R53 852 + R528 853 + L20 854 + L80 855 + L98 856 + R98 857 + R55 858 + L555 859 + L866 860 + R51 861 + R15 862 + R899 863 + L399 864 + R5 865 + L758 866 + L28 867 + R82 868 + L401 869 + R51 870 + L45 871 + L6 872 + L14 873 + R40 874 + L253 875 + L473 876 + R50 877 + R150 878 + R11 879 + R80 880 + R612 881 + R833 882 + L712 883 + L89 884 + R30 885 + R60 886 + R75 887 + L4 888 + L66 889 + R22 890 + R68 891 + L56 892 + L93 893 + L11 894 + R340 895 + L926 896 + R212 897 + L36 898 + R51 899 + L959 900 + R65 901 + R93 902 + L37 903 + L63 904 + R12 905 + L62 906 + R92 907 + R20 908 + R38 909 + R887 910 + R13 911 + R92 912 + R34 913 + R818 914 + L196 915 + R52 916 + R6 917 + L6 918 + L72 919 + R19 920 + R94 921 + L41 922 + R413 923 + L67 924 + R54 925 + R719 926 + L41 927 + R22 928 + R96 929 + L796 930 + R64 931 + L84 932 + L22 933 + L58 934 + R56 935 + L314 936 + R284 937 + L194 938 + L85 939 + R49 940 + L896 941 + R42 942 + R95 943 + R63 944 + L305 945 + R98 946 + L42 947 + R49 948 + L936 949 + L10 950 + L47 951 + R27 952 + R66 953 + L48 954 + R48 955 + R34 956 + R45 957 + R67 958 + R54 959 + L98 960 + L57 961 + L66 962 + R21 963 + L12 964 + L577 965 + L74 966 + R863 967 + R66 968 + R98 969 + L29 970 + R420 971 + L255 972 + R81 973 + R53 974 + L34 975 + L24 976 + R226 977 + R21 978 + L30 979 + L43 980 + L429 981 + R921 982 + L23 983 + L19 984 + L59 985 + R57 986 + L3 987 + L595 988 + R111 989 + R68 990 + L79 991 + R1 992 + L703 993 + R2 994 + L5 995 + L40 996 + L10 997 + L79 998 + L66 999 + L310 1000 + L90 1001 + L66 1002 + L8 1003 + L44 1004 + R6 1005 + L31 1006 + R43 1007 + R14 1008 + R86 1009 + R79 1010 + L438 1011 + R59 1012 + R81 1013 + R83 1014 + L894 1015 + L3 1016 + L99 1017 + L841 1018 + R92 1019 + R623 1020 + L151 1021 + R77 1022 + R32 1023 + L64 1024 + L99 1025 + L8 1026 + L29 1027 + L85 1028 + R97 1029 + R49 1030 + L61 1031 + L56 1032 + R32 1033 + L76 1034 + L36 1035 + R36 1036 + R474 1037 + R26 1038 + L825 1039 + R67 1040 + L49 1041 + R7 1042 + R51 1043 + L12 1044 + L83 1045 + L9 1046 + L77 1047 + L62 1048 + R92 1049 + L73 1050 + L706 1051 + R19 1052 + L55 1053 + R70 1054 + L72 1055 + L83 1056 + L38 1057 + L58 1058 + L804 1059 + L692 1060 + R92 1061 + R54 1062 + R27 1063 + L876 1064 + R607 1065 + R49 1066 + L9 1067 + R38 1068 + R819 1069 + R48 1070 + L57 1071 + L188 1072 + R88 1073 + R26 1074 + L26 1075 + L76 1076 + R72 1077 + R22 1078 + R97 1079 + L22 1080 + R596 1081 + L70 1082 + R81 1083 + L37 1084 + L33 1085 + R26 1086 + L43 1087 + R87 1088 + R67 1089 + L55 1090 + R107 1091 + L73 1092 + R54 1093 + R17 1094 + R81 1095 + L41 1096 + L57 1097 + R49 1098 + L42 1099 + R293 1100 + R85 1101 + L85 1102 + R25 1103 + R832 1104 + R65 1105 + L48 1106 + L99 1107 + L96 1108 + L79 1109 + R93 1110 + R79 1111 + R30 1112 + L183 1113 + L36 1114 + L22 1115 + L29 1116 + R845 1117 + L25 1118 + R637 1119 + R11 1120 + R15 1121 + L43 1122 + R28 1123 + R99 1124 + R28 1125 + R19 1126 + R28 1127 + R326 1128 + L76 1129 + L924 1130 + R61 1131 + R50 1132 + L27 1133 + R16 1134 + R757 1135 + R373 1136 + L30 1137 + R57 1138 + R68 1139 + R72 1140 + L811 1141 + R47 1142 + L12 1143 + L21 1144 + L56 1145 + L541 1146 + R7 1147 + L10 1148 + L211 1149 + L89 1150 + R67 1151 + R25 1152 + R80 1153 + R38 1154 + L17 1155 + R85 1156 + R61 1157 + R95 1158 + R66 1159 + L319 1160 + R61 1161 + L2 1162 + R960 1163 + L89 1164 + R71 1165 + R19 1166 + R20 1167 + L21 1168 + L186 1169 + R47 1170 + R39 1171 + R71 1172 + R14 1173 + R15 1174 + L26 1175 + R84 1176 + L58 1177 + L51 1178 + L49 1179 + L99 1180 + L1 1181 + L65 1182 + L135 1183 + R27 1184 + L827 1185 + L47 1186 + L321 1187 + L32 1188 + L79 1189 + L29 1190 + L34 1191 + R96 1192 + L54 1193 + R63 1194 + R2 1195 + L44 1196 + R181 1197 + R982 1198 + L78 1199 + L6 1200 + L72 1201 + R69 1202 + R603 1203 + L19 1204 + R19 1205 + R41 1206 + L73 1207 + R465 1208 + R20 1209 + L69 1210 + R590 1211 + R93 1212 + R6 1213 + R12 1214 + L9 1215 + L84 1216 + L389 1217 + R97 1218 + R494 1219 + L88 1220 + L106 1221 + L21 1222 + L79 1223 + R11 1224 + R33 1225 + L439 1226 + R612 1227 + L90 1228 + R73 1229 + L675 1230 + L87 1231 + R65 1232 + L36 1233 + L67 1234 + R66 1235 + L96 1236 + L388 1237 + L89 1238 + R6 1239 + L99 1240 + R71 1241 + R982 1242 + L9 1243 + L533 1244 + L111 1245 + L37 1246 + R923 1247 + L72 1248 + R86 1249 + R16 1250 + R33 1251 + L72 1252 + L67 1253 + R90 1254 + L42 1255 + R4 1256 + R735 1257 + R9 1258 + R94 1259 + L4 1260 + L96 1261 + L36 1262 + R31 1263 + R20 1264 + R37 1265 + L452 1266 + L63 1267 + L40 1268 + L88 1269 + R88 1270 + L82 1271 + R92 1272 + L7 1273 + R35 1274 + R27 1275 + R51 1276 + R87 1277 + R45 1278 + R29 1279 + L74 1280 + R311 1281 + R89 1282 + L62 1283 + R94 1284 + L37 1285 + L95 1286 + R545 1287 + R14 1288 + R41 1289 + R82 1290 + L82 1291 + L55 1292 + L345 1293 + R1 1294 + L59 1295 + R238 1296 + L30 1297 + R50 1298 + R275 1299 + L66 1300 + R90 1301 + L56 1302 + R99 1303 + L188 1304 + R829 1305 + R17 1306 + L421 1307 + R21 1308 + R46 1309 + R68 1310 + R13 1311 + R49 1312 + R424 1313 + R93 1314 + R7 1315 + R74 1316 + L974 1317 + L93 1318 + R81 1319 + L94 1320 + L66 1321 + L26 1322 + R40 1323 + R58 1324 + R23 1325 + R18 1326 + R59 1327 + R43 1328 + L46 1329 + R63 1330 + L81 1331 + R21 1332 + L62 1333 + R62 1334 + R697 1335 + L97 1336 + R80 1337 + L766 1338 + R45 1339 + L59 1340 + R291 1341 + R9 1342 + L68 1343 + R58 1344 + L94 1345 + R50 1346 + R718 1347 + L35 1348 + L29 1349 + L73 1350 + R581 1351 + L708 1352 + R88 1353 + R12 1354 + R73 1355 + L77 1356 + R81 1357 + R97 1358 + L542 1359 + R17 1360 + R1 1361 + L94 1362 + L56 1363 + L48 1364 + L57 1365 + R5 1366 + L9 1367 + R20 1368 + L763 1369 + L56 1370 + L24 1371 + L368 1372 + L22 1373 + L40 1374 + R62 1375 + R30 1376 + R70 1377 + L51 1378 + R33 1379 + L82 1380 + R75 1381 + L60 1382 + L70 1383 + R3 1384 + L61 1385 + R613 1386 + R792 1387 + R108 1388 + L37 1389 + R37 1390 + L69 1391 + R34 1392 + R835 1393 + R67 1394 + R33 1395 + L157 1396 + L43 1397 + R816 1398 + L44 1399 + L72 1400 + R58 1401 + L58 1402 + R28 1403 + L3 1404 + L72 1405 + L73 1406 + L80 1407 + L26 1408 + L39 1409 + L81 1410 + L754 1411 + L96 1412 + L85 1413 + R50 1414 + L258 1415 + L27 1416 + R16 1417 + L84 1418 + R12 1419 + R672 1420 + L99 1421 + R230 1422 + R70 1423 + R99 1424 + L83 1425 + R583 1426 + L82 1427 + L14 1428 + R96 1429 + R343 1430 + L577 1431 + R93 1432 + R41 1433 + L894 1434 + R28 1435 + R66 1436 + R76 1437 + L76 1438 + L677 1439 + L23 1440 + L35 1441 + L41 1442 + R98 1443 + L103 1444 + L688 1445 + R18 1446 + R34 1447 + R82 1448 + R46 1449 + L11 1450 + L14 1451 + L5 1452 + L81 1453 + R35 1454 + L53 1455 + L82 1456 + L5 1457 + L44 1458 + L37 1459 + L64 1460 + L17 1461 + L87 1462 + L46 1463 + R876 1464 + R224 1465 + L799 1466 + L63 1467 + R62 1468 + L65 1469 + L65 1470 + L70 1471 + R46 1472 + R24 1473 + R30 1474 + L63 1475 + L24 1476 + R387 1477 + L71 1478 + R71 1479 + L94 1480 + L36 1481 + L70 1482 + L32 1483 + L77 1484 + L762 1485 + L29 1486 + L17 1487 + R225 1488 + L32 1489 + R96 1490 + L72 1491 + R77 1492 + R16 1493 + R7 1494 + L51 1495 + R445 1496 + R6 1497 + L32 1498 + L77 1499 + R9 1500 + L5 1501 + L95 1502 + R20 1503 + L59 1504 + L18 1505 + L32 1506 + L329 1507 + L723 1508 + R41 1509 + L69 1510 + L12 1511 + R922 1512 + L67 1513 + L950 1514 + R476 1515 + R27 1516 + R173 1517 + R83 1518 + L962 1519 + L56 1520 + R59 1521 + R60 1522 + R513 1523 + L97 1524 + R70 1525 + R54 1526 + L24 1527 + R416 1528 + R484 1529 + R57 1530 + R21 1531 + R22 1532 + L57 1533 + R71 1534 + R686 1535 + R93 1536 + L616 1537 + R747 1538 + R81 1539 + L323 1540 + R418 1541 + R32 1542 + R97 1543 + R28 1544 + R460 1545 + L58 1546 + R73 1547 + L26 1548 + L6 1549 + R6 1550 + L21 1551 + R76 1552 + L286 1553 + R629 1554 + L4 1555 + L52 1556 + R10 1557 + R87 1558 + R55 1559 + R55 1560 + L76 1561 + L26 1562 + L35 1563 + R82 1564 + R715 1565 + R85 1566 + R78 1567 + L34 1568 + L27 1569 + L8 1570 + R26 1571 + L35 1572 + R93 1573 + R7 1574 + R48 1575 + R62 1576 + R84 1577 + L94 1578 + R96 1579 + L89 1580 + L29 1581 + R2 1582 + L80 1583 + R933 1584 + L33 1585 + L59 1586 + L77 1587 + R111 1588 + R25 1589 + R76 1590 + L76 1591 + R56 1592 + L37 1593 + R84 1594 + R97 1595 + L25 1596 + L79 1597 + R4 1598 + R92 1599 + R96 1600 + L67 1601 + R42 1602 + R46 1603 + R28 1604 + L37 1605 + R29 1606 + L29 1607 + R34 1608 + R93 1609 + R19 1610 + R84 1611 + R770 1612 + L56 1613 + R689 1614 + L74 1615 + L1 1616 + R42 1617 + L72 1618 + R72 1619 + L609 1620 + R945 1621 + R15 1622 + R49 1623 + R8 1624 + R492 1625 + R58 1626 + R42 1627 + R470 1628 + R34 1629 + R17 1630 + R94 1631 + R5 1632 + R4 1633 + R82 1634 + L85 1635 + L62 1636 + R41 1637 + R37 1638 + R63 1639 + L50 1640 + R17 1641 + R41 1642 + R92 1643 + R995 1644 + R5 1645 + L63 1646 + R63 1647 + R23 1648 + L41 1649 + R55 1650 + L601 1651 + L40 1652 + L14 1653 + L87 1654 + L221 1655 + R24 1656 + R49 1657 + R712 1658 + L359 1659 + L28 1660 + R28 1661 + L844 1662 + R79 1663 + R90 1664 + R75 1665 + L46 1666 + L64 1667 + L14 1668 + R97 1669 + L655 1670 + R90 1671 + L20 1672 + R12 1673 + R79 1674 + L1 1675 + L78 1676 + R72 1677 + L99 1678 + L1 1679 + R602 1680 + L19 1681 + R72 1682 + R8 1683 + L78 1684 + L36 1685 + R87 1686 + L23 1687 + R23 1688 + L408 1689 + R57 1690 + R590 1691 + R66 1692 + R339 1693 + R53 1694 + L5 1695 + L90 1696 + L6 1697 + L76 1698 + R31 1699 + R854 1700 + L13 1701 + R43 1702 + L65 1703 + R122 1704 + L592 1705 + L75 1706 + L61 1707 + L82 1708 + L90 1709 + R86 1710 + L86 1711 + R64 1712 + R97 1713 + L57 1714 + R44 1715 + L88 1716 + L94 1717 + R279 1718 + L10 1719 + R13 1720 + R56 1721 + R12 1722 + R84 1723 + R59 1724 + L75 1725 + L84 1726 + R80 1727 + R20 1728 + L18 1729 + L1 1730 + L267 1731 + R786 1732 + L197 1733 + R597 1734 + R10 1735 + L99 1736 + R89 1737 + L19 1738 + L81 1739 + L877 1740 + L23 1741 + L35 1742 + R82 1743 + L47 1744 + R37 1745 + R63 1746 + R43 1747 + R57 1748 + R38 1749 + R62 1750 + R36 1751 + R52 1752 + L9 1753 + R321 1754 + R92 1755 + R73 1756 + R53 1757 + L37 1758 + R19 1759 + R36 1760 + L36 1761 + R121 1762 + R665 1763 + L621 1764 + R92 1765 + L57 1766 + L52 1767 + R86 1768 + R72 1769 + R12 1770 + R358 1771 + L809 1772 + L6 1773 + R39 1774 + R11 1775 + L52 1776 + R95 1777 + R95 1778 + L12 1779 + R33 1780 + R30 1781 + R53 1782 + R41 1783 + R10 1784 + R96 1785 + L87 1786 + L13 1787 + L33 1788 + L90 1789 + L77 1790 + L89 1791 + L11 1792 + R51 1793 + R43 1794 + L45 1795 + L92 1796 + L857 1797 + L86 1798 + L82 1799 + L29 1800 + L26 1801 + R1 1802 + R507 1803 + R94 1804 + L90 1805 + L89 1806 + L55 1807 + L3 1808 + L62 1809 + R20 1810 + R36 1811 + R164 1812 + L14 1813 + R62 1814 + L42 1815 + L27 1816 + L56 1817 + L50 1818 + R27 1819 + L47 1820 + R32 1821 + L11 1822 + R64 1823 + L738 1824 + L41 1825 + R518 1826 + R67 1827 + L16 1828 + L28 1829 + L451 1830 + L264 1831 + R15 1832 + R57 1833 + L398 1834 + L705 1835 + R481 1836 + L35 1837 + L23 1838 + R58 1839 + R6 1840 + R88 1841 + R79 1842 + R92 1843 + L99 1844 + L94 1845 + L24 1846 + L58 1847 + L20 1848 + L63 1849 + L42 1850 + R95 1851 + L42 1852 + R92 1853 + L999 1854 + L85 1855 + R362 1856 + L23 1857 + L23 1858 + R82 1859 + R41 1860 + R79 1861 + R21 1862 + R720 1863 + L43 1864 + L530 1865 + R8 1866 + R45 1867 + L3 1868 + R3 1869 + L66 1870 + L34 1871 + R727 1872 + R509 1873 + R93 1874 + L29 1875 + R97 1876 + R61 1877 + L58 1878 + R82 1879 + R32 1880 + R29 1881 + R57 1882 + L13 1883 + L87 1884 + R385 1885 + L23 1886 + L408 1887 + R46 1888 + R59 1889 + L59 1890 + L23 1891 + R521 1892 + R46 1893 + R54 1894 + R902 1895 + L634 1896 + L75 1897 + R9 1898 + R655 1899 + L29 1900 + L30 1901 + R93 1902 + R84 1903 + R66 1904 + L540 1905 + R10 1906 + R91 1907 + L910 1908 + R97 1909 + R46 1910 + L33 1911 + L2 1912 + L60 1913 + L93 1914 + L45 1915 + R73 1916 + R27 1917 + R20 1918 + L720 1919 + L90 1920 + R90 1921 + L76 1922 + L655 1923 + R31 1924 + L2 1925 + L498 1926 + R41 1927 + R71 1928 + L12 1929 + R378 1930 + R222 1931 + R37 1932 + R98 1933 + R26 1934 + L61 1935 + L490 1936 + L10 1937 + L66 1938 + R66 1939 + L48 1940 + R82 1941 + L41 1942 + L393 1943 + L52 1944 + R652 1945 + R483 1946 + L83 1947 + R75 1948 + L788 1949 + R38 1950 + L62 1951 + R37 1952 + R56 1953 + R71 1954 + L21 1955 + R19 1956 + R75 1957 + R92 1958 + L17 1959 + L75 1960 + R44 1961 + R356 1962 + L95 1963 + L5 1964 + L140 1965 + L52 1966 + R41 1967 + R43 1968 + R78 1969 + L13 1970 + R64 1971 + R73 1972 + L994 1973 + R861 1974 + L7 1975 + R46 1976 + L842 1977 + L406 1978 + L15 1979 + R863 1980 + L812 1981 + R3 1982 + L26 1983 + R35 1984 + L15 1985 + R15 1986 + R87 1987 + L29 1988 + L54 1989 + L95 1990 + L9 1991 + L5 1992 + R423 1993 + R38 1994 + L18 1995 + R701 1996 + R61 1997 + L20 1998 + R20 1999 + R11 2000 + R61 2001 + L225 2002 + R78 2003 + R17 2004 + L43 2005 + L32 2006 + L64 2007 + R372 2008 + L75 2009 + L41 2010 + R94 2011 + R47 2012 + L11 2013 + L89 2014 + L87 2015 + L59 2016 + R46 2017 + R127 2018 + L676 2019 + R48 2020 + R1 2021 + L268 2022 + R68 2023 + L54 2024 + R76 2025 + L22 2026 + L52 2027 + L53 2028 + R906 2029 + R99 2030 + L82 2031 + R382 2032 + R87 2033 + R13 2034 + R806 2035 + R36 2036 + R78 2037 + L20 2038 + L762 2039 + R62 2040 + L66 2041 + L34 2042 + R49 2043 + R51 2044 + L65 2045 + R65 2046 + L21 2047 + L62 2048 + R32 2049 + L770 2050 + R98 2051 + L723 2052 + L543 2053 + R89 2054 + L47 2055 + L53 2056 + L59 2057 + R12 2058 + L53 2059 + R85 2060 + L945 2061 + L82 2062 + R27 2063 + L58 2064 + L97 2065 + L883 2066 + R53 2067 + R21 2068 + L62 2069 + R526 2070 + R15 2071 + L89 2072 + L30 2073 + R365 2074 + R70 2075 + L16 2076 + R142 2077 + L89 2078 + L88 2079 + R35 2080 + R24 2081 + R776 2082 + R21 2083 + L38 2084 + L83 2085 + L21 2086 + R22 2087 + L60 2088 + R53 2089 + L613 2090 + L81 2091 + R569 2092 + L33 2093 + R64 2094 + R89 2095 + L64 2096 + R64 2097 + R11 2098 + R64 2099 + L64 2100 + R15 2101 + R96 2102 + L35 2103 + L85 2104 + R9 2105 + L29 2106 + L61 2107 + L83 2108 + R36 2109 + L14 2110 + L64 2111 + R15 2112 + R16 2113 + L204 2114 + L408 2115 + L4 2116 + R21 2117 + L11 2118 + R690 2119 + L23 2120 + R423 2121 + R376 2122 + L446 2123 + L45 2124 + R15 2125 + L65 2126 + R7 2127 + L2 2128 + L48 2129 + L92 2130 + L54 2131 + R33 2132 + L53 2133 + R41 2134 + R33 2135 + R2 2136 + L69 2137 + R933 2138 + L66 2139 + L20 2140 + R90 2141 + R20 2142 + R310 2143 + L893 2144 + L56 2145 + L63 2146 + L57 2147 + R57 2148 + R41 2149 + R10 2150 + R61 2151 + L65 2152 + R98 2153 + R25 2154 + R41 2155 + L57 2156 + R82 2157 + L124 2158 + R57 2159 + L5 2160 + R24 2161 + R85 2162 + L24 2163 + L80 2164 + R212 2165 + R28 2166 + L97 2167 + L4 2168 + R12 2169 + R41 2170 + L49 2171 + R795 2172 + R5 2173 + L31 2174 + L8 2175 + R88 2176 + R92 2177 + R16 2178 + L157 2179 + L92 2180 + R71 2181 + L79 2182 + L352 2183 + R45 2184 + R45 2185 + L38 2186 + R83 2187 + L61 2188 + R78 2189 + R64 2190 + L64 2191 + L41 2192 + L59 2193 + R247 2194 + R53 2195 + L80 2196 + L20 2197 + L23 2198 + R89 2199 + R34 2200 + L323 2201 + R723 2202 + L799 2203 + R75 2204 + R50 2205 + R40 2206 + R9 2207 + L807 2208 + R36 2209 + R56 2210 + R40 2211 + R590 2212 + R88 2213 + R9 2214 + R13 2215 + L38 2216 + R38 2217 + R20 2218 + R76 2219 + R2 2220 + R2 2221 + R32 2222 + L38 2223 + L194 2224 + R77 2225 + R14 2226 + R94 2227 + L85 2228 + L8 2229 + R58 2230 + R2 2231 + R25 2232 + R23 2233 + R86 2234 + L32 2235 + R85 2236 + L3 2237 + L91 2238 + L45 2239 + R75 2240 + R27 2241 + L50 2242 + R9 2243 + L61 2244 + L32 2245 + R94 2246 + L762 2247 + R42 2248 + L33 2249 + R47 2250 + L56 2251 + L91 2252 + L9 2253 + L13 2254 + L87 2255 + L88 2256 + R688 2257 + L94 2258 + L36 2259 + R71 2260 + R82 2261 + R77 2262 + R24 2263 + L205 2264 + R15 2265 + L34 2266 + R69 2267 + L90 2268 + R18 2269 + L14 2270 + L92 2271 + L43 2272 + R52 2273 + R66 2274 + R175 2275 + L26 2276 + L15 2277 + L18 2278 + R46 2279 + R66 2280 + R24 2281 + L18 2282 + R91 2283 + L54 2284 + L84 2285 + L2 2286 + R534 2287 + R82 2288 + L185 2289 + L6 2290 + L48 2291 + L28 2292 + R8 2293 + R292 2294 + R88 2295 + R516 2296 + R76 2297 + R132 2298 + L87 2299 + R75 2300 + L22 2301 + L66 2302 + R55 2303 + L67 2304 + L36 2305 + L56 2306 + R92 2307 + L83 2308 + R98 2309 + L24 2310 + R62 2311 + R71 2312 + R44 2313 + L68 2314 + R52 2315 + L48 2316 + R3 2317 + R93 2318 + R68 2319 + L68 2320 + R95 2321 + R69 2322 + L951 2323 + L69 2324 + R56 2325 + L482 2326 + R82 2327 + R34 2328 + R59 2329 + R507 2330 + L47 2331 + R94 2332 + R63 2333 + L49 2334 + R39 2335 + R55 2336 + L444 2337 + R89 2338 + R5 2339 + R95 2340 + R44 2341 + L33 2342 + L11 2343 + L311 2344 + L89 2345 + L63 2346 + R75 2347 + L49 2348 + L88 2349 + L98 2350 + L549 2351 + L533 2352 + R5 2353 + L54 2354 + R94 2355 + R60 2356 + R63 2357 + L563 2358 + R77 2359 + R23 2360 + L44 2361 + L42 2362 + R886 2363 + L51 2364 + R51 2365 + R967 2366 + L67 2367 + R71 2368 + R73 2369 + L548 2370 + L23 2371 + L19 2372 + L61 2373 + R7 2374 + R52 2375 + R31 2376 + R18 2377 + L39 2378 + R77 2379 + R4 2380 + R6 2381 + L81 2382 + R29 2383 + L476 2384 + L979 2385 + L42 2386 + L90 2387 + R90 2388 + R843 2389 + R74 2390 + L83 2391 + L34 2392 + L668 2393 + R50 2394 + R462 2395 + R53 2396 + R3 2397 + R679 2398 + R821 2399 + L238 2400 + R67 2401 + R11 2402 + L30 2403 + R56 2404 + L73 2405 + L410 2406 + R91 2407 + L95 2408 + R21 2409 + L87 2410 + L35 2411 + R90 2412 + L52 2413 + L17 2414 + L27 2415 + R28 2416 + R53 2417 + L33 2418 + R702 2419 + R78 2420 + R614 2421 + L52 2422 + R59 2423 + L6 2424 + R85 2425 + R56 2426 + R58 2427 + R32 2428 + L94 2429 + L82 2430 + R629 2431 + L603 2432 + L96 2433 + L54 2434 + R43 2435 + R11 2436 + R15 2437 + R85 2438 + L35 2439 + L65 2440 + L13 2441 + R74 2442 + R88 2443 + L349 2444 + R83 2445 + L74 2446 + L83 2447 + R74 2448 + L93 2449 + R61 2450 + R83 2451 + L52 2452 + L99 2453 + L83 2454 + R15 2455 + R38 2456 + L759 2457 + L711 2458 + R54 2459 + R46 2460 + L301 2461 + L99 2462 + L32 2463 + L548 2464 + R22 2465 + L39 2466 + R24 2467 + L7 2468 + L58 2469 + R32 2470 + L94 2471 + R309 2472 + R80 2473 + L89 2474 + R47 2475 + R53 2476 + L49 2477 + L51 2478 + L91 2479 + L429 2480 + L80 2481 + R72 2482 + L45 2483 + R935 2484 + R30 2485 + R638 2486 + R372 2487 + R98 2488 + L94 2489 + R74 2490 + L93 2491 + L663 2492 + L73 2493 + L51 2494 + R444 2495 + L799 2496 + L61 2497 + R43 2498 + L35 2499 + L18 2500 + R68 2501 + R25 2502 + L524 2503 + L41 2504 + L2 2505 + R61 2506 + R51 2507 + R55 2508 + L67 2509 + L755 2510 + L945 2511 + R52 2512 + L60 2513 + L42 2514 + R80 2515 + R167 2516 + L119 2517 + L278 2518 + R94 2519 + L92 2520 + L77 2521 + R51 2522 + R84 2523 + L19 2524 + R10 2525 + L51 2526 + L95 2527 + L59 2528 + L46 2529 + L79 2530 + L54 2531 + L34 2532 + L33 2533 + R69 2534 + L175 2535 + L410 2536 + R61 2537 + R11 2538 + L56 2539 + L34 2540 + R878 2541 + L56 2542 + R65 2543 + L43 2544 + R90 2545 + R89 2546 + L89 2547 + L5 2548 + L56 2549 + L7 2550 + L756 2551 + R71 2552 + R53 2553 + R441 2554 + R59 2555 + L114 2556 + L47 2557 + R33 2558 + R72 2559 + R856 2560 + R6 2561 + L320 2562 + L86 2563 + L202 2564 + L62 2565 + L36 2566 + R78 2567 + L78 2568 + R23 2569 + L915 2570 + L91 2571 + L17 2572 + L70 2573 + R11 2574 + R59 2575 + L42 2576 + L51 2577 + R17 2578 + L26 2579 + L798 2580 + R49 2581 + R997 2582 + R87 2583 + R28 2584 + L84 2585 + L10 2586 + L12 2587 + L55 2588 + L753 2589 + R553 2590 + R75 2591 + L69 2592 + R649 2593 + L55 2594 + R79 2595 + R21 2596 + L57 2597 + R41 2598 + L84 2599 + R38 2600 + R18 2601 + R434 2602 + L190 2603 + R41 2604 + L41 2605 + L140 2606 + R75 2607 + R65 2608 + R50 2609 + L50 2610 + R71 2611 + R59 2612 + L619 2613 + R43 2614 + R94 2615 + L43 2616 + L95 2617 + R3 2618 + R248 2619 + R39 2620 + R38 2621 + L33 2622 + R95 2623 + L90 2624 + R20 2625 + L30 2626 + R404 2627 + R96 2628 + L59 2629 + L12 2630 + L629 2631 + L48 2632 + L854 2633 + R97 2634 + R54 2635 + L46 2636 + R97 2637 + L39 2638 + L90 2639 + R6 2640 + L77 2641 + R2 2642 + R11 2643 + R39 2644 + L287 2645 + R735 2646 + R99 2647 + R76 2648 + R925 2649 + R665 2650 + R35 2651 + R150 2652 + R3 2653 + R47 2654 + R17 2655 + R83 2656 + R469 2657 + R34 2658 + R97 2659 + R2 2660 + R98 2661 + L39 2662 + L69 2663 + R8 2664 + L399 2665 + L69 2666 + L44 2667 + L2 2668 + L586 2669 + R21 2670 + L57 2671 + L64 2672 + L28 2673 + R28 2674 + L69 2675 + L89 2676 + L74 2677 + R32 2678 + L283 2679 + R73 2680 + L12 2681 + R22 2682 + R617 2683 + R25 2684 + R558 2685 + L78 2686 + R78 2687 + R34 2688 + R69 2689 + L612 2690 + L91 2691 + L14 2692 + R14 2693 + R91 2694 + L75 2695 + R84 2696 + L35 2697 + L13 2698 + R676 2699 + R182 2700 + R48 2701 + L62 2702 + L85 2703 + R2 2704 + R71 2705 + R79 2706 + L74 2707 + L938 2708 + L32 2709 + R81 2710 + R6 2711 + L19 2712 + R13 2713 + L609 2714 + L26 2715 + L85 2716 + L654 2717 + R74 2718 + R597 2719 + L97 2720 + L721 2721 + R21 2722 + L70 2723 + L87 2724 + L75 2725 + R34 2726 + L32 2727 + R80 2728 + R59 2729 + R91 2730 + L51 2731 + L81 2732 + R10 2733 + R39 2734 + R35 2735 + L74 2736 + R822 2737 + R932 2738 + R875 2739 + L151 2740 + R58 2741 + L914 2742 + R11 2743 + L17 2744 + R69 2745 + R791 2746 + L69 2747 + L94 2748 + L40 2749 + R23 2750 + R93 2751 + R90 2752 + L2 2753 + R59 2754 + L814 2755 + L79 2756 + L13 2757 + L44 2758 + L64 2759 + R57 2760 + R5 2761 + R26 2762 + R1 2763 + R1 2764 + R21 2765 + R89 2766 + R2 2767 + L89 2768 + R32 2769 + L45 2770 + L28 2771 + R64 2772 + L36 2773 + L97 2774 + L30 2775 + L73 2776 + L17 2777 + L883 2778 + L62 2779 + R69 2780 + R119 2781 + R74 2782 + L17 2783 + L83 2784 + L381 2785 + R25 2786 + L44 2787 + L80 2788 + L92 2789 + R64 2790 + R949 2791 + L871 2792 + L827 2793 + R57 2794 + L197 2795 + L4 2796 + L2 2797 + R88 2798 + R59 2799 + R788 2800 + L37 2801 + L95 2802 + R38 2803 + R27 2804 + R35 2805 + R23 2806 + L17 2807 + R194 2808 + L69 2809 + L71 2810 + R26 2811 + R83 2812 + R31 2813 + R18 2814 + R39 2815 + L57 2816 + L65 2817 + R89 2818 + R133 2819 + L57 2820 + R98 2821 + L644 2822 + L50 2823 + R980 2824 + R85 2825 + R962 2826 + L34 2827 + L61 2828 + R77 2829 + R339 2830 + R48 2831 + L81 2832 + L58 2833 + L780 2834 + R19 2835 + R48 2836 + R52 2837 + L240 2838 + R82 2839 + R658 2840 + R28 2841 + R39 2842 + R88 2843 + R45 2844 + R8 2845 + L79 2846 + R21 2847 + L50 2848 + R82 2849 + L82 2850 + R710 2851 + R87 2852 + L397 2853 + R430 2854 + L30 2855 + R44 2856 + L31 2857 + R96 2858 + L27 2859 + R18 2860 + L94 2861 + L676 2862 + L116 2863 + R61 2864 + R50 2865 + L68 2866 + R43 2867 + L1 2868 + L99 2869 + R783 2870 + R209 2871 + L39 2872 + L46 2873 + R36 2874 + L54 2875 + R211 2876 + L46 2877 + L395 2878 + R17 2879 + R393 2880 + L36 2881 + L633 2882 + L29 2883 + R43 2884 + L75 2885 + L939 2886 + L59 2887 + L74 2888 + R148 2889 + L26 2890 + R11 2891 + L45 2892 + L98 2893 + L87 2894 + R18 2895 + R12 2896 + R13 2897 + R87 2898 + L83 2899 + R83 2900 + R49 2901 + L49 2902 + L46 2903 + L24 2904 + L21 2905 + L32 2906 + R90 2907 + R33 2908 + R85 2909 + L85 2910 + R23 2911 + R77 2912 + L34 2913 + L66 2914 + L85 2915 + L15 2916 + R3 2917 + L3 2918 + L454 2919 + R579 2920 + L78 2921 + L47 2922 + R50 2923 + L32 2924 + L18 2925 + R39 2926 + R91 2927 + L40 2928 + R10 2929 + R84 2930 + L35 2931 + R751 2932 + R67 2933 + R64 2934 + L31 2935 + R8 2936 + R8 2937 + L83 2938 + L33 2939 + L50 2940 + L50 2941 + R64 2942 + R36 2943 + R71 2944 + L70 2945 + R56 2946 + R43 2947 + L23 2948 + R523 2949 + L295 2950 + L457 2951 + R52 2952 + R4 2953 + R47 2954 + L51 2955 + R35 2956 + R98 2957 + R87 2958 + R80 2959 + R24 2960 + R50 2961 + L39 2962 + L9 2963 + L71 2964 + R45 2965 + R10 2966 + L24 2967 + L986 2968 + R373 2969 + R99 2970 + L472 2971 + L26 2972 + R26 2973 + L1 2974 + R85 2975 + R22 2976 + L6 2977 + L35 2978 + L65 2979 + L37 2980 + L99 2981 + L664 2982 + R56 2983 + R64 2984 + L20 2985 + L1 2986 + L65 2987 + R68 2988 + L2 2989 + L558 2990 + L42 2991 + L87 2992 + R887 2993 + L18 2994 + R92 2995 + R26 2996 + L24 2997 + L43 2998 + L50 2999 + L29 3000 + R446 3001 + R539 3002 + R61 3003 + L947 3004 + R829 3005 + L806 3006 + L76 3007 + R830 3008 + L91 3009 + R34 3010 + L77 3011 + R86 3012 + L94 3013 + R12 3014 + L446 3015 + L77 3016 + L533 3017 + L39 3018 + R92 3019 + L7 3020 + L74 3021 + R68 3022 + R116 3023 + R88 3024 + L88 3025 + L31 3026 + L20 3027 + R83 3028 + L32 3029 + L71 3030 + R784 3031 + L13 3032 + L9 3033 + L304 3034 + L87 3035 + R665 3036 + L53 3037 + L12 3038 + L76 3039 + L87 3040 + R125 3041 + R33 3042 + L772 3043 + R77 3044 + L89 3045 + L11 3046 + L70 3047 + L30 3048 + R26 3049 + L965 3050 + R39 3051 + R153 3052 + R47 3053 + R648 3054 + R52 3055 + R108 3056 + L71 3057 + R63 3058 + L17 3059 + R17 3060 + L63 3061 + L74 3062 + L16 3063 + R21 3064 + L68 3065 + L93 3066 + L46 3067 + R539 3068 + R60 3069 + R269 3070 + L84 3071 + R37 3072 + L287 3073 + L83 3074 + L31 3075 + R4 3076 + L85 3077 + L82 3078 + R84 3079 + L28 3080 + R136 3081 + R90 3082 + L86 3083 + L945 3084 + R28 3085 + R49 3086 + R79 3087 + R142 3088 + R831 3089 + R24 3090 + L491 3091 + L42 3092 + R1 3093 + L52 3094 + R68 3095 + L2 3096 + R96 3097 + R69 3098 + R28 3099 + L544 3100 + R323 3101 + L76 3102 + L74 3103 + R74 3104 + L76 3105 + R154 3106 + L78 3107 + R2 3108 + L981 3109 + L21 3110 + R46 3111 + R91 3112 + L37 3113 + L92 3114 + R92 3115 + R76 3116 + R88 3117 + L64 3118 + R56 3119 + L82 3120 + L674 3121 + R63 3122 + R87 3123 + R50 3124 + L65 3125 + L8 3126 + L47 3127 + L587 3128 + R11 3129 + L4 3130 + R80 3131 + L80 3132 + R391 3133 + R888 3134 + R23 3135 + R19 3136 + L370 3137 + L760 3138 + L491 3139 + L873 3140 + L72 3141 + L89 3142 + R34 3143 + R23 3144 + R70 3145 + R943 3146 + L36 3147 + R42 3148 + L27 3149 + L62 3150 + L78 3151 + L26 3152 + L11 3153 + L538 3154 + R534 3155 + L34 3156 + L282 3157 + R30 3158 + R33 3159 + L77 3160 + R96 3161 + L853 3162 + L80 3163 + R8 3164 + R37 3165 + L40 3166 + L30 3167 + L142 3168 + L701 3169 + L58 3170 + R53 3171 + L94 3172 + R73 3173 + R127 3174 + R42 3175 + L42 3176 + R329 3177 + L516 3178 + L76 3179 + L154 3180 + R930 3181 + L97 3182 + L16 3183 + L63 3184 + R28 3185 + L365 3186 + R796 3187 + L96 3188 + L81 3189 + R92 3190 + R8 3191 + L1 3192 + L86 3193 + R254 3194 + R51 3195 + R63 3196 + L71 3197 + R54 3198 + L54 3199 + L16 3200 + L107 3201 + L406 3202 + R80 3203 + L71 3204 + R579 3205 + R24 3206 + R188 3207 + R69 3208 + L69 3209 + L92 3210 + R92 3211 + R328 3212 + R72 3213 + L70 3214 + R35 3215 + L43 3216 + L282 3217 + R425 3218 + L7 3219 + L69 3220 + R99 3221 + L36 3222 + R82 3223 + R65 3224 + L488 3225 + L80 3226 + L1 3227 + R63 3228 + R7 3229 + L51 3230 + R651 3231 + L25 3232 + R402 3233 + R23 3234 + L18 3235 + R77 3236 + R41 3237 + R15 3238 + L7 3239 + L632 3240 + R94 3241 + R12 3242 + R18 3243 + R89 3244 + R58 3245 + L595 3246 + L70 3247 + L15 3248 + R86 3249 + L2 3250 + L61 3251 + L190 3252 + R358 3253 + L45 3254 + R75 3255 + L88 3256 + L24 3257 + L76 3258 + L89 3259 + L85 3260 + R72 3261 + L98 3262 + L82 3263 + L89 3264 + L29 3265 + R62 3266 + L42 3267 + R84 3268 + L184 3269 + R1 3270 + R87 3271 + R92 3272 + R261 3273 + R87 3274 + R52 3275 + L44 3276 + R28 3277 + L97 3278 + R80 3279 + L967 3280 + R98 3281 + R18 3282 + R88 3283 + L69 3284 + L87 3285 + R918 3286 + R1 3287 + R33 3288 + R50 3289 + L13 3290 + R21 3291 + L55 3292 + L3 3293 + L390 3294 + R90 3295 + L70 3296 + L95 3297 + L35 3298 + L64 3299 + R64 3300 + L86 3301 + R16 3302 + L73 3303 + L57 3304 + L12 3305 + R12 3306 + R693 3307 + L16 3308 + L82 3309 + L99 3310 + L18 3311 + R779 3312 + R22 3313 + L453 3314 + L14 3315 + L12 3316 + L43 3317 + L257 3318 + R30 3319 + R52 3320 + L82 3321 + R2 3322 + R74 3323 + L92 3324 + R592 3325 + L76 3326 + L80 3327 + R80 3328 + R40 3329 + R60 3330 + L56 3331 + R24 3332 + L86 3333 + L607 3334 + R25 3335 + L56 3336 + R56 3337 + L84 3338 + L52 3339 + L40 3340 + L24 3341 + R51 3342 + R49 3343 + R58 3344 + R94 3345 + R84 3346 + L474 3347 + R57 3348 + L19 3349 + L55 3350 + R921 3351 + L366 3352 + R88 3353 + R5 3354 + R7 3355 + L419 3356 + R23 3357 + R78 3358 + L82 3359 + R81 3360 + R15 3361 + R78 3362 + L74 3363 + L29 3364 + R29 3365 + R35 3366 + L72 3367 + L63 3368 + L378 3369 + L95 3370 + L27 3371 + R69 3372 + R78 3373 + R29 3374 + L58 3375 + L41 3376 + R23 3377 + L265 3378 + L276 3379 + L59 3380 + L41 3381 + L859 3382 + R16 3383 + L97 3384 + L84 3385 + L64 3386 + L78 3387 + R71 3388 + L41 3389 + R55 3390 + R52 3391 + L41 3392 + R90 3393 + R15 3394 + R12 3395 + R22 3396 + L28 3397 + R17 3398 + R75 3399 + R8 3400 + R61 3401 + R47 3402 + R28 3403 + L36 3404 + R89 3405 + R5 3406 + R6 3407 + R79 3408 + L879 3409 + L91 3410 + R62 3411 + L68 3412 + R49 3413 + R45 3414 + L92 3415 + R15 3416 + R58 3417 + L31 3418 + R53 3419 + L45 3420 + R3 3421 + L789 3422 + L9 3423 + L70 3424 + L978 3425 + R5 3426 + L9 3427 + R75 3428 + L77 3429 + R9 3430 + L76 3431 + R87 3432 + L55 3433 + L29 3434 + R358 3435 + L287 3436 + L47 3437 + L27 3438 + R61 3439 + R36 3440 + R478 3441 + L53 3442 + R62 3443 + L54 3444 + L69 3445 + R61 3446 + R53 3447 + R79 3448 + R42 3449 + R46 3450 + L81 3451 + R73 3452 + R27 3453 + L2 3454 + R2 3455 + R69 3456 + L77 3457 + R7 3458 + L73 3459 + R81 3460 + L807 3461 + L8 3462 + R61 3463 + L64 3464 + R11 3465 + L43 3466 + R99 3467 + L56 3468 + L97 3469 + L95 3470 + R92 3471 + R45 3472 + R55 3473 + R84 3474 + R47 3475 + L597 3476 + R66 3477 + L86 3478 + R786 3479 + R12 3480 + R35 3481 + L47 3482 + R59 3483 + L559 3484 + L66 3485 + R19 3486 + L87 3487 + L91 3488 + L275 3489 + L86 3490 + R99 3491 + R902 3492 + L515 3493 + L44 3494 + R314 3495 + L71 3496 + R80 3497 + L231 3498 + L46 3499 + R675 3500 + R23 3501 + L67 3502 + R167 3503 + R123 3504 + L49 3505 + L268 3506 + L410 3507 + R605 3508 + L75 3509 + R43 3510 + R43 3511 + R68 3512 + R20 3513 + L596 3514 + R96 3515 + L53 3516 + R92 3517 + R65 3518 + L4 3519 + R12 3520 + L97 3521 + R85 3522 + L49 3523 + L4 3524 + L947 3525 + L83 3526 + R386 3527 + L83 3528 + R53 3529 + L94 3530 + L151 3531 + R40 3532 + L71 3533 + R47 3534 + R56 3535 + R89 3536 + R11 3537 + L54 3538 + R88 3539 + R66 3540 + R816 3541 + L816 3542 + R7 3543 + L903 3544 + L44 3545 + L60 3546 + R16 3547 + R84 3548 + L23 3549 + R23 3550 + R78 3551 + L574 3552 + L4 3553 + R31 3554 + L62 3555 + L69 3556 + L64 3557 + L97 3558 + L32 3559 + R93 3560 + R22 3561 + L22 3562 + L9 3563 + R870 3564 + R56 3565 + L102 3566 + R85 3567 + L23 3568 + R75 3569 + R221 3570 + R2 3571 + R75 3572 + R146 3573 + R6 3574 + R3 3575 + L5 3576 + R13 3577 + L94 3578 + L51 3579 + L68 3580 + R34 3581 + R46 3582 + L80 3583 + L43 3584 + R43 3585 + R88 3586 + R96 3587 + R74 3588 + L9 3589 + R2 3590 + L218 3591 + R467 3592 + R44 3593 + R36 3594 + R620 3595 + L16 3596 + L50 3597 + L34 3598 + L209 3599 + R9 3600 + R40 3601 + L40 3602 + R817 3603 + L64 3604 + L53 3605 + R659 3606 + L429 3607 + R22 3608 + L33 3609 + R98 3610 + R4 3611 + R36 3612 + R66 3613 + L723 3614 + R83 3615 + R781 3616 + R494 3617 + R91 3618 + R51 3619 + R61 3620 + R86 3621 + R11 3622 + L968 3623 + R3 3624 + R707 3625 + R39 3626 + L39 3627 + L69 3628 + R11 3629 + R85 3630 + R41 3631 + R75 3632 + L89 3633 + R55 3634 + R36 3635 + R83 3636 + L28 3637 + L45 3638 + L55 3639 + L66 3640 + R66 3641 + R12 3642 + L72 3643 + L66 3644 + R13 3645 + L787 3646 + L586 3647 + R1 3648 + R85 3649 + R53 3650 + L996 3651 + R237 3652 + L194 3653 + L90 3654 + L53 3655 + R37 3656 + L438 3657 + R33 3658 + R911 3659 + L94 3660 + R173 3661 + L39 3662 + R84 3663 + L24 3664 + L16 3665 + L84 3666 + L534 3667 + R4 3668 + L70 3669 + L81 3670 + L37 3671 + L30 3672 + R355 3673 + R93 3674 + L21 3675 + R75 3676 + L97 3677 + L27 3678 + L30 3679 + L58 3680 + L96 3681 + R54 3682 + R41 3683 + L734 3684 + R42 3685 + L49 3686 + L53 3687 + L72 3688 + L43 3689 + L32 3690 + R97 3691 + L497 3692 + R21 3693 + R6 3694 + L857 3695 + R569 3696 + L684 3697 + L64 3698 + L896 3699 + L95 3700 + R33 3701 + L77 3702 + R44 3703 + R84 3704 + R38 3705 + R78 3706 + R67 3707 + R33 3708 + R81 3709 + R19 3710 + L364 3711 + R81 3712 + R39 3713 + L56 3714 + L88 3715 + L936 3716 + R734 3717 + L43 3718 + L67 3719 + L675 3720 + L25 3721 + L68 3722 + R53 3723 + L4 3724 + R41 3725 + L22 3726 + L15 3727 + L46 3728 + L15 3729 + R19 3730 + L43 3731 + R56 3732 + R19 3733 + L28 3734 + R553 3735 + L68 3736 + L819 3737 + L50 3738 + L663 3739 + L82 3740 + L58 3741 + R40 3742 + R53 3743 + L24 3744 + L29 3745 + R53 3746 + L53 3747 + L542 3748 + R42 3749 + L76 3750 + R76 3751 + L833 3752 + L82 3753 + L85 3754 + L49 3755 + L851 3756 + L64 3757 + L69 3758 + L67 3759 + R21 3760 + R68 3761 + R21 3762 + R713 3763 + L23 3764 + L56 3765 + L44 3766 + R233 3767 + L54 3768 + L79 3769 + L55 3770 + R83 3771 + R65 3772 + L84 3773 + L37 3774 + L396 3775 + R324 3776 + R77 3777 + L77 3778 + L855 3779 + R9 3780 + L44 3781 + R90 3782 + R73 3783 + L254 3784 + R81 3785 + R80 3786 + L63 3787 + L264 3788 + R71 3789 + R63 3790 + R13 3791 + L86 3792 + R34 3793 + R52 3794 + R20 3795 + R90 3796 + L462 3797 + R561 3798 + L609 3799 + R12 3800 + L57 3801 + L55 3802 + R92 3803 + L61 3804 + R69 3805 + R6 3806 + L6 3807 + L18 3808 + L82 3809 + R23 3810 + R73 3811 + R78 3812 + L74 3813 + R99 3814 + L30 3815 + R88 3816 + L38 3817 + L19 3818 + R1 3819 + R82 3820 + R54 3821 + L737 3822 + R26 3823 + R74 3824 + R92 3825 + R21 3826 + R87 3827 + R5 3828 + L11 3829 + R31 3830 + R875 3831 + L72 3832 + L28 3833 + L11 3834 + L50 3835 + R61 3836 + L166 3837 + R306 3838 + L165 3839 + L69 3840 + L59 3841 + L257 3842 + L182 3843 + L81 3844 + R73 3845 + L54 3846 + R8 3847 + L1 3848 + R21 3849 + L23 3850 + L22 3851 + R71 3852 + R14 3853 + L14 3854 + R9 3855 + L95 3856 + R86 3857 + R65 3858 + R92 3859 + R49 3860 + L48 3861 + L158 3862 + L37 3863 + L63 3864 + L78 3865 + R18 3866 + L940 3867 + L36 3868 + R8 3869 + L72 3870 + L742 3871 + L5 3872 + R990 3873 + R251 3874 + R42 3875 + L30 3876 + L31 3877 + R25 3878 + L32 3879 + L468 3880 + R97 3881 + L23 3882 + L265 3883 + L778 3884 + L52 3885 + L29 3886 + R50 3887 + R8 3888 + R92 3889 + L793 3890 + L4 3891 + L3 3892 + L63 3893 + L30 3894 + L34 3895 + L73 3896 + L58 3897 + L642 3898 + R83 3899 + L62 3900 + R59 3901 + R15 3902 + R5 3903 + R67 3904 + L67 3905 + R55 3906 + R45 3907 + L99 3908 + R46 3909 + L747 3910 + R620 3911 + L20 3912 + L94 3913 + L9 3914 + L797 3915 + R105 3916 + R64 3917 + L69 3918 + R354 3919 + R63 3920 + R84 3921 + R11 3922 + R85 3923 + R99 3924 + L42 3925 + L54 3926 + L47 3927 + L578 3928 + L475 3929 + R21 3930 + L35 3931 + R96 3932 + R85 3933 + L69 3934 + L48 3935 + L40 3936 + R90 3937 + R40 3938 + R254 3939 + R531 3940 + L446 3941 + R960 3942 + R90 3943 + R67 3944 + R839 3945 + R65 3946 + R25 3947 + L68 3948 + L557 3949 + R34 3950 + R936 3951 + L68 3952 + R81 3953 + R96 3954 + L79 3955 + L20 3956 + L80 3957 + R511 3958 + R89 3959 + L84 3960 + R83 3961 + L95 3962 + L10 3963 + R93 3964 + R713 3965 + L9 3966 + R74 3967 + L81 3968 + R716 3969 + L35 3970 + L965 3971 + L66 3972 + R66 3973 + R786 3974 + R14 3975 + R76 3976 + L51 3977 + L25 3978 + R85 3979 + R79 3980 + L64 3981 + R88 3982 + L788 3983 + L78 3984 + R1 3985 + L74 3986 + L549 3987 + L643 3988 + R43 3989 + R42 3990 + L42 3991 + L34 3992 + R34 3993 + L147 3994 + L53 3995 + R3 3996 + R934 3997 + L97 3998 + L740 3999 + L33 4000 + R33 4001 + R30 4002 + L430 4003 + R189 4004 + R3 4005 + R29 4006 + R79 4007 + L609 4008 + L11 4009 + R730 4010 + R290 4011 + L4 4012 + L72 4013 + L28 4014 + R53 4015 + R51 4016 + L64 4017 + L88 4018 + R80 4019 + R72 4020 + L50 4021 + L65 4022 + R81 4023 + L8 4024 + R344 4025 + L2 4026 + R92 4027 + R8 4028 + L562 4029 + R62 4030 + R724 4031 + L65 4032 + R31 4033 + R66 4034 + R58 4035 + L23 4036 + R69 4037 + L147 4038 + L513 4039 + L30 4040 + R39 4041 + R51 4042 + R40 4043 + L997 4044 + R64 4045 + R65 4046 + R68 4047 + R42 4048 + R89 4049 + R32 4050 + R85 4051 + R52 4052 + R90 4053 + L86 4054 + L26 4055 + R356 4056 + L7 4057 + L266 4058 + R17 4059 + L47 4060 + L54 4061 + L26 4062 + R83 4063 + L34 4064 + L95 4065 + R2 4066 + L42 4067 + R75 4068 + R462 4069 + L302 4070 + R67 4071 + R33 4072 + R33 4073 + R8 4074 + R603 4075 + L44 4076 + R51 4077 + R1 4078 + R14 4079 + L966 4080 + L50 4081 + L39 4082 + L11 4083 + R361 4084 + R99 4085 + L288 4086 + L35 4087 + R63 4088 + L30 4089 + L20 4090 + L846 4091 + R747 4092 + L14 4093 + R153 4094 + L64 4095 + R59 4096 + R115 4097 + R46 4098 + R38 4099 + L30 4100 + L88 4101 + R102 4102 + L520 4103 + L48 4104 + R3 4105 + R497 4106 + R93 4107 + L510 4108 + R70 4109 + L52 4110 + R86 4111 + R13 4112 + R43 4113 + R39 4114 + R73 4115 + L623 4116 + R40 4117 + R19 4118 + R11 4119 + L96 4120 + R794 4121 + R188 4122 + L46 4123 + L64 4124 + L87 4125 + R253 4126 + R26 4127 + L70 4128 + R66 4129 + L98 4130 + R24 4131 + L92 4132 + R45 4133 + L73 4134 + L15 4135 + L75 4136 + R44 4137 + L726 4138 + L78 4139 + R1 4140 + R215 4141 + R162 4142 + R71 4143 + L10 4144 + R39 4145 + L65 4146 + L2 4147 + L77 4148 + R90 4149 + L46 4150 + L88 4151 + L9 4152 + R481 4153 + R41 4154 + L25 4155 + R41 4156 + L40 4157 + R99 4158 + L98 4159 + L12 4160 + L66 4161 + R22 4162 + L58 4163 + L88 4164 + R13 4165 + L28 4166 + L103 4167 + R245 4168 + R96 4169 + R65 4170 + R1 4171 + R18 4172 + R85 4173 + L19 4174 + R27 4175 + L34 4176 + L940 4177 + L877 4178 + R51 4179 + L67 4180 + L597 4181 + R58 4182 + L99 4183 + L92 4184 + L601 4185 + R569 4186 + L71 4187 + R767 4188 + L12 4189 + R554 4190 + R27 4191 + R81 4192 + R83 4193 + R59 4194 + L26 4195 + L93 4196 + L52 4197 + R33 4198 + L21 4199 + L662 4200 + L93 4201 + L45 4202 + L77 4203 + R970 4204 + L30 4205 + L63 4206 + R843 4207 + R68 4208 + L11 4209 + R246 4210 + L25 4211 + L90 4212 + L31 4213 + L8 4214 + L718 4215 + R26 4216 + L860 4217 + L22 4218 + R93 4219 + R50 4220 + R39 4221 + L392 4222 + R14 4223 + L87 4224 + R1 4225 + R50 4226 + L86 4227 + L48 4228 + L52 4229 + R77 4230 + R23 4231 + R58 4232 + R42 4233 + R745 4234 + L20 4235 + L25 4236 + R55 4237 + R19 4238 + L12 4239 + R8 4240 + L18 4241 + R28 4242 + L80 4243 + L78 4244 + L81 4245 + R59 4246 + R65 4247 + L82 4248 + L83 4249 + L32 4250 + L31 4251 + L29 4252 + R86 4253 + L94 4254 + R6 4255 + L4 4256 + L80 4257 + R78 4258 + R38 4259 + L96 4260 + R658 4261 + R92 4262 + R308 4263 + R97 4264 + R203 4265 + R30 4266 + R170 4267 + R194 4268 + R60 4269 + L134 4270 + L86 4271 + L21 4272 + R87 4273 + R17 4274 + L57 4275 + L40 4276 + R21 4277 + L24 4278 + R83 4279 + R718 4280 + L52 4281 + R275 4282 + L694 4283 + L86 4284 + R51 4285 + R88 4286 + L9 4287 + R9 4288 + L80 4289 + L20 4290 + R682 4291 + R18 4292 + R236 4293 + L94 4294 + L42 4295 + R82 4296 + R18 4297 + L41 4298 + R41 4299 + L51 4300 + L24 4301 + L25 4302 + R67 4303 + L190 4304 + L31 4305 + R79 4306 + L32 4307 + L93 4308 + R16 4309 + R19 4310 + L135 4311 + L60 4312 + L240 4313 + L102 4314 + R828 4315 + R566 4316 + L36 4317 + L656 4318 + R11 4319 + L62 4320 + R94 4321 + R64 4322 + L21 4323 + R44 4324 + R67 4325 + L97 4326 + L658 4327 + L11 4328 + L162 4329 + L69 4330 + L557 4331 + L30 4332 + L57 4333 + R483 4334 + R605 4335 + L44 4336 + R22 4337 + L622 4338 + L686 4339 + L14 4340 + R97 4341 + L60 4342 + L53 4343 + L52 4344 + R974 4345 + L78 4346 + L680 4347 + L48 4348 + L31 4349 + R731 4350 + L12 4351 + L50 4352 + R62 4353 + R55 4354 + L31 4355 + L99 4356 + L732 4357 + L37 4358 + R616 4359 + R17 4360 + R28 4361 + R53 4362 + L56 4363 + R7 4364 + L13 4365 + R53 4366 + L61 4367 + L29 4368 + L47 4369 + R76 4370 + R55 4371 + L39 4372 + R90 4373 + R81 4374 + L4 4375 + L452 4376 + R18 4377 + L49 4378 + L996 4379 + R94 4380 + R216 4381 + L924 4382 + L90 4383 + L65 4384 + L191 4385 + L7 4386 + L90 4387 + L47 4388 + R23 4389 + R77 4390 + L204 4391 + R69 4392 + L65 4393 + L89 4394 + L54 4395 + R1 4396 + R42 4397 + L66 4398 + R79 4399 + R87 4400 + R705 4401 + R765 4402 + L70 4403 + R62 4404 + L32 4405 + L80 4406 + R91 4407 + R44 4408 + L18 4409 + L176 4410 + R72 4411 + L7 4412 + L48 4413 + R47 4414 + L74 4415 + L34 4416 + R92 4417 + R61 4418 + R96 4419 + L79 4420 + R43 4421 + L73 4422 + R31 4423 + L59 4424 + L28 4425 + R88 4426 + L55 4427 + R51 4428 + R15 4429 + R31 4430 + L5 4431 + L19 4432 + R34 4433 + R29 4434 + L92 4435 + R82 4436 + L90 4437 + L19 4438 + L71 4439 + R12 4440 + L45 4441 + L77 4442 + L65 4443 + R65 4444 + R37 4445 + R33 4446 + L81 4447 + R46 4448 + R38 4449 + L92 4450 + R34 4451 + L26 4452 + L89 4453 + L24 4454 + R22 4455 + R62 4456 + R3 4457 + R94 4458 + R88 4459 + L14 4460 + L14 4461 + R40 4462 + R27 4463 + L35 4464 + L47 4465 + L24 4466 + R3 4467 + L32 4468 + R33 4469 + R4 4470 + L33 4471 + R49 4472 + L47 4473 + R31 4474 + R43 4475 + R11 4476 + L12 4477 + L18 4478 + R15 4479 + L18 4480 + L22 4481 + L43 4482 + L7 4483 + L8 4484 + R6 4485 + L14 4486 + L46 4487 + R49 4488 + R5 4489 + R32 4490 + R38 4491 + L45 4492 + R22 4493 + L1 4494 + R11 4495 + L22 4496 + R49 4497 + R28 4498 + R41 4499 + R12 4500 + R25 4501 + R3 4502 + R22 4503 + R25 4504 + L26 4505 + R45 4506 + R22 4507 + L43 4508 + R9 4509 + R48 4510 + R1
+10
inputs/day1test.txt
··· 1 + L68 2 + L30 3 + R48 4 + L5 5 + R60 6 + L55 7 + L1 8 + L99 9 + R14 10 + L82
+1
inputs/day2.txt
··· 1 + 1061119-1154492,3-23,5180469-5306947,21571-38630,1054-2693,141-277,2818561476-2818661701,21177468-21246892,40-114,782642-950030,376322779-376410708,9936250-10074071,761705028-761825622,77648376-77727819,2954-10213,49589608-49781516,9797966713-9797988709,4353854-4515174,3794829-3861584,7709002-7854055,7877419320-7877566799,953065-1022091,104188-122245,25-39,125490-144195,931903328-931946237,341512-578341,262197-334859,39518-96428,653264-676258,304-842,167882-252124,11748-19561
+1
inputs/day2test.txt
··· 1 + 11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124
+200
inputs/day3.txt
··· 1 + 5966546654588755548354591946657465889859765969657756889447669666979883895847755487857956955568577855 2 + 4542746645767855433451537445453466457263428353646434434876784556524857444555654342425558296642647865 3 + 5422251221224555623173322266326732412226343722532361271223275221532113734725256725254212236227222221 4 + 2324224426223243523532255245222222132222322212312412227525212622115222222422233212314232235522221282 5 + 3425335254326242335625565223334643464624361863233224152423533244376533232372522332643344363223232343 6 + 3323233325233222363224231232322322233232322313334122322327222324232232121323535223223323423333234333 7 + 2322422254231122221232525212231322423522221222282422162223425222232222652214222222232454212324522222 8 + 4415447714455363455685537565354363676452954665753777666562457835446656284751447993777546734467675755 9 + 1321372222222122333322332123323422222322252223222122222332122222322232125211331223132323222331122332 10 + 2242236323222342222112272221213212334114222323242122132214324232233232222263223222222432432223322122 11 + 8666442549563855473429495687888487174444636934689888567563752469997857776888435384749968858433947468 12 + 2324313232246343222224342234422321245212242423323411424213432222224342232332324232413423243423233121 13 + 2683781715168555587665344823228541542218165425258188531728734552264673257425771487447756633636163149 14 + 1222223226221322222222223222212222322122125422222222324224424422232223225223281322213534227324222222 15 + 5453552445153545644522534554544354555623563556577572237374753435463833254947544334526638415427343432 16 + 3342222252323515234222627222212413112534241272422423223227282252222254242224333544215112522943221225 17 + 7695333726436944223333723215353562935131693232362577267258343264534326334936632133292734373323684433 18 + 3232532232532213351332221323343312123432222223162223263333325232221224213321122397232432943333323223 19 + 2112422344232232513332265243223234713344645443375227325332223332723334345263432322512425374152552325 20 + 2112223322222265325221122221122322344221322222212222623122162212222222622273252415212543236224282226 21 + 3522223324214143232445522222552232222425242341322325223221441354225135322232144422223312633322314451 22 + 3553546964645433646854444545654684586664444554557344656544674454866542455564244724584635864456553552 23 + 2712132121124212228421333223222232222222232124122134222312221222233132212432223222423223222142222242 24 + 5243944565445115245394423332345325453227656933441445744435386341486555446252345552545553153155414455 25 + 5772447636633536424366261954729934453835645363432553634652753366355883885321733333657475668366474567 26 + 2232222423224213542322311322117222322242124212222212222222224222221311222411142122222233222241221222 27 + 2172222222222212172122543112232222222221222222244522122321235322221222223222222222222222215222232332 28 + 3232253411243335242423333323332232433322544313233221242223512322333233223626228323312243113212231323 29 + 4354444244443444424444454477434344455432453523444454343422334434444643644422433443243433445424346344 30 + 5654443436244425651246555333445346246614244246522445624445547356466332343845372444136585636453343646 31 + 2261413264273432522132262224336131112623313612262232223531724262612623213426342123442222222261225132 32 + 4373423443864444237444325623423232442462514423354435433543444556446334342465349435334635744411243244 33 + 5422222243422233424421322322425222213133122221222322251421223223211124225122323421322631212321522223 34 + 5963425243163332355331441641433333326335525213433232232231326234615232642432634222826632333323924451 35 + 2324222222132312333321322225434334223323234141273322325342323213653322322335412222326323331363123524 36 + 5333224514863533453264233532582633373331444536362422774345533363335783331322425432393454336733374523 37 + 6664464844646545643544454444254444265353434444542454344566441844433442436253654434566284334643344434 38 + 1124522111242222322227222224224221222327222122221212125252251222222252223323221232224522122222321222 39 + 3333442334343434244343225353423354573442454223433432513444343433243231444354135144434435452344224333 40 + 2262236237137225321226221221236253135467323313327813423513926312252334262272412611566632233361342242 41 + 5392592455444746485543643423688666547355365445734465633539744375937844375476945332576556454437338526 42 + 5332322363334313543655443375335343337333334325233352317335354433136535354333533334332542343322331334 43 + 2628652623641252526739354945246675138456355651565467436384464627556352765562222374242655131322464255 44 + 4252232443221482452342244241632224852342234454453297576353341322331334334324427462226124222634324484 45 + 2343524324251432343246435412256145211311154332123623231522124342233124542142122212433532122132314313 46 + 3121112232232226342222252124122252313222212223221212212112333422222222321222222222214122222324222121 47 + 4545155455423544422347654224443555454345452455344535453555555454463645445339625143555465443335555441 48 + 5232112323357534334442634546523833463236681345253623329255242273527442366224324461232145276286752531 49 + 2222242544156542442622344421254632325542352232224232645322232332516644243263334234224265151224422625 50 + 3232111512134223231412251249322622243314221121242521732332241112222322122253222213225222212223133223 51 + 2137456446344823253847425324457735964736765465454553665529426837274845146672425239823723678622542976 52 + 3232431332441314142343443324323133323333443343343343433343324433333354331423453433543659333221333543 53 + 3792349222426221232328521274527712222212236287629895275222522285952122145272182426478113226763322359 54 + 7232242443222323253213237222232437322224232242342222243173422251162244332422472222162238221422741244 55 + 3866476683744737663346554542536441642942416535726656534356736771635556445574363637258365544336427341 56 + 6989475847166863753683472846257524673255552682346416464575366742647387437723554233365788818885437874 57 + 2321312261931222324262621424212222257228613642222221822242471224242627237377383462243392325323532494 58 + 5526448865492548412356563325695884355822787558444326673637562977684644265493677563655114625574666445 59 + 5161451222522622612543222524225232224124243232224273553261338242221526212222523422253426472261572522 60 + 2234435355325343525422555553333545233523355252232535452333233332545354435452244553547542455323522343 61 + 3323333333433422433342333423532333383333333333332333433324742333234312334333233333332143332333134323 62 + 6274624676266423372423166657524747572423742244422172765691253246455536287625642573414593394834966487 63 + 2492462814355722424462725721442241222555686632111535122622554256225338242262642443624528243355562557 64 + 2222222322222212212224321132322224223222212122212228212217222124222152332222222122222223311233221223 65 + 3323222322223232324213223224224212233422222232222422222223324223623231332222333433325223323222312331 66 + 6843444733422331541526232332253335334454344296626313322444235544444523231322534513484224344543484475 67 + 3322212221222221222222212122522211122223322212248222122272222222352432112212221214423113223222232422 68 + 2954465557768644246662646996625779626629677338557847267476472846655567884645856765775586665366284525 69 + 4144434432182345324664773444643333434322737444536337329324733674332444634343443423531335322454345815 70 + 6337323722422446423612813562356353443433335371325263243235432566633124336463565756725343331423346356 71 + 1321467267713441124514622232756371645651116755716557177213236767653267434122662432455424215765442689 72 + 1352422333742333426333422332143314232133234341322343344334254332332342641423633444522255353235273232 73 + 5666486465666676663165636645468553453634666665636576548584666696678656766576678645665786669576567765 74 + 2233233223333342323221423332323332323533363213224334327233323212423121524433523322323332223432227355 75 + 2332125232123221222222322235232522222324222222222621122532222232341315224223224222223224321321645312 76 + 3433441344344444354461454433313325643331523224462434323465433523434234354333544342233444423344534634 77 + 3243223424221322133322434313123353432232134322334224232212233332223432223221334142224124223124342352 78 + 3321233333533313333343384446574333243333232313443354442362343333333423322453443144333345443232233421 79 + 5143343533454435554332443333343424355444253453433228343324245435433543333333513434535355233233543355 80 + 5493355975555767457451576475466757564945655386654644844364595655467684446534246847763251655467536853 81 + 1422232252222244223314342442214222222212432252222222232142212232211211223312222364443282282422334221 82 + 2422222142221232333321222231222422212422222222223222222322222121172222222122212211231222222222222213 83 + 4232332233445435543544132223432323134222223341333133443534421423232422323332332424452132322324343334 84 + 5333333232555553422337547533354245234652554554545433542552354453343555554315333343544743353447462554 85 + 8223564221936743763777324425733373415526479287562386241766624787522626327237265478331332285223424926 86 + 4641336733527335563784257333348885332443483535372331648749334829374337737534666733378445369363327372 87 + 2537623646443355552263644746464533355345433343357535564354351565545523168233536655546436642352434645 88 + 2152134125311143243351453321232142342155135343143523135515252121341442514331135454354321433512526789 89 + 3223133234721443432311332332323252343332222223222233153232253313347332433333333423232222333223231151 90 + 6572776785737735753946665862896387826755845269998549992857936376966753465489955574499145885395549264 91 + 3141326224334322222322335353443263223322352235242463222246552324423655422152543223252235211334744288 92 + 3452233433334233364225523335333335373442233553332656432633136366326453533353333343322745334533354633 93 + 4453358679558455454455655559433243495345474175545835555345754152535555854455455855355336525874354525 94 + 2112842221322212341241272227521929124282284244723222422218426224222623222222112169257225162226132221 95 + 6354323563231433446256927333437365936353452553234357451134663245626563744445354132664332645425713545 96 + 6442322366534344344123323733265342632232323313935373343333424334233341335335412843344433233244422635 97 + 3225212222124222222422222323121242222142222222222141122322224222244222222132222212223122221132242242 98 + 3568364547563266273735644938534578738465559383615775337332835678843357435868448872838933847745336847 99 + 4565754312212444453434544642553633622423452554362372424752734435485236336275344554436555524244136553 100 + 6436114624354253213444646233634112136433156435465442232252352226442553541464113336226514346645525789 101 + 1423311231234334321123424413141224312412313434222242221322433114341324432221211441424443323334456789 102 + 8552543584793363447722232252568544516923637822434363233257335437727438383533435336322465745452365423 103 + 3363432162212712133312222223241235211324122222143123222222623222222212713521322242233123234351222731 104 + 3323443314443353143332413122124243322242323332233333443346243522242323424233134133343225532344433462 105 + 5354454225434314351546442422332222443456242462336354846647332542333222232421344525245464426323223434 106 + 2152322321342232222421332222224121221212232223222332323522122231234241422112311122412121112242211322 107 + 2227145451222236213322564255646212212222224421222223421124123231621222267241322225221122912222262111 108 + 3546344553226433252323357324365336323524624546454333336735923445345366433787754247453744353353342466 109 + 4266155222212222131222512122232326222252621428124221122222222261222262454111122452231215221233232222 110 + 8462466626545326243532255335417443361226666625556926634465451545654312563666643444245586556644463534 111 + 5235123522251251652235324212242113221157622332255332222512221242221152224251262213225242422126223115 112 + 2542433334352333335225232234333433352123422324243334333552333233335235324452533452133232235722334333 113 + 2433343532225534434332235134334323333531334413242341124332334333442333133432333443653223333343333423 114 + 2222132122233242422242233224232221132422362222221224223241332233554222341122112313135225222122123222 115 + 2313434442451151114122212333221262442222442144223242232243342242432222233434223222423433441232252544 116 + 2324243623121264363332236122243226332331672232522733513222321335342553233235433332153233212624623323 117 + 5635333443333733324334334133322442432413253334354213133334333433343233285345933236327212734353221355 118 + 2222225422242428332142142234222241362412332523331415224112264523322222212452222422424631322314441143 119 + 4475657476878685867484639857645948655788668536475657788484657753555949667865645465763786488978775655 120 + 9848447474667345747435326259288747656536755884544764343644543338453359234332463632566275454636438687 121 + 6432363437755273265623524444533257237334336234321623235433252366433633255655225756312564253446457442 122 + 5546856627678773727172469177764592642687586647529895336678557676388743572936655854414676423547775383 123 + 7162633493716443455872541433245413484313733452444734444443735433449334449544355743436223666644343321 124 + 2572563533546546653354454645455555474464655365344755454455837555674442464654441346646546564663523445 125 + 1224322522324224633241324433731212125512121249343714322251226522232461225334521312243332243623222352 126 + 1352322131221222222232723221222122222232122222223233222222321311234122222122222224222112222223122221 127 + 3252231432252243451335351534337232434323534236222243234234334323432243435242334347434385222134223375 128 + 7443335445434424253427657435264354445443444244432347543425337444525314336543354843158465439435434316 129 + 3222982682222612772861233572624864321221122224223321224722213122286123222313323327132224238422431222 130 + 3583331732927282422534313323233223335233653324539244123233272535833341233333569473249435233422612333 131 + 3222322333222112233233221223222122331223121232131233323333323222221332322222222221213221222212214212 132 + 6353363846364648646668363433543348755462736564266654664453642653554245665434426463444435537354765558 133 + 3423333221233336431243133223632523221433632333342223243323223324343333432132323344332426313344332342 134 + 3223322333221132513222232222362312227222735233422222322233233223222223223223232226225233323223223122 135 + 6553646555554651555648765744544555364165855566558717565344555444356452556585231755555456564479565439 136 + 4243222422224233113222422222112424162122224121242342222322322123212311442223212214322221222322241324 137 + 4233211543232214522345423233436232542235243214452245225123332423232243456321244122322222312122323322 138 + 3345533464734436856864333868255322554635832443937355244434533849338945443344624545452467334964497233 139 + 3173224222412521239312233219224352422712312214135124322721322122127132219242229418225222714223142229 140 + 3162432244234745352223325184245322847342714422522321223235843322224286225632528466615689683136253244 141 + 4235443335446233232464634343733642242443444434214422633443441431321563412352243134322344333553324343 142 + 3823325334231322342312235313542113322854675333642436345333333232531131233232626343323233333533333532 143 + 2236143222222523311264442153341623316366132121222421125234232535222325263212221322122122365172122231 144 + 2434224457335331163122536122434244143142522464253442243472644243571345241145436593432425324332423365 145 + 2393223335343332233333237234333233212345383133223233323323332235323222321372335352133233838233239423 146 + 3322854732234455221443232154445442444225411441433343434243234425445345255152343245414242344253335552 147 + 2232332342424222322222234422361112222222422322252432413233223222242322322211222233222233212312221242 148 + 4563322912162552292222214622227125363121673551222224137354217832622292422242916312432222811222724552 149 + 4635352525532364322423332412333463553534533523434455333433353352542335433533443332234247335523433493 150 + 2294444542133424422422355444452438347432242333213614242435223332422131212345324224323233443833544331 151 + 4174736724576257235447954142252828447241324247253444226752582818365231137562835462123244353224243232 152 + 3242227322323232212623222222222132223113336371123243334233232234212122213313232218725322223224232254 153 + 2133441334322223442352317742724334343433121235333423243331331125224343533332233324231327438334334523 154 + 3221123111122234331232432532132222223232224322322223223221313422232631312444241232222322311123342222 155 + 3272222123233224222312222232222212223352121252232221221223423322212222322122324612222222522232442222 156 + 2311225212524174125221222193462121825412221213612462225273423252722222221272622111324238221191232262 157 + 2237623172221535335987425563349754836432546631871455984471335427235235532464413722536613447344235432 158 + 2262423412535112233123337922362144535322434433123322223249332324323423423333524438823224332544254321 159 + 2222222212222222222322122122222222222232211222231222323122221223222222122222222152112121121122222222 160 + 1323248243324353637234224642171243534222442341434429323432221228446322212322143373243342291216636342 161 + 7987579256589679753389663399597634538395537994734689877374477535869584689979667957875566992768596673 162 + 2652275416222222324126622163122244262281372524225672432226252743252665552521225722236347352467233452 163 + 2212231222223222432225332112224323141232232222223323221213211222222222222422221222222376226122232215 164 + 2224222253352211132221241422371214221343729211422222112223222224123222222122112122422233221132324251 165 + 9344534654223744453425555324553554447523553756365549453243434443352524444554434534342534595552364353 166 + 4322533534436362432354233246542455564333253354335433326656617455342452366323366355535416243634743223 167 + 4676645447577676445654544665577775772363446565564575486544444744446745576456554457544455464445455755 168 + 3322212242324222312533322332313323431323322253323213382253316323222231723232142322223133321222212123 169 + 2572222122232422221792522242122325212232442424222442222221454523341222122231222227322224327122222623 170 + 7334447633626359444442545837435676143333574646264533755445555625464676753765324645434643544454464766 171 + 2322222132232334332233233463313323322322333323334226323333123323233332333333442361223212222322343722 172 + 2242336244446434444435444534143433444374746464444543443433374435345543347444464474344454444473444434 173 + 3123322313262231332225222113322234342221233722212322323414433331233442223262212313373332332224234252 174 + 9352412214242122232222432123422662232322321134242342223323222212232226233212222233121122322222332242 175 + 4736431626714323842651212533433573342355532543222331333554366272447555533135242642244334645355545545 176 + 2472223225223243422342419362233325227851222222225242452223222164223324321552243322112524411453122232 177 + 2252322413521221142342133233231422232424122551252542322222224421121733213592228612333464563262324334 178 + 2523553215362323542323338155821424424443834352254226529566534556453564333642524272924632627535323515 179 + 6554345479377685374765446735558667354545646558567463863444555854579473554268452646777677778774564657 180 + 3232235235333537433236234445553345231333333433332333373152532243352338335343431584424323433351523433 181 + 1521522241532122522222222521222222222342322111233253322221222522322222232221352231233213214122121251 182 + 2444223414441453424247563364834454154582463338424436545334355334254634244444523444344844443264385333 183 + 8484934248686434424347878474937455235484656654643299454444433676573457675578544556428594354533924344 184 + 2264221112146221123225222222222121212222221213116212225222222122222122251132222165224522228222222222 185 + 4335444334342436244432332354332753314422524434765543359335522243353625433234235233622335433186522222 186 + 6774525555567545566345585775465752455561583545555448595552556353555655555455555445653264634545452196 187 + 8767574132734963847872834724176579773753887822475446995355475274834842122652346537485587595572495594 188 + 4221222343422545312522321222431243542321254223245125252435324613262223723223252121232422262256166262 189 + 6334632424242442512232423442441312715342234423462344432423332224422344342234222662314423413134235224 190 + 2323342323322333323213322223333323111273141111113332435424423223533243132332333432233324232333213114 191 + 2346135221242136352126332345432632222325132632265232622213272522321222242252345833222539235313123122 192 + 3383444684433314435473444453291443543434443434868443824343535464233463744433834743433443439814453584 193 + 2352254744214432641473842923244324222273123342344423232423232322344222331834342253932222622235423241 194 + 1332314211242422222221322222322112222222221222323223231422223222313212322314222212123221323323312112 195 + 2232344422342333212212421231222132123222221227224233332232222235222212332452212322232233142534213421 196 + 6445776542465468544242457727683445544443962648646641476446476776636454444646664864745529576337624474 197 + 7722122222234222472214222222212422223812223742415321422228423223331323222242346242622222284222221121 198 + 4531123234334233233248633323343142333332444234332323234434414148453332244343442223152333442433345823 199 + 2221316224345532222214424621334432622232324326226223222222212342223244232513433522145226533232122623 200 + 9454527354735656537472876857246747554763445832354347645346455852255465346827664554778667358636366668
+4
inputs/day3test.txt
··· 1 + 987654321111111 2 + 811111111111119 3 + 234234234234278 4 + 818181911112111
+35
src/day1.zig
··· 1 + const std = @import("std"); 2 + 3 + pub fn run(input: []u8) !void { 4 + var lines = std.mem.tokenizeScalar(u8, input, '\n'); 5 + 6 + var dial: u8 = 50; 7 + var zeroes_p1: u64 = 0; 8 + var zeroes_p2: u64 = 0; 9 + while (lines.next()) |line| { 10 + const direction: i2 = switch (line[0]) { 11 + 'L' => -1, 12 + 'R' => 1, 13 + else => unreachable, 14 + }; 15 + const turns = try std.fmt.parseInt(u16, line[1..], 10); 16 + 17 + const new_rotation: i17 = dial + @as(i17, direction) * turns; 18 + 19 + var zeroes_clicked: u64 = @intCast(@abs(@divTrunc(new_rotation, 100))); 20 + if (dial != 0 and new_rotation <= 0) { 21 + zeroes_clicked += 1; 22 + } 23 + 24 + dial = @intCast(@mod(new_rotation, 100)); 25 + 26 + if (dial == 0) { 27 + zeroes_p1 += 1; 28 + } 29 + 30 + zeroes_p2 += zeroes_clicked; 31 + } 32 + 33 + std.debug.print("Answer P1: {d}\n", .{zeroes_p1}); 34 + std.debug.print("Answer P2: {d}\n", .{zeroes_p2}); 35 + }
+53
src/day2.zig
··· 1 + const std = @import("std"); 2 + 3 + pub fn run(input: []u8) !void { 4 + var ranges = std.mem.tokenizeScalar(u8, std.mem.trimEnd(u8, input, "\n"), ','); 5 + 6 + var answer1: u64 = 0; 7 + var answer2: u64 = 0; 8 + while (ranges.next()) |range_str| { 9 + var range = std.mem.tokenizeScalar(u8, range_str, '-'); 10 + 11 + const low = try std.fmt.parseInt(u64, range.next().?, 10); 12 + const high = try std.fmt.parseInt(u64, range.next().?, 10); 13 + 14 + var buf: [32]u8 = undefined; 15 + for (low..high + 1) |num| { 16 + const num_str = try std.fmt.bufPrint(&buf, "{d}", .{num}); 17 + 18 + const middle = num_str.len / 2; 19 + 20 + if (std.mem.eql(u8, num_str[0..middle], num_str[middle..])) { 21 + answer1 += num; 22 + answer2 += num; 23 + continue; 24 + } 25 + 26 + for (1..middle + 1) |chunk_len| { 27 + const repeating_str = num_str[0..chunk_len]; 28 + 29 + var is_repeating = true; 30 + var i = chunk_len; 31 + while (i + chunk_len <= num_str.len) : (i += chunk_len) { 32 + if (num_str.len % chunk_len != 0) { 33 + is_repeating = false; 34 + break; 35 + } 36 + 37 + if (!std.mem.eql(u8, repeating_str, num_str[i .. i + chunk_len])) { 38 + is_repeating = false; 39 + break; 40 + } 41 + } 42 + 43 + if (is_repeating) { 44 + answer2 += num; 45 + break; 46 + } 47 + } 48 + } 49 + } 50 + 51 + std.debug.print("Answer P1: {d}\n", .{answer1}); 52 + std.debug.print("Answer P2: {d}\n", .{answer2}); 53 + }
+32
src/day3.zig
··· 1 + const std = @import("std"); 2 + 3 + pub fn run(input: []u8) !void { 4 + var lines = std.mem.tokenizeScalar(u8, input, '\n'); 5 + 6 + var answer1: u64 = 0; 7 + var answer2: u64 = 0; 8 + while (lines.next()) |line| { 9 + answer1 += try calculateJoltage(line, 2); 10 + answer2 += try calculateJoltage(line, 12); 11 + } 12 + 13 + std.debug.print("Answer P1: {d}\n", .{answer1}); 14 + std.debug.print("Answer P2: {d}\n", .{answer2}); 15 + } 16 + 17 + fn calculateJoltage(line: []const u8, num_digits: usize) !u64 { 18 + var index: usize = 0; 19 + var value: usize = 0; 20 + var total: usize = 0; 21 + for (0..num_digits) |i| { 22 + const start = if (i == 0) 0 else index + 1; 23 + const end = line.len - (num_digits - i - 1); 24 + 25 + index = std.mem.indexOfMax(u8, line[start..end]) + start; 26 + value = try std.fmt.charToDigit(line[index], 10); 27 + 28 + total += value * std.math.pow(usize, 10, num_digits - i - 1); 29 + } 30 + 31 + return total; 32 + }
+40
src/main.zig
··· 1 + const std = @import("std"); 2 + const day1 = @import("./day1.zig"); 3 + const day2 = @import("./day2.zig"); 4 + const day3 = @import("./day3.zig"); 5 + 6 + pub fn main() !void { 7 + var args = std.process.args(); 8 + _ = args.skip(); 9 + 10 + const day_str = args.next() orelse { 11 + std.debug.print("Needs day arg\n", .{}); 12 + std.process.exit(0); 13 + }; 14 + 15 + const test_str = args.next() orelse ""; 16 + 17 + var gpa: std.heap.GeneralPurposeAllocator(.{}) = .init; 18 + const allocator = gpa.allocator(); 19 + 20 + const day = try std.fmt.parseInt(u4, day_str, 10); 21 + 22 + const input_path = try std.fmt.allocPrint(allocator, "inputs/day{d}{s}.txt", .{ day, test_str }); 23 + defer allocator.free(input_path); 24 + 25 + const input_file = try std.fs.cwd().openFile(input_path, .{}); 26 + defer input_file.close(); 27 + 28 + var buf: [4096]u8 = undefined; 29 + 30 + var reader = input_file.reader(&buf); 31 + const input_content = try reader.interface.allocRemaining(allocator, .unlimited); 32 + defer allocator.free(input_content); 33 + 34 + switch (day) { 35 + 1 => try day1.run(input_content), 36 + 2 => try day2.run(input_content), 37 + 3 => try day3.run(input_content), 38 + else => {}, 39 + } 40 + }