From 5b03234008de1a9b2aca220b00caaf60b42316ae Mon Sep 17 00:00:00 2001 From: Grant Horner Date: Fri, 5 Dec 2025 21:46:55 -0500 Subject: [PATCH] finish day 1 --- day1/day1.odin | 106 ++ day1/input.txt | 4659 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 4765 insertions(+) create mode 100644 day1/day1.odin create mode 100644 day1/input.txt diff --git a/day1/day1.odin b/day1/day1.odin new file mode 100644 index 0000000..a39bc38 --- /dev/null +++ b/day1/day1.odin @@ -0,0 +1,106 @@ +package day1 + +import "core:strings" +import "core:testing" +import strconv "core:strconv" +import os "core:os" + +sample :: `L68 +L30 +R48 +L5 +R60 +L55 +L1 +L99 +R14 +L82` + +solve_first :: proc(s: string) -> uint { + s := s + pointing_at_zero: uint + current_dial := 50 + for line in strings.split_lines_iterator(&s) { + if line == "" do continue + value, _ := strconv.parse_int(line[1:]) + if line[0] == 'L' { + current_dial -= value + } else { + current_dial += value + } + + + for current_dial < 0 { + current_dial += 100 + } + for current_dial >= 100 { + current_dial -= 100 + } + + if current_dial == 0 { + pointing_at_zero += 1 + } + } + return pointing_at_zero +} + +solve_second :: proc(s: string) -> uint { + s := s + pointing_at_zero: uint + current_dial := 50 + for line in strings.split_lines_iterator(&s) { + if line == "" do continue + value, _ := strconv.parse_int(line[1:]) + for value >= 100 { + value -= 100 + pointing_at_zero += 1 + } + if line[0] == 'L' { + current_dial -= value + } else { + current_dial += value + } + + for current_dial < 0 { + current_dial += 100 + pointing_at_zero += 1 + } + for current_dial > 100 { + current_dial -= 100 + pointing_at_zero += 1 + } + + if current_dial == 0 { + pointing_at_zero += 1 + } + } + return pointing_at_zero +} + +@(test) +solve_first_sample :: proc(t: ^testing.T) { + pointing_at_zero := solve_first(sample) + testing.expect_value(t, pointing_at_zero, 3) +} + +@(test) +solve_first_input :: proc(t: ^testing.T) { + contents, _ := os.read_entire_file("day1/input.txt") + defer delete(contents) + pointing_at_zero := solve_first(string(contents)) + testing.expect_value(t, pointing_at_zero, 1158) +} + +@(test) +solve_second_sample :: proc(t: ^testing.T) { + pointing_at_zero := solve_second(sample) + testing.expect_value(t, pointing_at_zero, 6) +} + +@(test) +solve_second_input :: proc(t: ^testing.T) { + contents, _ := os.read_entire_file("day1/input.txt") + defer delete(contents) + pointing_at_zero := solve_second(string(contents)) + testing.expect_value(t, pointing_at_zero, 6860) +} \ No newline at end of file diff --git a/day1/input.txt b/day1/input.txt new file mode 100644 index 0000000..fea1fb8 --- /dev/null +++ b/day1/input.txt @@ -0,0 +1,4659 @@ +R19 +L18 +L17 +R21 +R8 +L23 +L42 +L37 +R21 +L9 +L14 +R38 +R10 +R19 +R27 +L47 +L13 +L3 +L45 +L13 +L43 +L31 +R15 +R17 +R11 +R50 +R10 +L23 +R7 +R2 +R49 +R23 +L8 +R11 +L44 +R19 +R18 +R14 +R41 +L3 +R6 +R42 +L47 +L6 +L20 +R13 +R10 +R45 +L1 +L9 +R47 +R10 +R28 +R22 +R93 +L10 +R75 +L65 +L64 +L97 +R24 +R22 +L85 +L18 +L65 +L17 +L53 +L79 +R55 +R85 +L8 +L9 +R95 +R14 +L41 +R41 +R62 +L37 +R15 +L17 +L60 +R77 +R60 +L36 +R36 +L32 +R32 +L45 +L55 +R23 +L62 +R39 +R64 +L57 +L7 +R60 +L89 +L70 +L89 +R72 +L84 +R48 +L866 +L15 +R877 +R56 +R94 +R40 +L23 +R54 +R35 +L321 +R21 +L32 +R872 +R56 +R50 +L340 +L6 +R44 +L44 +L67 +R94 +L95 +R68 +R32 +L32 +L57 +L99 +R7 +L589 +R81 +R957 +R67 +R31 +R683 +R19 +R12 +L14 +R2 +L80 +R502 +L88 +R15 +L10 +L739 +L4 +L66 +L24 +L42 +R45 +L88 +L75 +R491 +L48 +R11 +R14 +L14 +R81 +L81 +R63 +R37 +R8 +L47 +R39 +R73 +L73 +R947 +R973 +R42 +L75 +R13 +L207 +L45 +L59 +R11 +R42 +L42 +R15 +L615 +L32 +L151 +L86 +L42 +L2 +R77 +L64 +R87 +R13 +R189 +L89 +R22 +R90 +R88 +R56 +R91 +R53 +R71 +L71 +R68 +L16 +R42 +R6 +L70 +L30 +R17 +L89 +R59 +R13 +L14 +R14 +L87 +R573 +L386 +R9 +L32 +L2 +R46 +L1 +L35 +L46 +R61 +R91 +R3 +L64 +L30 +L76 +R999 +R17 +R86 +R62 +R71 +R471 +R5 +R65 +R76 +L76 +L91 +L9 +L86 +L94 +L75 +R55 +R93 +L24 +L89 +L80 +L86 +L14 +R86 +L86 +L19 +R32 +R87 +L738 +L62 +L44 +L750 +L6 +L98 +R366 +R65 +R67 +R86 +R514 +R164 +R20 +R46 +L60 +R30 +L62 +R62 +R55 +R45 +R84 +L86 +L99 +R1 +R414 +L62 +R893 +R97 +R73 +L739 +L76 +R362 +R17 +L211 +R41 +L25 +L112 +L64 +R66 +L15 +R52 +L76 +L35 +R38 +R129 +L72 +L6 +R11 +L30 +R21 +R9 +L54 +L46 +L94 +R280 +L59 +R84 +L616 +R595 +R745 +L35 +R334 +R114 +R95 +L43 +R12 +L51 +R55 +R84 +L91 +L706 +R2 +R95 +R76 +L76 +R397 +R15 +R927 +L39 +L23 +L77 +L74 +R34 +R440 +R21 +L221 +L45 +R45 +L80 +L16 +L7 +L14 +L283 +L18 +R18 +R839 +L239 +R91 +L91 +R66 +R54 +R37 +R42 +L99 +R836 +L11 +R575 +R54 +R41 +L29 +R94 +R40 +L72 +R72 +L556 +R10 +L854 +R21 +L79 +R15 +R331 +L83 +L32 +L88 +L35 +L50 +R29 +L210 +R65 +L346 +L38 +L44 +R44 +R314 +R79 +L56 +L14 +R77 +R1 +L20 +L581 +R49 +L28 +L725 +R54 +R450 +R53 +R73 +L57 +L79 +R726 +L37 +L79 +R50 +R29 +L879 +R92 +R1 +L55 +R62 +L550 +R95 +R932 +R70 +L97 +L63 +R10 +L214 +L33 +L50 +L834 +R534 +R31 +L31 +R41 +L70 +L71 +L94 +L406 +R43 +R264 +R48 +R53 +L36 +R56 +R85 +R71 +L127 +R79 +R986 +L22 +R74 +R26 +R13 +L47 +L66 +R45 +L63 +L677 +R636 +R59 +R97 +L97 +R23 +L32 +R24 +L654 +L81 +L280 +L598 +L2 +R98 +R286 +L247 +R632 +L39 +L11 +L38 +R32 +R87 +R28 +L24 +L61 +L62 +R82 +L63 +R627 +R73 +R526 +R74 +R23 +L23 +R84 +R37 +R6 +R18 +L45 +L61 +R58 +R63 +L91 +L69 +L60 +L40 +L52 +R118 +L66 +R28 +R872 +L50 +L54 +L96 +L50 +R520 +R30 +L78 +R578 +R242 +R47 +L21 +L68 +R46 +R54 +L55 +R48 +R7 +R93 +R726 +R81 +L8 +R25 +R983 +R255 +L752 +L52 +R83 +L75 +R92 +L29 +L47 +R25 +R66 +R34 +L352 +R92 +L44 +R30 +L321 +R56 +L303 +L58 +R64 +R936 +R118 +L57 +L72 +L49 +R58 +L98 +L54 +R63 +L62 +R8 +R8 +L28 +R51 +R43 +L39 +L46 +L63 +L781 +L256 +R101 +R32 +R985 +R38 +L975 +L538 +L1 +L203 +R25 +R592 +R64 +L664 +R37 +R63 +L34 +R34 +R64 +R536 +R689 +L89 +R13 +R587 +L27 +L573 +L747 +R462 +L15 +L78 +L16 +L99 +R71 +L60 +L125 +L93 +L863 +R71 +R92 +L92 +L8 +R72 +L72 +L23 +R323 +L66 +R139 +L187 +R14 +L42 +L53 +L92 +R87 +L46 +R46 +R12 +L12 +L30 +R75 +L645 +R73 +L44 +R71 +R50 +R15 +R235 +L57 +L426 +L60 +R39 +L96 +L1 +R1 +L3 +R6 +L37 +L766 +L420 +L80 +L42 +R66 +R50 +L58 +L81 +L35 +L365 +R565 +L369 +L6 +R75 +R42 +R8 +L50 +R2 +L81 +L21 +L23 +R80 +R47 +R96 +R50 +L314 +L36 +L97 +R460 +L63 +L103 +L86 +L11 +L43 +R43 +R45 +R55 +R27 +L19 +R92 +L4 +L33 +R98 +L87 +R60 +R66 +L82 +L621 +L44 +L85 +R65 +R67 +R18 +R82 +L9 +R9 +R30 +L44 +R774 +R81 +R49 +R91 +R11 +L92 +L14 +L60 +R81 +R593 +R62 +R38 +R36 +R277 +R90 +R93 +R75 +L59 +R37 +R824 +L73 +R69 +L79 +L241 +R27 +R726 +R5 +R82 +R98 +R513 +L55 +L18 +R41 +L92 +L52 +L8 +R784 +R90 +L4 +L56 +R98 +L667 +R12 +L73 +R21 +L821 +R149 +L6 +R25 +L21 +R53 +L46 +L19 +R12 +R569 +L99 +L90 +L65 +R36 +R302 +R37 +L37 +R388 +L88 +L61 +R16 +R14 +L85 +R16 +R602 +R698 +R57 +R43 +R56 +L80 +L76 +L71 +L601 +R4 +L69 +R5 +L115 +R21 +L74 +L23 +R68 +L23 +L63 +R41 +R18 +L18 +L784 +L26 +L38 +R48 +L98 +L91 +R62 +L73 +L811 +R39 +R72 +L97 +L93 +R935 +L45 +L31 +R36 +R95 +R51 +L15 +L36 +R410 +L805 +L5 +L86 +R86 +L71 +R371 +R43 +R10 +R61 +L59 +R11 +R34 +R11 +L93 +L18 +R58 +L79 +R588 +R233 +R9 +R91 +L496 +L4 +R92 +L40 +R1 +L828 +L85 +R61 +R66 +L998 +R83 +R64 +L45 +L71 +L32 +R42 +R653 +L49 +R79 +R92 +R15 +L6 +R6 +L45 +R194 +R29 +L78 +L76 +R76 +L37 +R359 +L5 +L17 +R92 +L957 +R62 +L8 +R11 +L78 +R11 +L457 +R57 +R72 +L5 +L52 +R51 +L14 +L48 +R460 +L617 +L80 +L154 +R68 +L57 +L357 +R32 +L32 +L52 +L48 +L467 +R12 +R855 +R51 +R49 +L90 +R90 +L73 +R40 +R91 +R32 +R10 +L88 +L46 +R851 +R683 +R7 +R649 +R313 +L544 +R75 +L92 +L9 +R198 +L97 +L61 +R61 +R53 +R68 +R65 +L685 +R99 +R55 +R12 +L51 +R89 +L5 +L35 +L64 +L98 +R97 +R453 +L53 +R37 +R40 +R5 +R54 +R42 +R45 +L3 +L12 +L83 +L181 +L44 +R4 +L62 +R7 +L49 +L46 +L36 +R72 +L90 +L98 +L2 +R73 +R79 +R548 +R696 +R4 +L347 +R47 +L89 +L11 +L572 +L22 +R94 +L885 +L15 +L62 +L76 +R70 +L830 +L61 +L41 +R24 +L93 +L31 +R63 +R51 +R821 +L24 +L47 +R41 +R42 +L970 +L77 +R32 +R68 +R49 +R251 +L49 +R49 +L63 +L37 +L43 +L36 +R51 +L58 +R86 +L549 +L9 +R36 +L996 +R56 +L28 +R76 +L38 +R22 +L12 +R974 +R68 +R22 +R2 +R7 +L731 +R660 +L132 +L46 +L24 +R88 +R13 +L59 +R66 +L55 +R364 +L75 +L806 +R6 +R98 +R65 +R28 +L39 +R468 +L58 +R328 +R610 +L8 +R181 +L51 +L39 +L7 +R44 +L67 +R9 +L62 +R427 +L81 +L88 +L25 +L33 +L68 +L388 +L420 +R76 +L25 +R325 +R13 +R14 +R7 +R166 +L50 +R24 +R54 +R72 +L14 +L179 +R759 +R634 +R55 +L89 +R34 +R61 +R67 +L8 +R395 +L10 +R77 +R18 +L71 +L596 +L690 +L78 +L73 +L93 +L376 +L59 +L64 +R382 +L88 +L33 +R39 +L43 +L57 +L28 +L57 +L52 +R416 +L65 +L99 +L62 +R45 +R41 +L682 +R43 +L91 +L98 +R89 +R75 +R25 +L79 +R571 +R8 +L1 +L99 +L76 +R76 +R60 +L10 +L40 +R82 +L92 +L21 +L91 +L88 +L264 +R58 +R83 +L779 +R286 +L15 +L63 +R53 +R587 +R66 +R88 +L15 +R64 +R35 +L84 +L59 +R74 +L33 +R71 +L953 +L25 +R7 +L470 +L112 +R73 +R8 +R51 +R10 +L76 +L56 +L10 +R788 +L499 +R80 +R58 +L327 +R49 +L49 +R74 +R74 +L633 +L15 +R948 +L48 +L47 +L153 +L40 +R3 +L63 +L86 +L59 +L95 +R8 +R36 +L57 +R98 +R93 +L17 +R79 +L96 +R95 +L99 +L87 +R687 +L63 +R63 +L79 +L21 +R156 +L31 +L38 +L826 +L51 +R75 +R69 +R95 +L25 +L24 +R99 +R12 +R89 +L5 +L95 +L59 +R86 +R44 +R51 +L3 +L19 +L687 +R987 +L970 +R92 +L66 +L56 +R36 +R32 +L46 +R64 +L60 +R74 +R53 +R22 +R25 +R3 +R83 +L86 +R81 +L65 +L81 +L33 +L830 +L829 +R65 +L36 +L72 +R4 +L304 +L71 +R28 +L395 +R899 +L296 +R35 +L70 +L30 +L24 +L76 +R33 +L33 +L411 +R1 +L79 +R89 +L29 +R17 +R12 +R13 +L265 +L111 +R18 +L455 +R15 +L63 +L21 +L454 +R23 +L16 +L89 +L95 +R17 +L517 +R60 +L6 +L854 +L35 +R35 +R23 +L823 +L36 +L92 +R38 +R99 +L37 +R928 +L69 +L31 +L81 +L79 +L76 +L87 +L80 +L97 +R26 +L276 +L81 +L69 +R69 +R17 +L91 +L87 +R812 +L20 +L14 +R14 +L69 +R9 +L40 +L8 +L462 +R62 +L92 +L92 +R87 +L69 +R74 +L92 +R92 +R893 +L91 +L86 +L51 +R91 +R47 +L48 +L72 +L360 +L46 +R823 +L367 +L33 +R57 +R879 +R48 +L38 +R54 +L30 +R32 +L791 +R663 +R26 +L828 +R26 +L6 +L92 +R35 +L53 +L34 +R41 +L55 +R266 +L90 +R89 +L99 +L38 +R38 +R95 +L9 +R163 +L26 +L23 +L820 +R20 +R563 +L64 +L30 +R48 +L317 +R58 +L47 +R89 +L66 +L90 +R48 +R5 +L447 +R37 +R69 +L68 +R912 +R905 +L78 +L36 +L91 +L75 +L25 +L797 +R77 +R83 +L90 +R827 +R64 +R36 +L18 +R14 +R64 +L60 +R364 +L986 +L78 +L579 +L43 +R479 +R43 +R4 +L96 +R68 +R171 +R53 +L946 +R43 +L997 +L62 +L38 +R3 +R777 +L80 +R61 +R341 +L39 +L563 +R118 +R37 +L47 +R92 +L21 +L54 +L76 +L252 +L997 +R23 +L1 +L22 +L73 +L5 +R478 +R884 +R16 +L99 +R71 +R57 +L28 +L88 +L93 +L8 +L5 +R52 +L59 +L88 +L55 +R55 +L12 +L22 +L74 +L404 +R61 +L461 +R236 +L92 +R28 +L57 +L42 +R510 +L80 +R97 +R79 +R621 +L45 +R11 +R98 +L64 +R979 +R21 +R21 +R15 +L94 +R82 +L24 +L98 +R98 +L72 +R72 +R9 +L9 +R30 +R9 +L39 +L669 +R69 +L84 +R84 +L87 +R11 +R76 +L906 +L421 +R27 +L655 +L10 +L35 +L713 +R69 +R90 +R54 +R32 +L32 +L56 +L211 +L33 +L3 +R53 +R11 +L610 +L38 +L13 +L29 +R9 +L80 +L42 +R45 +L73 +R423 +L11 +L10 +L32 +L95 +R83 +R12 +R9 +R92 +R63 +L74 +R11 +L31 +L270 +L164 +R863 +R62 +L61 +L886 +R60 +L35 +L38 +L316 +R715 +L15 +L64 +R79 +L44 +R26 +L64 +L95 +L83 +L185 +R56 +L94 +R783 +R372 +L72 +L11 +L89 +L757 +L87 +R44 +L58 +R90 +L32 +L28 +R74 +L42 +L4 +L971 +R89 +R982 +L71 +R71 +R5 +R14 +R81 +R82 +L82 +R72 +R91 +R13 +R24 +R10 +R90 +L74 +R90 +R84 +L59 +R59 +R19 +R990 +R896 +R95 +R88 +L48 +L240 +L147 +L53 +L3 +L44 +L53 +R993 +R167 +L47 +L13 +L82 +R61 +L88 +L91 +L2 +L652 +R54 +L32 +R93 +R139 +L6 +L94 +L21 +L59 +L72 +R23 +L3 +R86 +R62 +R37 +R57 +R90 +R37 +L72 +L65 +R58 +R47 +R24 +L51 +L83 +L14 +L781 +L98 +L89 +R83 +L20 +R25 +R84 +L10 +L45 +R70 +R24 +L36 +L88 +R40 +L40 +L406 +R65 +R2 +R39 +R29 +R71 +L86 +R444 +L52 +L90 +L79 +L237 +R14 +R93 +L88 +L19 +L838 +R48 +L77 +L646 +L59 +L28 +R27 +R73 +R81 +R46 +L28 +R69 +R32 +R33 +R58 +L86 +R41 +R622 +R84 +L3 +L949 +R78 +L72 +R94 +L70 +L330 +L67 +R67 +R89 +R63 +R43 +L28 +R33 +R6 +L306 +L34 +R61 +L29 +R2 +L66 +R666 +L18 +R33 +R41 +L956 +L65 +L66 +R43 +L73 +R9 +L21 +R68 +R5 +R31 +L60 +R522 +R60 +L212 +R56 +R83 +L80 +L8 +R33 +L75 +R48 +L498 +L29 +L71 +R8 +R61 +L18 +R49 +R93 +L8 +L985 +L21 +R35 +R33 +R53 +L82 +R82 +L48 +L2 +R430 +L379 +L1 +L29 +R29 +L52 +R52 +L94 +R34 +R11 +R5 +R799 +R342 +R3 +R855 +L55 +L59 +R59 +R744 +L974 +L70 +L14 +L1 +L85 +R356 +R36 +L360 +L32 +L59 +R659 +L20 +R33 +L461 +R87 +L85 +R346 +L35 +R35 +L14 +L5 +R5 +R4 +L9 +L81 +L76 +L148 +R61 +L37 +L5 +R57 +R48 +L17 +R72 +L55 +L79 +R5 +R74 +L2 +R2 +R56 +L79 +L362 +R85 +R407 +L207 +R1 +L94 +R93 +L18 +R41 +L2 +L621 +L82 +R37 +L88 +R485 +L52 +R11 +L11 +R57 +R30 +L87 +L64 +L19 +R10 +L67 +R40 +L31 +R31 +L3 +L29 +L68 +L15 +R15 +R470 +R49 +R581 +R5 +R54 +L91 +L855 +R87 +L3 +R447 +R380 +R844 +L45 +R77 +L24 +L536 +R11 +R96 +L45 +R98 +L469 +R18 +L46 +L3 +R75 +L658 +R52 +L69 +L3 +R3 +L4 +L967 +L29 +R490 +L906 +R89 +L10 +L35 +L38 +R3 +R28 +R18 +L231 +R54 +R18 +R20 +R268 +R607 +R25 +L96 +L4 +R51 +R49 +L44 +R66 +L791 +L55 +L32 +L37 +L7 +R45 +R55 +R61 +L647 +L33 +R16 +R3 +L97 +L485 +R22 +L40 +R83 +R550 +L91 +R58 +R46 +L66 +R95 +L575 +R54 +L53 +R99 +R92 +L91 +L768 +L88 +R55 +R45 +L45 +R99 +L99 +R316 +L16 +L32 +L68 +R46 +R865 +L48 +L42 +R79 +R609 +L9 +L85 +L15 +L36 +R36 +R58 +L58 +L720 +L46 +L473 +L793 +R32 +R68 +L14 +R66 +R80 +L12 +L77 +L68 +R39 +R12 +L94 +L60 +L25 +R27 +L2 +R66 +R57 +L49 +L21 +R23 +R84 +L5 +R23 +L388 +L30 +R902 +R71 +L73 +R146 +R508 +R46 +R1 +R67 +L32 +L56 +L780 +L3 +R303 +R13 +L526 +R35 +R78 +L43 +R43 +R530 +L30 +R12 +L41 +L81 +R48 +L64 +R98 +L53 +R28 +L86 +R76 +R63 +R70 +R78 +L984 +L503 +R470 +R98 +R92 +R77 +R2 +L35 +L65 +L53 +R53 +R68 +L68 +L880 +R40 +R471 +R55 +R49 +R10 +R52 +R38 +R584 +L256 +L63 +R65 +R235 +R8 +L88 +L20 +L58 +L69 +L73 +L98 +L70 +R532 +R50 +R86 +L861 +L29 +R59 +R531 +R88 +R50 +L739 +L99 +L121 +R55 +R108 +R69 +L383 +R72 +R40 +R13 +R47 +R80 +L680 +R3 +R97 +R343 +R57 +L56 +R65 +R511 +L58 +R46 +R92 +L54 +L46 +L952 +L57 +L91 +L60 +R60 +R31 +R69 +R68 +R480 +R80 +R72 +R98 +R454 +R60 +R168 +R32 +R588 +L17 +R54 +L37 +R316 +L77 +L5 +R66 +R317 +L17 +R784 +L60 +R609 +R92 +R675 +R80 +L80 +L7 +R507 +R81 +R42 +R977 +L35 +L65 +L40 +L644 +L99 +L4 +R19 +L534 +R26 +L24 +R19 +R11 +R560 +R53 +L36 +L28 +L845 +R51 +R15 +R95 +L95 +R80 +L80 +L24 +L76 +L63 +R99 +L36 +L28 +R70 +L363 +L79 +L27 +R27 +R26 +R24 +L471 +L79 +R70 +R289 +R341 +R107 +L7 +L672 +R965 +R2 +R71 +L44 +L22 +L36 +R30 +R25 +L56 +R454 +R54 +L635 +L4 +L32 +R47 +R11 +R34 +L92 +R80 +L80 +R540 +L84 +L42 +L556 +L57 +R999 +L63 +R13 +R13 +R48 +R889 +R10 +R190 +R72 +R28 +L95 +L59 +R89 +R20 +R30 +L29 +R823 +L79 +R62 +L77 +R915 +R14 +L619 +L507 +R12 +L94 +L64 +R3 +L45 +L2 +R93 +R528 +R34 +L20 +L21 +L612 +L7 +L34 +R956 +R77 +R56 +L948 +L45 +L9 +L346 +L97 +L3 +L72 +L71 +L57 +R93 +L83 +R90 +L99 +R399 +R9 +R976 +L885 +L48 +L93 +L56 +R97 +L61 +L39 +L37 +L63 +L633 +L67 +R54 +R46 +R42 +L17 +L425 +R645 +R55 +R31 +R94 +R788 +R87 +R85 +R15 +L264 +R565 +L601 +L33 +L53 +L81 +R67 +R661 +R39 +R64 +R561 +L61 +R736 +L57 +R76 +L71 +R22 +R28 +L8 +L719 +R3 +L51 +R277 +L33 +R74 +L41 +R67 +R33 +R70 +R830 +L14 +L94 +L92 +R38 +R762 +L5 +R24 +R638 +L67 +L90 +R457 +L43 +L314 +R50 +R50 +L157 +L43 +L84 +L6 +R90 +L29 +L39 +R59 +L22 +L58 +L83 +R72 +R12 +R5 +R6 +L58 +R50 +L15 +L20 +R6 +L43 +R60 +L803 +R907 +L7 +L47 +R52 +R95 +R768 +R32 +R69 +R221 +R33 +L123 +R21 +L666 +R808 +L63 +R4 +R58 +R53 +R9 +L39 +R34 +L19 +R28 +R227 +L652 +L269 +R75 +L95 +L26 +R12 +L65 +L73 +R86 +L45 +L98 +L105 +L17 +L83 +R17 +R83 +L75 +R75 +R5 +L5 +R5 +L65 +L3 +R568 +R171 +L90 +L86 +R21 +R79 +R41 +R59 +R37 +L32 +L618 +R13 +R84 +R30 +R715 +R71 +L9 +R8 +R39 +R62 +L57 +R38 +R29 +R90 +L50 +R69 +R887 +R94 +R473 +L41 +R68 +R419 +L23 +L96 +R34 +L40 +R43 +R63 +L473 +L856 +R60 +R69 +R573 +R954 +R73 +L17 +R45 +R72 +L14 +R243 +L29 +L27 +L73 +L30 +L787 +R93 +R52 +L13 +L15 +L27 +R27 +R69 +R31 +L93 +L7 +L37 +R17 +L82 +L98 +R34 +R166 +R33 +L33 +L307 +L78 +L16 +R142 +L65 +L676 +R259 +L53 +L51 +L55 +L34 +R88 +R11 +R33 +L88 +L10 +R98 +L30 +L29 +R573 +L12 +L358 +R12 +R46 +L16 +R19 +L479 +L634 +L40 +L93 +L57 +R54 +R701 +R927 +R792 +L74 +R52 +R48 +R62 +R831 +L93 +L95 +R95 +R641 +R28 +R231 +R83 +R17 +R42 +L49 +R7 +R25 +L24 +R9 +L833 +R23 +L92 +L57 +R8 +L27 +L96 +R75 +R589 +R149 +L11 +R632 +R31 +R53 +L27 +L927 +L468 +R13 +R55 +R92 +L592 +L52 +R16 +R636 +L55 +L30 +L31 +L84 +R25 +L30 +R41 +L736 +L621 +R21 +R94 +R616 +R16 +R74 +L84 +R5 +L21 +R64 +L75 +L89 +L61 +L7 +L26 +L6 +L7 +R547 +L61 +R94 +L13 +L9 +R949 +L16 +R86 +L28 +L42 +L34 +R64 +L54 +L942 +R48 +R18 +R40 +L24 +L55 +R53 +R74 +L88 +L9 +L27 +R95 +R88 +R54 +R80 +R19 +R947 +R81 +L36 +L886 +R88 +L94 +R6 +L28 +L491 +R36 +L363 +R7 +L70 +R50 +R149 +L641 +L59 +L992 +R93 +L5 +R98 +R2 +L456 +L10 +R874 +L16 +L58 +R74 +L61 +L39 +R267 +L160 +L827 +R45 +R78 +R97 +R39 +L70 +L42 +R68 +R49 +R94 +R62 +R406 +L38 +L44 +R76 +R95 +R305 +L42 +R82 +L74 +L49 +R46 +R37 +L42 +R10 +R8 +R22 +R655 +R595 +L48 +R36 +L420 +L16 +R284 +L84 +L79 +L522 +L59 +L540 +R18 +L818 +R46 +R60 +L28 +R45 +R762 +R70 +R745 +L80 +R668 +R39 +R30 +L72 +L21 +R92 +L24 +L32 +R984 +R90 +R26 +L6 +L57 +L78 +L50 +L15 +L511 +L55 +R86 +R17 +L12 +R84 +L3 +L32 +L717 +L451 +R2 +L302 +L689 +R89 +L663 +R28 +R35 +L25 +L46 +R91 +L79 +R33 +L74 +L359 +L29 +L124 +L92 +R4 +R85 +R15 +L875 +L24 +L1 +L93 +L7 +R63 +R72 +L35 +R18 +L54 +R17 +L81 +R34 +L83 +R561 +R224 +L79 +L157 +R32 +R17 +L49 +R16 +R71 +R13 +R744 +R44 +R42 +L30 +L19 +L81 +R52 +L79 +L473 +L55 +R4 +R61 +R8 +R41 +R50 +L20 +R11 +R57 +R3 +L60 +R97 +R79 +R43 +L92 +L18 +L39 +L65 +L305 +L647 +L53 +L41 +L59 +L32 +R932 +L780 +R48 +L68 +L4 +R27 +L20 +L49 +R39 +L151 +R58 +R716 +R84 +L419 +R19 +L131 +L14 +L262 +R632 +R75 +R95 +L95 +L85 +L46 +R542 +L11 +R77 +R48 +L387 +R62 +R32 +R366 +L39 +R759 +L12 +R757 +R80 +L36 +R78 +L744 +R69 +L510 +L76 +R49 +R75 +L48 +L79 +L221 +R12 +R88 +R88 +R875 +R36 +L32 +L67 +R9 +L9 +R86 +L856 +R70 +R62 +R638 +R22 +R78 +R391 +L86 +L705 +R29 +R71 +R888 +R92 +R70 +L66 +L81 +R97 +R44 +R87 +L893 +L38 +L437 +L63 +R81 +L62 +L19 +R81 +L738 +L682 +L55 +R86 +L44 +R74 +R46 +L68 +R639 +R61 +L39 +R567 +R98 +R88 +L14 +L98 +R36 +L57 +R219 +R24 +R76 +L85 +L26 +L81 +L8 +L656 +R50 +R28 +R93 +R885 +R86 +R14 +L74 +R74 +L53 +L41 +L50 +R5 +L72 +L474 +R15 +L30 +L20 +L99 +L19 +R963 +L70 +L2 +R47 +L66 +R73 +R6 +L50 +L63 +R148 +R52 +L26 +R226 +L47 +L860 +L93 +R5 +R36 +R59 +R27 +L42 +L53 +R436 +R32 +R73 +R94 +R33 +R51 +L53 +L74 +R76 +L78 +L22 +R31 +R69 +R87 +L10 +R923 +R35 +R65 +L73 +L27 +R26 +R974 +L75 +L26 +L99 +R31 +L31 +R38 +L85 +L453 +R7 +R59 +L66 +R98 +R65 +R37 +L53 +R53 +L145 +L98 +R35 +R37 +R38 +R53 +L20 +L93 +L741 +L29 +L72 +L65 +R25 +L222 +L761 +R78 +L6 +L214 +L39 +R69 +L48 +R17 +L42 +R43 +L25 +R25 +L94 +R78 +L93 +L75 +L57 +L830 +L97 +R68 +L74 +R974 +R81 +R19 +L226 +L74 +L97 +R97 +R46 +L87 +L19 +L40 +L63 +L969 +L68 +R10 +R17 +L27 +L460 +R45 +R125 +R19 +R71 +L62 +L9 +L38 +R38 +L429 +R6 +R94 +R87 +R66 +L56 +L97 +L96 +L31 +L555 +R18 +R64 +R16 +L79 +L44 +R7 +L30 +L99 +L71 +L12 +R81 +R20 +L189 +R78 +L39 +L54 +L31 +R28 +L63 +R20 +R361 +L87 +R6 +L105 +R86 +R158 +R42 +L50 +R76 +R409 +R16 +R49 +L39 +R39 +L571 +R71 +L62 +L16 +L83 +R62 +L3 +R2 +L93 +L745 +L62 +R47 +R53 +R81 +R119 +R52 +R248 +R853 +R52 +R826 +R69 +L96 +R36 +R760 +L95 +R38 +L49 +R6 +R48 +L948 +L28 +L72 +L37 +L89 +R751 +L25 +R4 +L304 +R41 +L65 +R91 +R52 +L19 +R83 +R64 +L47 +R84 +L84 +R19 +R881 +L628 +R43 +R52 +R33 +R635 +R77 +R88 +R143 +R32 +R25 +L98 +R33 +L78 +L85 +L64 +R44 +L52 +L231 +R37 +L31 +R25 +R785 +R15 +R43 +L143 +R16 +R410 +L26 +R28 +R36 +L92 +L33 +L39 +L89 +L8 +R497 +L66 +R66 +L93 +R93 +L11 +R11 +L789 +R41 +L52 +L56 +L44 +R9 +L9 +L43 +L7 +L50 +L368 +L3 +R71 +L69 +R841 +L575 +R69 +L66 +R111 +L93 +L18 +R71 +L482 +R911 +R24 +L56 +R23 +R9 +R12 +L12 +R294 +R644 +R883 +R108 +R35 +R78 +R428 +R95 +L65 +R74 +R26 +R45 +L40 +R97 +R620 +L22 +R253 +R47 +R225 +R75 +L44 +R52 +L8 +R809 +R35 +L40 +R6 +L29 +R40 +L884 +R213 +R87 +R63 +L11 +L283 +R74 +L80 +R35 +R76 +R70 +R19 +R99 +R73 +R276 +R52 +L86 +R41 +R22 +R181 +R942 +L80 +L56 +L64 +L61 +R707 +L78 +R132 +R65 +L61 +R36 +L40 +L877 +R177 +L890 +L310 +R81 +L81 +L8 +L80 +R44 +L56 +R52 +R13 +R619 +R94 +L71 +R66 +L82 +L40 +R49 +L59 +R59 +R44 +R67 +R88 +L17 +R18 +L739 +R39 +R12 +R54 +L6 +R966 +R12 +L9 +R71 +L83 +R79 +L57 +R47 +L5 +R76 +L15 +L174 +L68 +L41 +R341 +L60 +L66 +L933 +L429 +L12 +L59 +R859 +L36 +L88 +R20 +R4 +L112 +L306 +R47 +L33 +R41 +L637 +L23 +R23 +L507 +L881 +L601 +L31 +L80 +L378 +L76 +L24 +L22 +R3 +L88 +R585 +R31 +R36 +L67 +L33 +L43 +R876 +R47 +L53 +R79 +L73 +R27 +R65 +R99 +R881 +L72 +L41 +L59 +R88 +L36 +L84 +R757 +R655 +R318 +L98 +R92 +L892 +R62 +L14 +L48 +L6 +L92 +R98 +L982 +R35 +R22 +L94 +R93 +R1 +R45 +R13 +L33 +R42 +L525 +R94 +L961 +R528 +L58 +L91 +R519 +L81 +L67 +R77 +L57 +R815 +L435 +R973 +L73 +R58 +R16 +R80 +L454 +L85 +L15 +R50 +R550 +L15 +L82 +L708 +R962 +L948 +R291 +R13 +L13 +L839 +R235 +R48 +R56 +L3 +L16 +L59 +R378 +R641 +L15 +L797 +R62 +L785 +R7 +L74 +L564 +L275 +R51 +R32 +L3 +R83 +L64 +R830 +R23 +R76 +L36 +L73 +L6 +R23 +L311 +R246 +L673 +R30 +R72 +R32 +R68 +R616 +R711 +L61 +L486 +L810 +R71 +R54 +R5 +R41 +R67 +L23 +L66 +L19 +R19 +R81 +R12 +R65 +R697 +R13 +R55 +L73 +R31 +L396 +L4 +R12 +L180 +R78 +L110 +R57 +R43 +R2 +R212 +R398 +R288 +R796 +R81 +L14 +L77 +R17 +R81 +L570 +R92 +R94 +R95 +R613 +R92 +L140 +R520 +L91 +R65 +L54 +L74 +L81 +L70 +L75 +R35 +L783 +R22 +L38 +R80 +R84 +R93 +R5 +L91 +R41 +L84 +R34 +R23 +R15 +R28 +L64 +L997 +R25 +L98 +R23 +L4 +L188 +R685 +R824 +R30 +R89 +R74 +R52 +R50 +L65 +R536 +R19 +L356 +R56 +L10 +R218 +R22 +L24 +L37 +L44 +R20 +R90 +L148 +R64 +L6 +L880 +L47 +L97 +R78 +L54 +R23 +L24 +R4 +R97 +R53 +R44 +R17 +L86 +R72 +L23 +L5 +L72 +R27 +R41 +R84 +L536 +R84 +L7 +R7 +L691 +R91 +L56 +L52 +R130 +R97 +L36 +R15 +R2 +L89 +L38 +L73 +L692 +L54 +R946 +R97 +R13 +L92 +R844 +L62 +R96 +L28 +L85 +L83 +L695 +L35 +L18 +R48 +R69 +L86 +L83 +L80 +R71 +L652 +L239 +R52 +R948 +R48 +L62 +R39 +L14 +L43 +L68 +R44 +R56 +L79 +R879 +L6 +R63 +R592 +L20 +L73 +L94 +L18 +L73 +L38 +R87 +L98 +R78 +L19 +R19 +L62 +L22 +L67 +R64 +L14 +R401 +R14 +R76 +L90 +L65 +R531 +L158 +R92 +L12 +L99 +L45 +R42 +R14 +R10 +R25 +R65 +L60 +L5 +R65 +L21 +R29 +L15 +R38 +R6 +L670 +L67 +R92 +L75 +R88 +L5 +L198 +R453 +R68 +L20 +L88 +L779 +L28 +R89 +R3 +L25 +R25 +R23 +L23 +R59 +L564 +L776 +L52 +L67 +R83 +R38 +R79 +R29 +R97 +R874 +R70 +R10 +L98 +L603 +L60 +L41 +L88 +R810 +L95 +L9 +L96 +R67 +R495 +R538 +L47 +L62 +R50 +L22 +L86 +R67 +L52 +L55 +L93 +L272 +L90 +L90 +R52 +R94 +R906 +L55 +R92 +L723 +L14 +R88 +L88 +R96 +R63 +R741 +L81 +L43 +L97 +L79 +R154 +L15 +L39 +L92 +L207 +R31 +L2 +R70 +L19 +L14 +R62 +R844 +L73 +L754 +R29 +R36 +L597 +R46 +R65 +R75 +L61 +R80 +R553 +R57 +L12 +L98 +L73 +R57 +L32 +L41 +R31 +R65 +L5 +L342 +L79 +R85 +R91 +L76 +R56 +R44 +R84 +R390 +R21 +R132 +R7 +L97 +R46 +L6 +R23 +R227 +L72 +L55 +R33 +L331 +R98 +R85 +R3 +L534 +R12 +L66 +L69 +L78 +L17 +R50 +R31 +L17 +L19 +L481 +L23 +R23 +L86 +L49 +L776 +R84 +L47 +R71 +R3 +R33 +L33 +L414 +R746 +R75 +R93 +L320 +R20 +L43 +R104 +L761 +L189 +R99 +R90 +L60 +L6 +L93 +R59 +L88 +R88 +R806 +R18 +L623 +R99 +R44 +R56 +R5 +L24 +R19 +L30 +R30 +R68 +L22 +L46 +R665 +R35 +R50 +L33 +L21 +L96 +L45 +L84 +R29 +L66 +R66 +L275 +R46 +L71 +R74 +L1 +R10 +R618 +L29 +L93 +R59 +R62 +R391 +R48 +L56 +R17 +L83 +L17 +L34 +L42 +R79 +R76 +R6 +R93 +R22 +L17 +L83 +R87 +L87 +R51 +L51 +L580 +L40 +R62 +L98 +R756 +L95 +L18 +R59 +L593 +L354 +L99 +L24 +R93 +R35 +L4 +R794 +R2 +R59 +R8 +R2 +R43 +R57 +L88 +R41 +R77 +L68 +L189 +L32 +L78 +L28 +R88 +L948 +L40 +R67 +L88 +R90 +R99 +L17 +L451 +R53 +L434 +R72 +R9 +L27 +R32 +L602 +L73 +R78 +R26 +R66 +R84 +L84 +R16 +R84 +L215 +L557 +L328 +R503 +R494 +L92 +R61 +R486 +L15 +R54 +L746 +R59 +R97 +R99 +R73 +R62 +L80 +L456 +R18 +R78 +L95 +R83 +R10 +R21 +L45 +R21 +L50 +R60 +L85 +L282 +L33 +R77 +L17 +R21 +R19 +L139 +L61 +R728 +L470 +R650 +L2 +R53 +L26 +R62 +R605 +R26 +R610 +L38 +R50 +R3 +L73 +L78 +L65 +L16 +R81 +L23 +L71 +R22 +R26 +R82 +L88 +R2 +R744 +L72 +L22 +R84 +L184 +R83 +L25 +L58 +L57 +R5 +L48 +L60 +L40 +R40 +R81 +L66 +L55 +R95 +L584 +L11 +L79 +R80 +R22 +L111 +L38 +R26 +L34 +R34 +R45 +L950 +L44 +R49 +L801 +L99 +L50 +R35 +R68 +R12 +L998 +L80 +R13 +R99 +L67 +L32 +R667 +R33 +L19 +R119 +L36 +R15 +R21 +L15 +R66 +L20 +R169 +L17 +L83 +R1 +R99 +R72 +L72 +L82 +L66 +R48 +R47 +R53 +L20 +R47 +L46 +L681 +L8 +R43 +L35 +L59 +R53 +R48 +L55 +L94 +R48 +R67 +R67 +L60 +L58 +L57 +L38 +R38 +R51 +L86 +R55 +R85 +R69 +L63 +L4 +R2 +R91 +R720 +R449 +L56 +L113 +R50 +R62 +R45 +R43 +R60 +L826 +R13 +R5 +R48 +L740 +R3 +L84 +L79 +L81 +R83 +R52 +R6 +L855 +L59 +R54 +L42 +L58 +L55 +L45 +L99 +R99 +R26 +R841 +R11 +L50 +R741 +R285 +L72 +L57 +R4 +L12 +L32 +R28 +R55 +L868 +R22 +R7 +R41 +R30 +L31 +R31 +L422 +L54 +L20 +L23 +R19 +L197 +R18 +L60 +L87 +L11 +L553 +L10 +L38 +R38 +R10 +R568 +R939 +L317 +L957 +L8 +L11 +R61 +R15 +L1 +L11 +R82 +R30 +L13 +R35 +R27 +L36 +L356 +L58 +R9 +R74 +L71 +R370 +L13 +R95 +R637 +R47 +R553 +R25 +L25 +L90 +R83 +L793 +L22 +R681 +L59 +L57 +L2 +L81 +R40 +R116 +R26 +L218 +R90 +L2 +R580 +L92 +R15 +R95 +R90 +L9 +R156 +R153 +R959 +L83 +L56 +R80 +L37 +L99 +L64 +R36 +R67 +L35 +R32 +R49 +L49 +L30 +R30 +L37 +L31 +R68 +R54 +L20 +L95 +R4 +R449 +L9 +L59 +R76 +L92 +R77 +R23 +L78 +R70 +R336 +L36 +L88 +L85 +L27 +L856 +L49 +R526 +R15 +R568 +R10 +R53 +R4 +R29 +L26 +R84 +L41 +L217 +R960 +L93 +R29 +R4 +R29 +L77 +R55 +L5 +R37 +L5 +R19 +L53 +R32 +L235 +R3 +R95 +R5 +R8 +L52 +R10 +R934 +L12 +L88 +L225 +R25 +L93 +L638 +R31 +L86 +L53 +R49 +L38 +R39 +L511 +R7 +R20 +R44 +R17 +R382 +L89 +R76 +R443 +R308 +L627 +R19 +R49 +L31 +L17 +L87 +R7 +L524 +R3 +R12 +R92 +R96 +R23 +L23 +L91 +L23 +R25 +L632 +L95 +L65 +L19 +L78 +R22 +L44 +L55 +L92 +L37 +L81 +L35 +L8 +R27 +L88 +L846 +L61 +L8 +L16 +R69 +R31 +L186 +L84 +L515 +L44 +L71 +L62 +R62 +R32 +R68 +R92 +L75 +R167 +L83 +L1 +L34 +R34 +L3 +R41 +L64 +R26 +L29 +R29 +L465 +L135 +R44 +R3 +R38 +L85 +L29 +L44 +L27 +R9 +R91 +L621 +L79 +L46 +L599 +R4 +R944 +L403 +R18 +L18 +L35 +L419 +R348 +L94 +L113 +R735 +L25 +L98 +R82 +L32 +R12 +L61 +L30 +R32 +R82 +R32 +R84 +R70 +R30 +R38 +L31 +R48 +R37 +L11 +L81 +R54 +R59 +R17 +L90 +R406 +R54 +L90 +L10 +L34 +L29 +R63 +R17 +R90 +R81 +R62 +L50 +R231 +L31 +L26 +R76 +R38 +R12 +R528 +R3 +R84 +R85 +R71 +L59 +R339 +R49 +R18 +R26 +R56 +L22 +L48 +L89 +R26 +L67 +L62 +L38 +L343 +R43 +R57 +L3 +L254 +L96 +L504 +L14 +L41 +R91 +R864 +L14 +R197 +L15 +R32 +L35 +R8 +L97 +R24 +L69 +L31 +L97 +R143 +R698 +L81 +R637 +L31 +L45 +L329 +R50 +L98 +R559 +R2 +L63 +R92 +L37 +L59 +R161 +L2 +L62 +L48 +L43 +R705 +R48 +R77 +L77 +L74 +R64 +L62 +L23 +R86 +R75 +L22 +R31 +R73 +L59 +R28 +R70 +R43 +L30 +R56 +R44 +L11 +R36 +R21 +R54 +L85 +L89 +R274 +L31 +L569 +L87 +L70 +R257 +R427 +L52 +R25 +L88 +R88 +R49 +R66 +L15 +L14 +R93 +L9 +L70 +L46 +L187 +L77 +R884 +R23 +L85 +L75 +L16 +L21 +L15 +L485 +L36 +L64 +L47 +L53 +L94 +L46 +R40 +L19 +L688 +L93 +R999 +L90 +R59 +R5 +L73 +R92 +L7 +L85 +L29 +R97 +R7 +L33 +R81 +R40 +L63 +R13 +R83 +L12 +L36 +L5 +R36 +R13 +R88 +R20 +L30 +L99 +R76 +L47 +R69 +R31 +R50 +L35 +L52 +L26 +L37 +R83 +R48 +L48 +R17 +L18 +L82 +L78 +R45 +R33 +R55 +R85 +L3 +R63 +R79 +R4 +L45 +R99 +R40 +L4 +R40 +R18 +L41 +L7 +L38 +L13 +R44 +R42 +L44 +L14 +R9 +L9 +R33 +R30 +R22 +R43 +L20 +R23 +R4 +R2 +L13 +L14 +L19 +L35 +L2 +R15 +L33 +R47 +R24 +L36 +L37 +R38 +L33 +L48 +R11 +R3 +R25 +R26 +R12 +R43 +L26 +L3 +R8 +R44 +L38 +L31 +L35 +R43 \ No newline at end of file