From 12d392e5785c47ef14c33868b4845b2144a79514 Mon Sep 17 00:00:00 2001 From: Jacob Jonsson Date: Tue, 2 Dec 2025 08:01:56 +0100 Subject: [PATCH] feat: solve day1 --- app/Day1.hs | 49 + input/day1.text | 4570 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 4619 insertions(+) create mode 100644 app/Day1.hs create mode 100644 input/day1.text diff --git a/app/Day1.hs b/app/Day1.hs new file mode 100644 index 0000000..7b6a676 --- /dev/null +++ b/app/Day1.hs @@ -0,0 +1,49 @@ +module Main where + +import Debug.Trace (trace) +import System.Environment (getArgs) + +main :: IO () +main = do + input <- readFile . head =<< getArgs + print $ part1 input + print $ part2 input + +part1 :: String -> Int +part1 = length . filter (== 0) . scanl rotate 50 . map parse . lines + +rotate :: Integer -> Either Integer Integer -> Integer +rotate pos (Left rot) = (pos - rot) `mod` 100 +rotate pos (Right rot) = (pos + rot) `mod` 100 + +parse :: String -> Either Integer Integer +parse ('L' : rest) = Left (read rest :: Integer) +parse ('R' : rest) = Right (read rest :: Integer) +parse s = error $ unwords [s, "is not on the form 'L$NUM' or 'R$NUM''"] + +test_input = "L68\nL30\nR48\nL5\nR60\nL55\nL1\nL99\nR14\nL82" + +part2 :: String -> Integer +part2 = snd . head . reverse . scanl rotate2 (50, 0) . map parse . lines + +rotate2 :: (Integer, Integer) -> Either Integer Integer -> (Integer, Integer) +rotate2 (pos, zeros) rot = + let pos' = rotate pos rot + newZeros = go pos rot + in trace ("The dial is rotated " ++ show rot ++ " to point at " ++ show pos' ++ if newZeros > 0 then "; during this rotation it points to 0 " ++ (counting newZeros) else ".") (pos', zeros + newZeros) + where + counting :: Integer -> String + counting 1 = "once" + counting 2 = "twice" + counting n = show n ++ " times" + +go :: Integer -> Either Integer Integer -> Integer +go p (Left r) + | p == r = 1 + | r > 100 = 1 + go p (Left (r - 100)) + | p /= 0 && p - r < 0 = 1 + go 0 (Left (r - p)) + | otherwise = 0 +go p (Right r) = (p + r) `div` 100 + +between :: Integer -> (Integer, Integer) -> Bool +between x (mn, mx) = x < mx && x > mn diff --git a/input/day1.text b/input/day1.text new file mode 100644 index 0000000..26b4166 --- /dev/null +++ b/input/day1.text @@ -0,0 +1,4570 @@ +L4 +R49 +L25 +R16 +R45 +R41 +R19 +R20 +R22 +L16 +R42 +R5 +L29 +L5 +R1 +R6 +R30 +R5 +R11 +R44 +L13 +R28 +R36 +R45 +L22 +L6 +L39 +R16 +R20 +L12 +R2 +L29 +L42 +L22 +L7 +R13 +L38 +L26 +L10 +R35 +R30 +R10 +R13 +L37 +L3 +L48 +L12 +R20 +L16 +R87 +R82 +R18 +L76 +L94 +R95 +L25 +R77 +R23 +L28 +R28 +L65 +R65 +L5 +R60 +R33 +L88 +L67 +R96 +R71 +L57 +L70 +L7 +R72 +L88 +L22 +R59 +L87 +L52 +L35 +R87 +L61 +R83 +R82 +L57 +L19 +L28 +L55 +R55 +L54 +L5 +L36 +L34 +L71 +L21 +L1 +R22 +R1 +L81 +R89 +L3 +R3 +R33 +R53 +L43 +R297 +R12 +L61 +R49 +R851 +R22 +L22 +R57 +R95 +R84 +L44 +R77 +L52 +R183 +R85 +L40 +R55 +R85 +L485 +L62 +L90 +R81 +L29 +L56 +R49 +R7 +R57 +R56 +L13 +R61 +L61 +L90 +L35 +R28 +L95 +L73 +L14 +L21 +L79 +L4 +R67 +L84 +R69 +R23 +L13 +R21 +R611 +L22 +L92 +L86 +R5 +L79 +R63 +R85 +L263 +R27 +L56 +R83 +R93 +R35 +L67 +R69 +L67 +L18 +R89 +R17 +L27 +R15 +L22 +R30 +L17 +R12 +L18 +L46 +L54 +R48 +R18 +R96 +L62 +R40 +R60 +R5 +R16 +R79 +L99 +L1 +L53 +L47 +L33 +L85 +L501 +R808 +R511 +L26 +R126 +R373 +R27 +L812 +L29 +L85 +L74 +R88 +L88 +L929 +R929 +L32 +L68 +L43 +L68 +R65 +L71 +R75 +L25 +L44 +L93 +R15 +R89 +R88 +L88 +L793 +R93 +R1 +R386 +L53 +R503 +L37 +R41 +L64 +L813 +R949 +L37 +L76 +L28 +L354 +L86 +R39 +L871 +R61 +R22 +R17 +R88 +L78 +R17 +R73 +R48 +R11 +R60 +L19 +R531 +R49 +R44 +R667 +R77 +R532 +R799 +R1 +L84 +L16 +L40 +R49 +L89 +R80 +L735 +L365 +R44 +R32 +R79 +R952 +R893 +L21 +L36 +R157 +R53 +R47 +R30 +L30 +R28 +L49 +R22 +R43 +R45 +L89 +R116 +R90 +L6 +L11 +L7 +R62 +L671 +R31 +L8 +R4 +L77 +R77 +L32 +R376 +R956 +R19 +L91 +L589 +L484 +R68 +L453 +L24 +L46 +L59 +L41 +R876 +R24 +R601 +R52 +R47 +L20 +L56 +L4 +L20 +R57 +L799 +R42 +L35 +L36 +L29 +R93 +R21 +L14 +L14 +R496 +L982 +L10 +R39 +L29 +L118 +L13 +L69 +R3 +R99 +R98 +R769 +R95 +R160 +R558 +L82 +R88 +L35 +R30 +L65 +L217 +R67 +R24 +R51 +R30 +R4 +R52 +R165 +L694 +R53 +R47 +L49 +L51 +R60 +L95 +L65 +L94 +R94 +L8 +R7 +L85 +L10 +L895 +L35 +R948 +R14 +L36 +R17 +L817 +L52 +R991 +L57 +R23 +R11 +L57 +R70 +L78 +R60 +R67 +L78 +R59 +R494 +L53 +L306 +R83 +L77 +L95 +L33 +L88 +L82 +R98 +R80 +L80 +L57 +L43 +L688 +L12 +L113 +R94 +L81 +L65 +R8 +R637 +R85 +R14 +R169 +R2 +L23 +R32 +L63 +R6 +L30 +L32 +R60 +L64 +R67 +R27 +R71 +L784 +R85 +R147 +R48 +R3 +R83 +R196 +L63 +R5 +L21 +L64 +R254 +R10 +R51 +R49 +L32 +R93 +R39 +R95 +R45 +L89 +L51 +L97 +R348 +R70 +L17 +R96 +R471 +L96 +L75 +L48 +R59 +R89 +R335 +L35 +L59 +R77 +L718 +L60 +R60 +L65 +R65 +R53 +L53 +R23 +R68 +L643 +R23 +R99 +R835 +R434 +L86 +R90 +R32 +R25 +L94 +L351 +L41 +L33 +L81 +L37 +R37 +L749 +L49 +R29 +L51 +L13 +R13 +L80 +L58 +R58 +R76 +L98 +L78 +L17 +L60 +R77 +R409 +R334 +L43 +L74 +L3 +L28 +L48 +R53 +L88 +L90 +L61 +L61 +R99 +R5 +R31 +L326 +L33 +L76 +R17 +L29 +L88 +L13 +L61 +L26 +R17 +R62 +L79 +R12 +R88 +R46 +R84 +L30 +R58 +L938 +R80 +R8 +R64 +L72 +L42 +L414 +L11 +L233 +L31 +L169 +R52 +L52 +L43 +L80 +L377 +R20 +R80 +L70 +R70 +R47 +L49 +L10 +L83 +R95 +R22 +R59 +L81 +L120 +R20 +L786 +R80 +L72 +L85 +L128 +L809 +R39 +R57 +R4 +L57 +L35 +R92 +L93 +R25 +R68 +L71 +L544 +L783 +L11 +L91 +R377 +L77 +R10 +L964 +R6 +L76 +R324 +L15 +R82 +L72 +L66 +R128 +R875 +R86 +R82 +R873 +L81 +L67 +L86 +R23 +R61 +R77 +R15 +R47 +R88 +L59 +R9 +L19 +L81 +R56 +L86 +L15 +L955 +L39 +L744 +R83 +R93 +L93 +R7 +R87 +L32 +L62 +L45 +L50 +R3 +R92 +L485 +L15 +L70 +R276 +L76 +L66 +R58 +L12 +R90 +L14 +R41 +R78 +L14 +L91 +L93 +L5 +L319 +L90 +L293 +R22 +R172 +R6 +R31 +L45 +R88 +R48 +L95 +R47 +L94 +L15 +L8 +R64 +L21 +R10 +L10 +L73 +L69 +R33 +R7 +R282 +L80 +R7 +L2 +R19 +L63 +R39 +L955 +L27 +R718 +L39 +R218 +L915 +R10 +L83 +R73 +R70 +L70 +L94 +L19 +R55 +R57 +R1 +R67 +L2 +R35 +R48 +L948 +R846 +R54 +R1 +R99 +L86 +L14 +R55 +R71 +R44 +L47 +L484 +L739 +R3 +L56 +L53 +R6 +R11 +R740 +L37 +L57 +L89 +R34 +R20 +L91 +R73 +R10 +R84 +L41 +L57 +L16 +L923 +R39 +L25 +R757 +R268 +L23 +L856 +L57 +L96 +R32 +R52 +R999 +R84 +L616 +R81 +L87 +R90 +R97 +R25 +L68 +L57 +R271 +R29 +R41 +R959 +R91 +R9 +R48 +R52 +L14 +R84 +R61 +R55 +R87 +L59 +R86 +R17 +L70 +R141 +R12 +R64 +L701 +R937 +R17 +R85 +L75 +L436 +R9 +L2 +L206 +L3 +L70 +R82 +L1 +L762 +R96 +L34 +L29 +R49 +L20 +R15 +R221 +R77 +R615 +R72 +L71 +R99 +R88 +R84 +R83 +L63 +L476 +R97 +L75 +R371 +R56 +L98 +L69 +L26 +L51 +L49 +R55 +R17 +R6 +R330 +L49 +L90 +L69 +R39 +L939 +R56 +L48 +R92 +L83 +R36 +L21 +R68 +L717 +L62 +L66 +R27 +R595 +L15 +L34 +R730 +L80 +L78 +L129 +L15 +R5 +R34 +R63 +R20 +L28 +L50 +R29 +L22 +L7 +L903 +L9 +R12 +L85 +L15 +L46 +L54 +R13 +R92 +R11 +L987 +R71 +R80 +R23 +R938 +R58 +R31 +R70 +L26 +R26 +R790 +R310 +L11 +R11 +R38 +R413 +R49 +R43 +L343 +L789 +R50 +L4 +R43 +R83 +R74 +R23 +L80 +R72 +R22 +L86 +L8 +R3 +R23 +L926 +R890 +R501 +L61 +L30 +L4 +R34 +L54 +R24 +L78 +R96 +L90 +L28 +R64 +R936 +L56 +R89 +R40 +L27 +R54 +R43 +R37 +R50 +R770 +R57 +R43 +R16 +L1 +L15 +R20 +R404 +L65 +R241 +L90 +L10 +L6 +R6 +R564 +L854 +L75 +R94 +L58 +R29 +L753 +L31 +L16 +R18 +R982 +R11 +L13 +R2 +R18 +R82 +R87 +R58 +R12 +L15 +R63 +R344 +R93 +R88 +L967 +R37 +R44 +L62 +L82 +R76 +R80 +L51 +R56 +R39 +L656 +L44 +R11 +R89 +L96 +L4 +L31 +L69 +R39 +R61 +L61 +L64 +L61 +L6 +R872 +R6 +R131 +R60 +L24 +R30 +L98 +L83 +R86 +R471 +R62 +L99 +R77 +L38 +L45 +L11 +L7 +R2 +L52 +R89 +R98 +L70 +L94 +R51 +R89 +R44 +L55 +L70 +L30 +L76 +L907 +L34 +L39 +L818 +L226 +L75 +R32 +L390 +L941 +L738 +L93 +R90 +R73 +R42 +L34 +R134 +R10 +L60 +L50 +R28 +L46 +L66 +L581 +R465 +L76 +L42 +R201 +R84 +L96 +R290 +R68 +L7 +R49 +R44 +R734 +L49 +L82 +L417 +L1 +R731 +R85 +R284 +R50 +R74 +L322 +R27 +L15 +L14 +R54 +L654 +L65 +R965 +R77 +L50 +R173 +R79 +R521 +R2 +R28 +L30 +R472 +L72 +R38 +R49 +L87 +R49 +R99 +L48 +R9 +R91 +R62 +R538 +R27 +L621 +L84 +L15 +L75 +L32 +R68 +L55 +L149 +L964 +L94 +L606 +L576 +L42 +L79 +R77 +R20 +L11 +R11 +L27 +R42 +L72 +L343 +R46 +R990 +L334 +R98 +L38 +R485 +L47 +R845 +L45 +R14 +R495 +R91 +R63 +L73 +L49 +L924 +R14 +L4 +R23 +R950 +R829 +R6 +R81 +L86 +R70 +R89 +R28 +R34 +R49 +L88 +R925 +L19 +R367 +R25 +L7 +R14 +R83 +R50 +R868 +L59 +R42 +L1 +R914 +L97 +L61 +L56 +R38 +L60 +R94 +R389 +R39 +L12 +R69 +L66 +L91 +R18 +L91 +L27 +R24 +R76 +L940 +L89 +R7 +L86 +R65 +L57 +L70 +R38 +R81 +L49 +R368 +L568 +R36 +R76 +R19 +L31 +R39 +L86 +L953 +R2 +R45 +L204 +R57 +L33 +L63 +R509 +R87 +R93 +L93 +R14 +R48 +R38 +R75 +L75 +R821 +L98 +R49 +R3 +R225 +R30 +L23 +L37 +L86 +R28 +L612 +L68 +L32 +L93 +L98 +L9 +R68 +R660 +R56 +L84 +R74 +L99 +R25 +R26 +R47 +R517 +L90 +R70 +L48 +R50 +L34 +R62 +R46 +R341 +R88 +L575 +L965 +L193 +L20 +R78 +L97 +R17 +L702 +L46 +L1 +R29 +R78 +R52 +L15 +R85 +R54 +R46 +L74 +L26 +L795 +R736 +L8 +L63 +R289 +R87 +L146 +R627 +R13 +L94 +L56 +L92 +L90 +L285 +L39 +L284 +L31 +L369 +L69 +L31 +L457 +R12 +R45 +L13 +L87 +R81 +R19 +R32 +R87 +R67 +R887 +R127 +L658 +L23 +R93 +R88 +R44 +L44 +R78 +L35 +L43 +L30 +R30 +R45 +R93 +L64 +L74 +L65 +L635 +L75 +L25 +L248 +L52 +L59 +L41 +L790 +R82 +L92 +R11 +R35 +L1 +L60 +R715 +R98 +R702 +R172 +L72 +L65 +L96 +R75 +L22 +R846 +L38 +R79 +L79 +R78 +R22 +R36 +R664 +L30 +L70 +L471 +R71 +L17 +R46 +L61 +R575 +L92 +R31 +L9 +L855 +R853 +L71 +L24 +R81 +R38 +L1 +L1 +R446 +R61 +L42 +R50 +R604 +L912 +R68 +L68 +L50 +R50 +L376 +L25 +L258 +L77 +R83 +R66 +L81 +R78 +R190 +L759 +R45 +R66 +L39 +R11 +L67 +R43 +R83 +L83 +R48 +L48 +L14 +L389 +R45 +L30 +L82 +L991 +R66 +L27 +R53 +L31 +L723 +L77 +L42 +R98 +R444 +L528 +L72 +L72 +R73 +L60 +L78 +R315 +L78 +L75 +R194 +R818 +R63 +L272 +R972 +L964 +L41 +L1 +L94 +R36 +L68 +L606 +R72 +L18 +R431 +L626 +R79 +R665 +R552 +L32 +R40 +L1 +R299 +R77 +L53 +L45 +R98 +R29 +L54 +L61 +R73 +R613 +L60 +R282 +L49 +L273 +L88 +R54 +L71 +R5 +R59 +R41 +R36 +L8 +R69 +L97 +L72 +L28 +L23 +R23 +R12 +L420 +L92 +L29 +R17 +L71 +R61 +R78 +R8 +L82 +L82 +R54 +R725 +R521 +R8 +L983 +R21 +R54 +L42 +R55 +L13 +R16 +R684 +R10 +L610 +L27 +R27 +L21 +L37 +L78 +R49 +L13 +R73 +R62 +R53 +L88 +L92 +R57 +L65 +R98 +R2 +R25 +R75 +R14 +R27 +R759 +R6 +L19 +L31 +L719 +L167 +R76 +L84 +L63 +R1 +R89 +R22 +R125 +L92 +L44 +R1 +L94 +R39 +R17 +L63 +L15 +R313 +R29 +R10 +L237 +R15 +R8 +L62 +L28 +R602 +L423 +R35 +L47 +L28 +R28 +R13 +L691 +R79 +L1 +R17 +R83 +R16 +R56 +L750 +R78 +L49 +L75 +L33 +R57 +L763 +L7 +R59 +L1 +R512 +R53 +L53 +L55 +L45 +L30 +L70 +L76 +R855 +L579 +L22 +R24 +R98 +R24 +L24 +R329 +R20 +L501 +R48 +L36 +L88 +L80 +R58 +R6 +R44 +R36 +R64 +L54 +L548 +R2 +R53 +L53 +L59 +R159 +R1 +R80 +L88 +L72 +R94 +L44 +R90 +R39 +R61 +L479 +L790 +L792 +L95 +L112 +R50 +L43 +R93 +R307 +R39 +L39 +R992 +R8 +R67 +R735 +L2 +R56 +L86 +R179 +R22 +L919 +L21 +L634 +L97 +R119 +L26 +R797 +R3 +L88 +L5 +R49 +L57 +R8 +R17 +L17 +L48 +R222 +R26 +L172 +L54 +R65 +R61 +L90 +L20 +R10 +L464 +R31 +L4 +L46 +R14 +L17 +R86 +R15 +R85 +R1 +R14 +L109 +L12 +R629 +R89 +L12 +L261 +R5 +R56 +R52 +L52 +R91 +R25 +R84 +R84 +L38 +R363 +L66 +L96 +L9 +L38 +R57 +R77 +R3 +L37 +L1 +R56 +L494 +R28 +L30 +R259 +L64 +L54 +R74 +L374 +R37 +L78 +L59 +L59 +L933 +R92 +L97 +L603 +R52 +L87 +R4 +R59 +L29 +R1 +R92 +R29 +R12 +L24 +R337 +R49 +L99 +L57 +R961 +R69 +L49 +R80 +R1 +L30 +R141 +R788 +L30 +R30 +L371 +R71 +L20 +L680 +L70 +R70 +L595 +R95 +R25 +L25 +L66 +R54 +R12 +R54 +R99 +L11 +R95 +L37 +L78 +R178 +L798 +L2 +R354 +R78 +L96 +R64 +L14 +L86 +R44 +L26 +R82 +L12 +L88 +L98 +L14 +R1 +R68 +R11 +R95 +R43 +R94 +R54 +L46 +R92 +R67 +R33 +R591 +L57 +R77 +L27 +R16 +R11 +L3 +L8 +L7 +L182 +R76 +L87 +L34 +L93 +R73 +R98 +R49 +L93 +L19 +L881 +R76 +R24 +L57 +R925 +R79 +R13 +R658 +R82 +R84 +L41 +R357 +R13 +L550 +L26 +L3 +R66 +L59 +L44 +L760 +R63 +L686 +L14 +R96 +R19 +R85 +L88 +R88 +R36 +L13 +L473 +L5 +R45 +L90 +L261 +L57 +R37 +R81 +R27 +R81 +R92 +R37 +L3 +R66 +R857 +R81 +L38 +L277 +R15 +R62 +R38 +R62 +R57 +L57 +L28 +R82 +R46 +R59 +L78 +L78 +L3 +R44 +R45 +R84 +R512 +R12 +L27 +L7 +R83 +R86 +R68 +R27 +L30 +R3 +L45 +L66 +L789 +L85 +R138 +L743 +L310 +R95 +R5 +R53 +R24 +R91 +L93 +L75 +R85 +L95 +L90 +R61 +L61 +L35 +R35 +L131 +R40 +L388 +R7 +L28 +R33 +L33 +L62 +L698 +L40 +R363 +R670 +R365 +L98 +L114 +L79 +R63 +R42 +R104 +L66 +R50 +L62 +R16 +L54 +R55 +R469 +L38 +R14 +R92 +R88 +L80 +R33 +R67 +R29 +L29 +R702 +L2 +R40 +L48 +R8 +L55 +R55 +R8 +L21 +R65 +R91 +L824 +R95 +R817 +R21 +L18 +L6 +R78 +R46 +R98 +L97 +R55 +R312 +L74 +R654 +L33 +L75 +L92 +L16 +R59 +L94 +R917 +R69 +L38 +L23 +L74 +R15 +R456 +L44 +R85 +R288 +R98 +R721 +R61 +L44 +L31 +L98 +L25 +R81 +R37 +R22 +R74 +R53 +R77 +L26 +R74 +L74 +L37 +L33 +L52 +R34 +L218 +L96 +L12 +R807 +R32 +L25 +L86 +L8 +R573 +L79 +L83 +L78 +L39 +R643 +L32 +R89 +R87 +L58 +L872 +R26 +R14 +L97 +R99 +L99 +R42 +R58 +R2 +L67 +R90 +R75 +R69 +R31 +L57 +L643 +L543 +L57 +L52 +L85 +R31 +L74 +R72 +R8 +R7 +R64 +R9 +R95 +R25 +R31 +L64 +R681 +R52 +R84 +L84 +L71 +L17 +R639 +R49 +L35 +L27 +R53 +L81 +R51 +R29 +L90 +R41 +L51 +L60 +L938 +L698 +L381 +R87 +R26 +L90 +L3 +R27 +R85 +L45 +R10 +L17 +L93 +R314 +L14 +L5 +R129 +L2 +L22 +L42 +L28 +R70 +L46 +L43 +R47 +R81 +R8 +L827 +L603 +R49 +L46 +L73 +R383 +R879 +L34 +L12 +R606 +R11 +L3 +R74 +R23 +R13 +R71 +R42 +R41 +R7 +R39 +R274 +R39 +R31 +L85 +R54 +L14 +R276 +R582 +L44 +L839 +L87 +L74 +R75 +R20 +R5 +L955 +L6 +L23 +L16 +R3 +R60 +R28 +L98 +L61 +L133 +R388 +L90 +L40 +L57 +R64 +R368 +L32 +L80 +R380 +L70 +R12 +R876 +L794 +R19 +R683 +L25 +L45 +L99 +L363 +L75 +R81 +R70 +R77 +R53 +L3 +L26 +R29 +R63 +R93 +R75 +R69 +R43 +R57 +R25 +R83 +R4 +R79 +R715 +L6 +L95 +R76 +L81 +L36 +L64 +L91 +R91 +L130 +L66 +R83 +L87 +R479 +R66 +R55 +R26 +R74 +L534 +L50 +R84 +R31 +R19 +R71 +L643 +R83 +L74 +L87 +L6 +R89 +R17 +L57 +R57 +L94 +R94 +R66 +L687 +R21 +R6 +R22 +R92 +R80 +L542 +L13 +R55 +R69 +R31 +R69 +L343 +R86 +L134 +R24 +L2 +L95 +L11 +L70 +R65 +R2 +R10 +R811 +R88 +R55 +L16 +L439 +L82 +L88 +R533 +R13 +R24 +R73 +R42 +L30 +L804 +R97 +R622 +R310 +L66 +R56 +R95 +L89 +L6 +R13 +R87 +R10 +L10 +R24 +L66 +R442 +L30 +R38 +R46 +R46 +R9 +L409 +L47 +L89 +R515 +R13 +R48 +R40 +R98 +R22 +L88 +R88 +R90 +L20 +R30 +L34 +R24 +R10 +R9 +L33 +R38 +R54 +R329 +L97 +L47 +R45 +L53 +L15 +R89 +R74 +R5 +L806 +L892 +R14 +L22 +L92 +R20 +R41 +L78 +L83 +R47 +L47 +L52 +L830 +R13 +L31 +L2 +R90 +L776 +L428 +R16 +R91 +L91 +R79 +L55 +L45 +R12 +L91 +L25 +R299 +L55 +L150 +L48 +R98 +L19 +L86 +R46 +R40 +R26 +L454 +R7 +L946 +L33 +L19 +L981 +R7 +L7 +L51 +R51 +R97 +R731 +R59 +L25 +L18 +R56 +R69 +L468 +L65 +L36 +L66 +R66 +R38 +R62 +L13 +L79 +L608 +R90 +R80 +L74 +L25 +L17 +L16 +L26 +R88 +R12 +L12 +L50 +R22 +R89 +R7 +R665 +R467 +L86 +L83 +L31 +R91 +R9 +L31 +L69 +R11 +L6 +L605 +L7 +R99 +R8 +L76 +L982 +R53 +L92 +R92 +R56 +R49 +R90 +L90 +R82 +L882 +R859 +L8 +L201 +L34 +L69 +L47 +L25 +L73 +L75 +R25 +R690 +R44 +L9 +L77 +L238 +L62 +L83 +R27 +L89 +L355 +R78 +L538 +R81 +L69 +L61 +R809 +R89 +R11 +R393 +R292 +L96 +L2 +L62 +R475 +R50 +R41 +R9 +R28 +L40 +L49 +R25 +L31 +L372 +R39 +R672 +R32 +R96 +R41 +L941 +L18 +R76 +L58 +L59 +R429 +L370 +R55 +R87 +R86 +R72 +R29 +R71 +L92 +L462 +L97 +R61 +R90 +L39 +L61 +R93 +L39 +R23 +R23 +R40 +R360 +R769 +L69 +R3 +L757 +R18 +L5 +R74 +L14 +R76 +R82 +L436 +R50 +L91 +L66 +R66 +R269 +R92 +L61 +R83 +R758 +R2 +L43 +L575 +L922 +R21 +L50 +L70 +R96 +R38 +R62 +L85 +R75 +R10 +R129 +L30 +L99 +L92 +R592 +L13 +R30 +R56 +R29 +L27 +R94 +R65 +L22 +L95 +R83 +L682 +R71 +L22 +L1 +L77 +L37 +L3 +R51 +R59 +R41 +L93 +R85 +L90 +L2 +L18 +R60 +R58 +R90 +R10 +R6 +L81 +L25 +R5 +R45 +L15 +L35 +L37 +R31 +L391 +L29 +R313 +L388 +L99 +L25 +R8 +L48 +R65 +L88 +R70 +R68 +R50 +R257 +R43 +L92 +L47 +L26 +L573 +R38 +R31 +R826 +R43 +R5 +L79 +R970 +R53 +R1 +L41 +R68 +R52 +R71 +R65 +L93 +L572 +L47 +R47 +L40 +L94 +L66 +R56 +R44 +R84 +R754 +L316 +R98 +R440 +L97 +R37 +R61 +L57 +R13 +R83 +R31 +R98 +L29 +L82 +R982 +L632 +L968 +R60 +L60 +L19 +R419 +L864 +L36 +L66 +L71 +R37 +L89 +R93 +L32 +L49 +L83 +L540 +L59 +L86 +R45 +L87 +R790 +R697 +R553 +L281 +R41 +R56 +R31 +R70 +L70 +R28 +L28 +L39 +R39 +R86 +R14 +L89 +R89 +R323 +L968 +L55 +R54 +L82 +L97 +L36 +R61 +R19 +L19 +L33 +L51 +L54 +R20 +L79 +L630 +L73 +R61 +R54 +R47 +L62 +R453 +R47 +L40 +R359 +L97 +R4 +R30 +L84 +L72 +R657 +R56 +R95 +L71 +L4 +L92 +L57 +L708 +L42 +R66 +L37 +L463 +L29 +R729 +R96 +L96 +L40 +R40 +L64 +L36 +L529 +R3 +L74 +L33 +L66 +L51 +R6 +L413 +R74 +L67 +L50 +R19 +R181 +L404 +R68 +L76 +L937 +L93 +L10 +L48 +L615 +R11 +R56 +R48 +R69 +R31 +R94 +R672 +R88 +L90 +L44 +L20 +L76 +L24 +L85 +R85 +L374 +L126 +R67 +R97 +R69 +L33 +L3 +R19 +L79 +L86 +L132 +L37 +R18 +L288 +L12 +R55 +R45 +R83 +R62 +R55 +L78 +R859 +R19 +L34 +L966 +L35 +R29 +L94 +L23 +R75 +R22 +R55 +R399 +R38 +R428 +R6 +L30 +R24 +L75 +L97 +R29 +R56 +R22 +L54 +R25 +R999 +R95 +L269 +L659 +L13 +R34 +L68 +L25 +R6 +L23 +L58 +R81 +R68 +L68 +R634 +R66 +R89 +R79 +R32 +L37 +L63 +R25 +L80 +R72 +L852 +L365 +L7 +R42 +L60 +L58 +L823 +L94 +L59 +R306 +L25 +R78 +L29 +R29 +R86 +L486 +R891 +L94 +R3 +L13 +L60 +R97 +L424 +R76 +L76 +R919 +R81 +L23 +L577 +L81 +R25 +L44 +L91 +R916 +L86 +L809 +L47 +R725 +L5 +R46 +L49 +L291 +L29 +R92 +R668 +L40 +R91 +R909 +L50 +L50 +L14 +R19 +L5 +R59 +R7 +R54 +R58 +R73 +R97 +L553 +R78 +R30 +L75 +R38 +R60 +R74 +R86 +R187 +R27 +R5 +R19 +L142 +L18 +L47 +L64 +R21 +L74 +R75 +R25 +L87 +L63 +R512 +L79 +L19 +L45 +R81 +L40 +L47 +L13 +L11 +R953 +L42 +R90 +L95 +R22 +L40 +L57 +L20 +R978 +R98 +L90 +L23 +L90 +L98 +R325 +L92 +L8 +L497 +R12 +R85 +L64 +L99 +L37 +L91 +R491 +R15 +L90 +L395 +L14 +R84 +L38 +R475 +L45 +R19 +L11 +L51 +L49 +L72 +L69 +R96 +R45 +R86 +R33 +L19 +L99 +L795 +R94 +R37 +R66 +L76 +L76 +R49 +R61 +R39 +L917 +L8 +L52 +L44 +R21 +R15 +R99 +L314 +R27 +R71 +R198 +L754 +L691 +R16 +L67 +R13 +L13 +R64 +L54 +L70 +R68 +L59 +L649 +R23 +R314 +L37 +R14 +L57 +L298 +L59 +L810 +L160 +R53 +R72 +L43 +L12 +R97 +L36 +L6 +L62 +R598 +R9 +R1 +R426 +L41 +R484 +R30 +L72 +L51 +R62 +L39 +R78 +R38 +L91 +R75 +L97 +R18 +L604 +R34 +L85 +L7 +R41 +L6 +L81 +R87 +R9 +L39 +L2 +L48 +L46 +L391 +R917 +R10 +L83 +L31 +L978 +R144 +R42 +R96 +L44 +R56 +L3 +L40 +R23 +L75 +L17 +R61 +L57 +R396 +R41 +L96 +R13 +R33 +L72 +R81 +L29 +R26 +L97 +L33 +R44 +R526 +R12 +R44 +R12 +R36 +L87 +R546 +R67 +R91 +L52 +R184 +L90 +R99 +L47 +R26 +R22 +L84 +R67 +L83 +R21 +L293 +L176 +R66 +R53 +R77 +R31 +L44 +L47 +L588 +L974 +L226 +L86 +L32 +R84 +L966 +L99 +L852 +L9 +R48 +R74 +R28 +L68 +L22 +L4 +L54 +R60 +L81 +L921 +R62 +R38 +R67 +L79 +L18 +R430 +R52 +L86 +L45 +L92 +L129 +R69 +R88 +R98 +R70 +L25 +L60 +L840 +R629 +L29 +R86 +L86 +L44 +R75 +L23 +R92 +L626 +R26 +R26 +L26 +L42 +L818 +R860 +R50 +R40 +L90 +L509 +L391 +R14 +R51 +L655 +L10 +R38 +L38 +R63 +R63 +L20 +R97 +R97 +R87 +L45 +R395 +L37 +L34 +R41 +L90 +L417 +L94 +R76 +R18 +L69 +R79 +L323 +L79 +L97 +L49 +R23 +L385 +L63 +L37 +L1 +L99 +R85 +R15 +L91 +R91 +L93 +R10 +L74 +R85 +L47 +R19 +R20 +R83 +L64 +L897 +L272 +L370 +R59 +R41 +R80 +L80 +R63 +R337 +L5 +L95 +R31 +R28 +R337 +L58 +R18 +R26 +R61 +R602 +L145 +L47 +R29 +R90 +L72 +L67 +R11 +R92 +R871 +R893 +R25 +R75 +R9 +L9 +R5 +L5 +L461 +L869 +L570 +R82 +L46 +L36 +R25 +L538 +L87 +L479 +R79 +L49 +R16 +R44 +R589 +L576 +R735 +R41 +L832 +R32 +L71 +R471 +L17 +L982 +R74 +L75 +L723 +L77 +R33 +R67 +L27 +R27 +R84 +L84 +R64 +L58 +L73 +R67 +L32 +R82 +R14 +R8 +R74 +R316 +R8 +L70 +L811 +R11 +R54 +R46 +L32 +R29 +R17 +L14 +R11 +R89 +R85 +L24 +R8 +R50 +R81 +L923 +R23 +L37 +L63 +R16 +L16 +R494 +R6 +L73 +L68 +L637 +R78 +L93 +L107 +L733 +R33 +L838 +R31 +R7 +L53 +L47 +R490 +R17 +R93 +R43 +R17 +L8 +R37 +R11 +L56 +R67 +L40 +R67 +L54 +L284 +L959 +L41 +R87 +R13 +L18 +L131 +R49 +L264 +R27 +R80 +R957 +L121 +R919 +L20 +L78 +L74 +R56 +R18 +L70 +L30 +R74 +R31 +L18 +L31 +L51 +L36 +L69 +R19 +R70 +R201 +L71 +R81 +L17 +R88 +R29 +L479 +R14 +R65 +R21 +R74 +R5 +R12 +L12 +L45 +L55 +R79 +L79 +R243 +L90 +L14 +L39 +L41 +L299 +L99 +R39 +L36 +L78 +L41 +L14 +R13 +L77 +R50 +R583 +L851 +R19 +R93 +R239 +R568 +L68 +L572 +L28 +L20 +L77 +L59 +R56 +R99 +L99 +R745 +L45 +L19 +R19 +L21 +R885 +L74 +R10 +R911 +R38 +L49 +L431 +R231 +R57 +R43 +R12 +R88 +L36 +L39 +L887 +R62 +R72 +R528 +R426 +R74 +R77 +L77 +R32 +R72 +R796 +R16 +R2 +R5 +R77 +L43 +R43 +L94 +R71 +L732 +R72 +R626 +R57 +L495 +R28 +R70 +R88 +R9 +L64 +R564 +L38 +R38 +R620 +R82 +R80 +R63 +L826 +L19 +L23 +L81 +L55 +L741 +L77 +R36 +L59 +L33 +R33 +L99 +L72 +L20 +L9 +R241 +L41 +R86 +L86 +L93 +L36 +R435 +L6 +L38 +L20 +L55 +R69 +R70 +R44 +R30 +R81 +R86 +L64 +R74 +R80 +R545 +L1 +L627 +L23 +R60 +R189 +L86 +R86 +R8 +R804 +R627 +R71 +L57 +R48 +L84 +R87 +L83 +R179 +L97 +R36 +L12 +R960 +L45 +L48 +L67 +R462 +R711 +L39 +R539 +R666 +L31 +L35 +R8 +L79 +R50 +L879 +R61 +R62 +R177 +R47 +L47 +L82 +L45 +L73 +R17 +R49 +L18 +L98 +R250 +L57 +L15 +L28 +L94 +R36 +L194 +R52 +L269 +L931 +L939 +L161 +R193 +R41 +L42 +L92 +L12 +L88 +R831 +L731 +R85 +R58 +R41 +R64 +R122 +R5 +L6 +R8 +R23 +R11 +L14 +R103 +L7 +L45 +L43 +R95 +R47 +R94 +R779 +R86 +R43 +L20 +L60 +L69 +R128 +R827 +L55 +L26 +R28 +R710 +L12 +L332 +L68 +R14 +L77 +R12 +L12 +R328 +R935 +L412 +R28 +L456 +R97 +R67 +L24 +R87 +R913 +R98 +R502 +L840 +L56 +L54 +R450 +L88 +R94 +L68 +R38 +R38 +R88 +R98 +R28 +R72 +R83 +R69 +R5 +L57 +R53 +L389 +R636 +R89 +L89 +R504 +R10 +R986 +R42 +R458 +R75 +L16 +L94 +L65 +R76 +R724 +R14 +L14 +L60 +L88 +R87 +R47 +R57 +R57 +L13 +L772 +R16 +R51 +L82 +L74 +R74 +L54 +L74 +L77 +R5 +L408 +R50 +R12 +R46 +L62 +R44 +L54 +R772 +L4 +L96 +L17 +L30 +R56 +R39 +R92 +R460 +R5 +L5 +L51 +R351 +L84 +L347 +R37 +R863 +R233 +L45 +R543 +R74 +L874 +L45 +R45 +L149 +R49 +L85 +L14 +L26 +L75 +L34 +L573 +R85 +L78 +L13 +L92 +L95 +R252 +L11 +L469 +L72 +L98 +L20 +R30 +L312 +L711 +R4 +R120 +R69 +R85 +R33 +R72 +R74 +L46 +R95 +L295 +L87 +L96 +R94 +R78 +L95 +L52 +L22 +L260 +L23 +L137 +R507 +R793 +L96 +L4 +R27 +L527 +R70 +R30 +R61 +R75 +R56 +R83 +L17 +R58 +L916 +L31 +L19 +L50 +L70 +R2 +R68 +L16 +L3 +R69 +L84 +R8 +L267 +R93 +R88 +L88 +L76 +R578 +R708 +R23 +L74 +R41 +R38 +L38 +R857 +R43 +R13 +L432 +L15 +R99 +R43 +L4 +L87 +R40 +L644 +R379 +R81 +R65 +L96 +R58 +R98 +R5 +L80 +R77 +R70 +L24 +L60 +R53 +L39 +R66 +L344 +L1 +R56 +L77 +L90 +R775 +R15 +R16 +R84 +L41 +R41 +L8 +R98 +L890 +R9 +R3 +R54 +L80 +L83 +R65 +R33 +R1 +L356 +L108 +L10 +L851 +R27 +R42 +R46 +L692 +L817 +L83 +R58 +R42 +R51 +L74 +R23 +R957 +R86 +R70 +R724 +R14 +L851 +L42 +R42 +R83 +L83 +L38 +R438 +R724 +L17 +R938 +L45 +R50 +R50 +R118 +R82 +L22 +R856 +L86 +L48 +R96 +R78 +R36 +R95 +R3 +R92 +L11 +L52 +L57 +R76 +L56 +R85 +R15 +R6 +L21 +L61 +R21 +R86 +L43 +L66 +R46 +L30 +L689 +R12 +L11 +R57 +R66 +R41 +L69 +L45 +R18 +R679 +L37 +L652 +R31 +L96 +L80 +L963 +L24 +R24 +R99 +L4 +L9 +L86 +L74 +R78 +L38 +R34 +L21 +R21 +L554 +R20 +R133 +L99 +R56 +L556 +R539 +L77 +L1 +L19 +R380 +R78 +R870 +L368 +L85 +R86 +R97 +L47 +R47 +R981 +R59 +R75 +R25 +R60 +L87 +L14 +R501 +L9 +R53 +R56 +R97 +R57 +R921 +L175 +L822 +R22 +L908 +L92 +L45 +R45 +R28 +L28 +L84 +L85 +L613 +L85 +L33 +L20 +L964 +L386 +R70 +L6 +R6 +R553 +R73 +R12 +L13 +L25 +R66 +L45 +L77 +R56 +L4 +R3 +R97 +R4 +L73 +R72 +L19 +R16 +L96 +L91 +R76 +R915 +L20 +R78 +R12 +L70 +L35 +R93 +R99 +R82 +R61 +R70 +L41 +L94 +L35 +L98 +R370 +R84 +L28 +L283 +L991 +R46 +L2 +L34 +L16 +L12 +R283 +L840 +L47 +R31 +L26 +L89 +L857 +R53 +R64 +L208 +L28 +L72 +R1 +R99 +L16 +R633 +R4 +L21 +R91 +R609 +L704 +L1 +R98 +L93 +L848 +L32 +L620 +R807 +R793 +R64 +R36 +L21 +R21 +R70 +L70 +R49 +R251 +R31 +R69 +R93 +R87 +R20 +R58 +R234 +R8 +R74 +R1 +L160 +L669 +R54 +R43 +R96 +R40 +R588 +L264 +R97 +L17 +R617 +R66 +L9 +L59 +R3 +R99 +L58 +R53 +R68 +L63 +L48 +R39 +R85 +R70 +L80 +R34 +L516 +R686 +R45 +L15 +R63 +R37 +L428 +R94 +R68 +L53 +L81 +L956 +L46 +L59 +R261 +L807 +L77 +L80 +L23 +L35 +R22 +L20 +L480 +L493 +R23 +L30 +R96 +L29 +R133 +L90 +R30 +R89 +R71 +R42 +R73 +L385 +R870 +L3 +R3 +L13 +R6 +L493 +R22 +L15 +L7 +R51 +R49 +R585 +L185 +L37 +R77 +R123 +L87 +R24 +L26 +R16 +L374 +R23 +L892 +R17 +R36 +R12 +L181 +R44 +L54 +R79 +R4 +R26 +L95 +L35 +R296 +R4 +L22 +L78 +R80 +R39 +L55 +R66 +R89 +L719 +L448 +L638 +R337 +R49 +L99 +R138 +R52 +R83 +L96 +L13 +R17 +R27 +R91 +R667 +R91 +L58 +L759 +L41 +R97 +R231 +L65 +L71 +L76 +L22 +R6 +L90 +R51 +L28 +R30 +L63 +R8 +R43 +R334 +R94 +L33 +R75 +L472 +L5 +R14 +R28 +R914 +L717 +L55 +L89 +R68 +L55 +L776 +R75 +R49 +R99 +R99 +R4 +R898 +R67 +L34 +R67 +R758 +R90 +L92 +R43 +L79 +R114 +L22 +R687 +R78 +R23 +R63 +R95 +R27 +R5 +R10 +R86 +L67 +R30 +L7 +R42 +L949 +L35 +L14 +R292 +L371 +R93 +R43 +R57 +R52 +L92 +R318 +L17 +L73 +L88 +R14 +L518 +R72 +R724 +R10 +L80 +R74 +R145 +L92 +L99 +R98 +L48 +R85 +L85 +L440 +L5 +R7 +R663 +L125 +L92 +L8 +L26 +R26 +R96 +R79 +R25 +R50 +L50 +R32 +L32 +R71 +R72 +R2 +R42 +R13 +L84 +L23 +L47 +L337 +R91 +R66 +L66 +L17 +L318 +L46 +R316 +R52 +R70 +L135 +L22 +R34 +L34 +L41 +L18 +R86 +L426 +L84 +R513 +L1 +R22 +L16 +R298 +L33 +R39 +L639 +R68 +L134 +R66 +L62 +R79 +L17 +R42 +R58 +R82 +L82 +L76 +L207 +L9 +R92 +R99 +R1 +L41 +R79 +R351 +R11 +R730 +R70 +R18 +L18 +R19 +R61 +R976 +L137 +R834 +L53 +L741 +R763 +L15 +R48 +L90 +R52 +L550 +L90 +R23 +R184 +R953 +L37 +R89 +L89 +L775 +R8 +R67 +R78 +R22 +L392 +L80 +L28 +L30 +L41 +L82 +L372 +L175 +R69 +L69 +L90 +R71 +L52 +R49 +L878 +R76 +L57 +L23 +L85 +R82 +L73 +L20 +R81 +L18 +R17 +R46 +L44 +L82 +L67 +R2 +L10 +R9 +R66 +L680 +L39 +R60 +R59 +L65 +R479 +L73 +R59 +R51 +L57 +R206 +L89 +L65 +L88 +R31 +R39 +L28 +R135 +R665 +L36 +R37 +L95 +R20 +R38 +L853 +R89 +L298 +L2 +L6 +R6 +L49 +R5 +L56 +R27 +R73 +R249 +R56 +L120 +R23 +R97 +L105 +R28 +R389 +R49 +L36 +R76 +L6 +R43 +L543 +R366 +R76 +R57 +L61 +R62 +R554 +R96 +R250 +L27 +R82 +R745 +L266 +L34 +R2 +R51 +R5 +R42 +L21 +L480 +R101 +R932 +R810 +L5 +R232 +R373 +L42 +R68 +L12 +L30 +R74 +L35 +L65 +R63 +R452 +L67 +L95 +R465 +L75 +L23 +R62 +L82 +L877 +R90 +R53 +L60 +L6 +R81 +R926 +L192 +R85 +L10 +L17 +L97 +L98 +R59 +L49 +R73 +L61 +L25 +R84 +L59 +R76 +R79 +L6 +L69 +L99 +L38 +R64 +L7 +L49 +L93 +L58 +R59 +R41 +R77 +L86 +R9 +R68 +R32 +R20 +L20 +R44 +R95 +R83 +R89 +L14 +L97 +L15 +R68 +R69 +L7 +R73 +L15 +L56 +R74 +L91 +R43 +R47 +L40 +R50 +R44 +R56 +L61 +L18 +L21 +R69 +R31 +L71 +L29 +L27 +L73 +L61 +R75 +R86 +L90 +R32 +L26 +L3 +R46 +L38 +L18 +R36 +R7 +R21 +R6 +R19 +R43 +R1 +R17 +R13 +L17 +R3 +L35 +L31 +L45 +L1 +L31 +L44 +L43 +L23 +L2 +R9 +R7 +L35 +L12 +L5 +R35 +R5 +R23 +R32 +L43 +L23 +L36 +R8 +R23 +R4 +L25 +L49 +R43 +R37 +R47 +L38 +L9 +R18 +R10