diff options
| -rw-r--r-- | .gitignore | 2 | ||||
| -rw-r--r-- | LICENSE | 42 | ||||
| -rw-r--r-- | Makefile | 76 | ||||
| -rw-r--r-- | README.md | 4 | ||||
| -rw-r--r-- | input/day1.txt | 9328 | ||||
| -rw-r--r-- | input/test-day1.txt | 20 | ||||
| -rw-r--r-- | src/Day1.asm | 645 |
7 files changed, 5099 insertions, 5018 deletions
@@ -1 +1 @@ -build +build
@@ -1,21 +1,21 @@ -MIT License - -Copyright (c) 2025 𝔥𝔞𝔠𝔥𝔢𝔪 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +MIT License
+
+Copyright (c) 2025 𝔥𝔞𝔠𝔥𝔢𝔪
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
@@ -1,38 +1,38 @@ -NASM ?= nasm -LD ?= ld - -SRC_DIR := src -BUILD_DIR := build - -NASMFLAGS ?= -f elf32 -g -F dwarf -LDFLAGS ?= -m elf_i386 - -DAYS := Day1 Day2 Day3 Day4 -ASM_SRCS := $(addprefix $(SRC_DIR)/,$(addsuffix .asm,$(DAYS))) -OBJ_FILES := $(addprefix $(BUILD_DIR)/,$(addsuffix .o,$(DAYS))) -BINARIES := $(addprefix $(BUILD_DIR)/,$(DAYS)) - -.PHONY: all clean day1 list run-day% - -all: $(BINARIES) - -$(BUILD_DIR): - @mkdir -p $(BUILD_DIR) - -$(BUILD_DIR)/Day%.o: $(SRC_DIR)/Day%.asm | $(BUILD_DIR) - $(NASM) $(NASMFLAGS) $< -o $@ - -$(BUILD_DIR)/Day%: $(BUILD_DIR)/Day%.o - $(LD) $(LDFLAGS) -o $@ $< - -day1: $(BUILD_DIR)/Day1 - -run-day%: $(BUILD_DIR)/Day% - ./$(BUILD_DIR)/Day$* - -list: - @printf "Available days:\n" - @for day in $(DAYS); do echo " $$day"; done - -clean: - rm -rf $(BUILD_DIR) +NASM ?= nasm
+LD ?= ld
+
+SRC_DIR := src
+BUILD_DIR := build
+
+NASMFLAGS ?= -f elf32 -g -F dwarf
+LDFLAGS ?= -m elf_i386
+
+DAYS := Day1 Day2 Day3 Day4
+ASM_SRCS := $(addprefix $(SRC_DIR)/,$(addsuffix .asm,$(DAYS)))
+OBJ_FILES := $(addprefix $(BUILD_DIR)/,$(addsuffix .o,$(DAYS)))
+BINARIES := $(addprefix $(BUILD_DIR)/,$(DAYS))
+
+.PHONY: all clean day1 list run-day%
+
+all: $(BINARIES)
+
+$(BUILD_DIR):
+ @mkdir -p $(BUILD_DIR)
+
+$(BUILD_DIR)/Day%.o: $(SRC_DIR)/Day%.asm | $(BUILD_DIR)
+ $(NASM) $(NASMFLAGS) $< -o $@
+
+$(BUILD_DIR)/Day%: $(BUILD_DIR)/Day%.o
+ $(LD) $(LDFLAGS) -o $@ $<
+
+day1: $(BUILD_DIR)/Day1
+
+run-day%: $(BUILD_DIR)/Day%
+ ./$(BUILD_DIR)/Day$*
+
+list:
+ @printf "Available days:\n"
+ @for day in $(DAYS); do echo " $$day"; done
+
+clean:
+ rm -rf $(BUILD_DIR)
@@ -1,2 +1,2 @@ -# aoc-2025 -Advent of code for 2025 +# aoc-2025
+Advent of code for 2025
diff --git a/input/day1.txt b/input/day1.txt index b8cc155..ecc104f 100644 --- a/input/day1.txt +++ b/input/day1.txt @@ -1,4664 +1,4664 @@ -L25 -L8 -L44 -L6 -R1 -R26 -R9 -L47 -R16 -R25 -R12 -L42 -R35 -L24 -R31 -R19 -L43 -L33 -L23 -R9 -L17 -R38 -R42 -L3 -L39 -R35 -L50 -L40 -R4 -L13 -R42 -L16 -L26 -L26 -R5 -R4 -L2 -R36 -L23 -L35 -L46 -L26 -L10 -R45 -R32 -L12 -L8 -L25 -R49 -R71 -L24 -R58 -R63 -R38 -R41 -L60 -L40 -R93 -R33 -R62 -R12 -L97 -R25 -R15 -R4 -R88 -R65 -R3 -R76 -L79 -L85 -L32 -L25 -L14 -L2 -L67 -R25 -L35 -R47 -L40 -R28 -R46 -L46 -L62 -R83 -R93 -L17 -L92 -R78 -R17 -R34 -R23 -R43 -R20 -L35 -L66 -R42 -L28 -R81 -R86 -L775 -R22 -L47 -L17 -L83 -L47 -R24 -R8 -R315 -R59 -R65 -R32 -R63 -R376 -R44 -R77 -R342 -R80 -R86 -L24 -R28 -L28 -L87 -L13 -L29 -L39 -L67 -L37 -L88 -L177 -L623 -L40 -L66 -R49 -L74 -R391 -R518 -L418 -R498 -L98 -R19 -R96 -L39 -L79 -R19 -L87 -R71 -L62 -L42 -R4 -R449 -L49 -R44 -L3 -R72 -R87 -R65 -L65 -R88 -R196 -L728 -R544 -R66 -L49 -L17 -L8 -L92 -L45 -L89 -L66 -L25 -R99 -L74 -R72 -R25 -R59 -R64 -L20 -L62 -R92 -L30 -L89 -R89 -R30 -L74 -L42 -R86 -R978 -L36 -L42 -L172 -R72 -L46 -R46 -L75 -L25 -L31 -L88 -L81 -L498 -L2 -L951 -R51 -R41 -L641 -L49 -L73 -L77 -L8 -L36 -L99 -R15 -L20 -L653 -L29 -R90 -R66 -L3 -L24 -R87 -R25 -R72 -R24 -R22 -R33 -L11 -L665 -L63 -R3 -R83 -L9 -R41 -R59 -L79 -R88 -L10 -R61 -R22 -L83 -L76 -R68 -L382 -L873 -R684 -R79 -L979 -L77 -L44 -L31 -R761 -L30 -R859 -L59 -L55 -R455 -L649 -R39 -L390 -L25 -L775 -L381 -R810 -R571 -L70 -L25 -L42 -R37 -R22 -R99 -L34 -L36 -L23 -R44 -R24 -L35 -R28 -L89 -L98 -R84 -L86 -R54 -R81 -R35 -L62 -L62 -R8 -R4 -R42 -L19 -L23 -L10 -L98 -R37 -L76 -R91 -R598 -R67 -L764 -R97 -L2 -L98 -R90 -L17 -R62 -R273 -R763 -L68 -L903 -L498 -L2 -R95 -R4 -R319 -R82 -R198 -L98 -R83 -L983 -R782 -R18 -R490 -L83 -R893 -L965 -L35 -R72 -L50 -L22 -L335 -R30 -R60 -R272 -L12 -R933 -R52 -R3 -R119 -R78 -R26 -R94 -L20 -R39 -L39 -R724 -R35 -R41 -L28 -L55 -R73 -L90 -R27 -L66 -L61 -R61 -R39 -R519 -R81 -R565 -R51 -R97 -L72 -L402 -L39 -L61 -L10 -R58 -L39 -R52 -L366 -R66 -R365 -R83 -R28 -L779 -L597 -L13 -R613 -L657 -R18 -L22 -L62 -L77 -L84 -R55 -R29 -R535 -R56 -R28 -L7 -L12 -R37 -R63 -R81 -L81 -L31 -L69 -R84 -R716 -L40 -R40 -L6 -R6 -R53 -R247 -R34 -L10 -R76 -L52 -L48 -L37 -R64 -L44 -L21 -R38 -L41 -L8 -R16 -R54 -L82 -L30 -R91 -L55 -R54 -L99 -R45 -R59 -R31 -R686 -L69 -L52 -L2 -R46 -L609 -R57 -L1 -R9 -L796 -R76 -L28 -L16 -R6 -L42 -R2 -L39 -L49 -R843 -R64 -R61 -R99 -R19 -L165 -R65 -L37 -L12 -L51 -L145 -L55 -R56 -R56 -R54 -R226 -R8 -L91 -R91 -L92 -R892 -R3 -L3 -L57 -R457 -R81 -R18 -R62 -L39 -R578 -R43 -R957 -L14 -R51 -R84 -R43 -R7 -L11 -R1 -R39 -L94 -L6 -R52 -L37 -R48 -R37 -L10 -R51 -R44 -L85 -L6 -L6 -R68 -L54 -L41 -R79 -L63 -L77 -R11 -R33 -L4 -R280 -L20 -R24 -L524 -R41 -L41 -L71 -L29 -R49 -L92 -L97 -L60 -R13 -L57 -L56 -R89 -R11 -L75 -R375 -L23 -L575 -R34 -L258 -L655 -R765 -L88 -R29 -R56 -L338 -R60 -L96 -L11 -L27 -R495 -L10 -L58 -L85 -L6 -R65 -R52 -L449 -R330 -L75 -L77 -R98 -L53 -L23 -R23 -R23 -R17 -L40 -L49 -R92 -L10 -L562 -L20 -L51 -R475 -L40 -R589 -R13 -L50 -R91 -L70 -R195 -L203 -L74 -L99 -L27 -R95 -R8 -L71 -R62 -R78 -L37 -R65 -R67 -L29 -L38 -L58 -L81 -R31 -R15 -R99 -R694 -R86 -R62 -L36 -R56 -L80 -R7 -R41 -L22 -R86 -L70 -L15 -L77 -L138 -L48 -L75 -L46 -R169 -R41 -R547 -L88 -R388 -L443 -L45 -L134 -R34 -L92 -L708 -L68 -R911 -L93 -L50 -R14 -R73 -L80 -L7 -R85 -R42 -R673 -R80 -R40 -L87 -R34 -L77 -R39 -R32 -L28 -L33 -L89 -R89 -R76 -L76 -R46 -L946 -R44 -L44 -R20 -R80 -L92 -L8 -R49 -R44 -R96 -L4 -L85 -L84 -L16 -R512 -L7 -L5 -L68 -L832 -L20 -R220 -L69 -L96 -R66 -R53 -R37 -R9 -R211 -L11 -R19 -L419 -R10 -R266 -R20 -L96 -L67 -R67 -L6 -L22 -L75 -L17 -L32 -L583 -R83 -L448 -L35 -L47 -L78 -L73 -L367 -R519 -R81 -L887 -L51 -L62 -R47 -L96 -L935 -R73 -R62 -L51 -R21 -L85 -R49 -L285 -L37 -R47 -R69 -L42 -R72 -R65 -L81 -R67 -R292 -R16 -L68 -R28 -L82 -L46 -L98 -R98 -L318 -R18 -L43 -R31 -L88 -R94 -L292 -R5 -R93 -R66 -L70 -R4 -L29 -L98 -L39 -R266 -L903 -L21 -L40 -R64 -L735 -L19 -R54 -R563 -R737 -R454 -R55 -L70 -L39 -R39 -L7 -R71 -L3 -L13 -R1 -R153 -L88 -L53 -L45 -L55 -R397 -R97 -L536 -L58 -R847 -R52 -L299 -R91 -R9 -R49 -R51 -R67 -L51 -L79 -L490 -R96 -L243 -R45 -R73 -L63 -L23 -R968 -R27 -R173 -L7 -L35 -R58 -R84 -R11 -R89 -R81 -L20 -L95 -L66 -L326 -L74 -R70 -R30 -L152 -R52 -R559 -R341 -R96 -L687 -L9 -L28 -R373 -R73 -R91 -R102 -L22 -R211 -R97 -L835 -L62 -L4 -L69 -L68 -L85 -R397 -L54 -L17 -L2 -L98 -R34 -R366 -R61 -L61 -R15 -L81 -R3 -L645 -L16 -R24 -L263 -R63 -R44 -R56 -R43 -L43 -L59 -L309 -R68 -R73 -R62 -R97 -R68 -R2 -L2 -L65 -L80 -L69 -R14 -L7 -L93 -R47 -L58 -R245 -R66 -L12 -L88 -L67 -L47 -L586 -R90 -L9 -L797 -L84 -R920 -R80 -R836 -R64 -R99 -L799 -R394 -L294 -R69 -L569 -L26 -R26 -L66 -R7 -L16 -L251 -R21 -R5 -L56 -L144 -L52 -R99 -L93 -L54 -L31 -R31 -L99 -L401 -L8 -R18 -L10 -L8 -R47 -L39 -L37 -R37 -L519 -R69 -R77 -L69 -L90 -R49 -L17 -R49 -R43 -R8 -L38 -L19 -R57 -R35 -L35 -L347 -L2 -L217 -R661 -L562 -L317 -R3 -R36 -L52 -R6 -R48 -L38 -L36 -R85 -L22 -L46 -L9 -R9 -R1 -R61 -R29 -R85 -L476 -R68 -R58 -L226 -R728 -R72 -L67 -L33 -R80 -L33 -R53 -R34 -L165 -L69 -L60 -L40 -L61 -R10 -R61 -L15 -L29 -L66 -L459 -R959 -L12 -L95 -L93 -R96 -R54 -R67 -R83 -R515 -L15 -R325 -L25 -L66 -L634 -R51 -R449 -R52 -R11 -L63 -L35 -R48 -R50 -R78 -R2 -L19 -R253 -R19 -L12 -R16 -L28 -L72 -L29 -L71 -L81 -L19 -R72 -R28 -R99 -R92 -R81 -R28 -R246 -R79 -R24 -L4 -L45 -R31 -L12 -L294 -L25 -R665 -R35 -L42 -L55 -R47 -L904 -L2 -R56 -R43 -R88 -L31 -L2 -R382 -L80 -L3 -R98 -L21 -R484 -L44 -L14 -L57 -L15 -R61 -L89 -R34 -L334 -L93 -L507 -L55 -L45 -R63 -R28 -L891 -R37 -L921 -R93 -L87 -L922 -L4 -L96 -R63 -L63 -L11 -L259 -L30 -L40 -L6 -R84 -R62 -R65 -L46 -R73 -L93 -L99 -L37 -R26 -L37 -L12 -L40 -R61 -L61 -L40 -L28 -R170 -R692 -L5 -L8 -L26 -R17 -L88 -L16 -L68 -L60 -R48 -R12 -R79 -L42 -L37 -R44 -R56 -R232 -R18 -L67 -L98 -L79 -R827 -R773 -R584 -R10 -L42 -L65 -R85 -R522 -L618 -L82 -L76 -L24 -L74 -R35 -L65 -R4 -R60 -R339 -L72 -R23 -R50 -L76 -L19 -R57 -R155 -R29 -L15 -R4 -L53 -R631 -R73 -R14 -R90 -R52 -L7 -L35 -R46 -R54 -R85 -L80 -R48 -R47 -R646 -R364 -L10 -R86 -L86 -L47 -R86 -L39 -L993 -R91 -L46 -L52 -R10 -R83 -L92 -L44 -R74 -R69 -L53 -R53 -L86 -R86 -R52 -L15 -R63 -R38 -L35 -R40 -R548 -L95 -L988 -R192 -L7 -R66 -R41 -R85 -R7 -L77 -L51 -R88 -R48 -L36 -R44 -R630 -L38 -R729 -R264 -R126 -L74 -L98 -L23 -R80 -R196 -R6 -R94 -L51 -R51 -L85 -R2 -L17 -R85 -L89 -L96 -L3 -L49 -L845 -R62 -L60 -L811 -L208 -R6 -R22 -R20 -R62 -L92 -R96 -R362 -L493 -R10 -R21 -R61 -L861 -L1 -R53 -L852 -L80 -L20 -R90 -L597 -R807 -L14 -L33 -L40 -R87 -R60 -R96 -R44 -R3 -L59 -R820 -L95 -L169 -R65 -R1 -L37 -L48 -L638 -R31 -R51 -R10 -L35 -L96 -R57 -R39 -L29 -R29 -R80 -L67 -L46 -R33 -L19 -R19 -L950 -L130 -L39 -R92 -L1 -L30 -L72 -L70 -R202 -R98 -R29 -L90 -R61 -R152 -L25 -L28 -L99 -L15 -R90 -R38 -L13 -R810 -R90 -L50 -L2 -R15 -L63 -L20 -R20 -L3 -L97 -R98 -R70 -R31 -R16 -L84 -L3 -R72 -L57 -R957 -R5 -R8 -L84 -R71 -R70 -R62 -R84 -R84 -L50 -R30 -R548 -R272 -R295 -L370 -L59 -L66 -R80 -L91 -R81 -L66 -R536 -L40 -L99 -L291 -L94 -R46 -R86 -L46 -R98 -L7 -R5 -R231 -L265 -R33 -L78 -L71 -L44 -R55 -L51 -R61 -R31 -L81 -L80 -R39 -L51 -R58 -R87 -R10 -R915 -L911 -L86 -L338 -R48 -R77 -R41 -L72 -R97 -R758 -L64 -R571 -R82 -L13 -L15 -R28 -L69 -L31 -L93 -R83 -R57 -R53 -R55 -R620 -L75 -L79 -R75 -R4 -R83 -L15 -L337 -L31 -R50 -L50 -R596 -R571 -R292 -R72 -L15 -L316 -L99 -L95 -L6 -R35 -R65 -R37 -L37 -L36 -L16 -L3 -L93 -R48 -L26 -L15 -L173 -L17 -L69 -L8 -L131 -L88 -R45 -L41 -R195 -R31 -L63 -R96 -L9 -R96 -L23 -R90 -R10 -R11 -R26 -L20 -L92 -R469 -L76 -L18 -L863 -R63 -L84 -L16 -L7 -L18 -L37 -L138 -L76 -L557 -L67 -R41 -L70 -R76 -L93 -L352 -L489 -R11 -L96 -L528 -R97 -R39 -L36 -L729 -R29 -L760 -R60 -L61 -R72 -R589 -L28 -R228 -L14 -L78 -R492 -L73 -L70 -R35 -L38 -L96 -R15 -R76 -L8 -R59 -R45 -L45 -L68 -L33 -R24 -L30 -R307 -L54 -L646 -R93 -L85 -L55 -L53 -L62 -L55 -R91 -R226 -R4 -L1 -R197 -L23 -L312 -R95 -R487 -L47 -L17 -R517 -L76 -R931 -R83 -L21 -L63 -L43 -R89 -L27 -R27 -R1 -R69 -R30 -R94 -R72 -R78 -L52 -L40 -R48 -R52 -L52 -R5 -R95 -L98 -R98 -L55 -R555 -L76 -R23 -L847 -L99 -R590 -L91 -R58 -L58 -R24 -L419 -R805 -L44 -L226 -L40 -R39 -R62 -L75 -L16 -R86 -R4 -L530 -L15 -L55 -L937 -R97 -R603 -R83 -R54 -L715 -R15 -R75 -R82 -L57 -L633 -L88 -L504 -R25 -R184 -R617 -R350 -L92 -R241 -L28 -L47 -R55 -L80 -L17 -R17 -L385 -R35 -R66 -L216 -R191 -L79 -R53 -L15 -R72 -R207 -R25 -L77 -L83 -R49 -L95 -L468 -R90 -L70 -L201 -L199 -R22 -L22 -R58 -L30 -L7 -L21 -R657 -R774 -L56 -L275 -L13 -R613 -L29 -R29 -L3 -R36 -R46 -L79 -R126 -L70 -R44 -L64 -R73 -L809 -R860 -L74 -R46 -R68 -L82 -R82 -L3 -L657 -L40 -L60 -R60 -R5 -L5 -L72 -R35 -R74 -R63 -L276 -R76 -R33 -R945 -L78 -L38 -R89 -L51 -L45 -L195 -R476 -L98 -R770 -L8 -R93 -L93 -L937 -R52 -R96 -L11 -R29 -L29 -L79 -R285 -R94 -R67 -R33 -R60 -R70 -R19 -R51 -R816 -L16 -L896 -L89 -L15 -R43 -R57 -L6 -L94 -L99 -L25 -L5 -R29 -L81 -R97 -L16 -L93 -L43 -R7 -R329 -R70 -R82 -L52 -L37 -L81 -L82 -R56 -L56 -R67 -L24 -R57 -L36 -L95 -R31 -R24 -L384 -R24 -R27 -L88 -L248 -L55 -L810 -L34 -R85 -R25 -R99 -R780 -R55 -R80 -L5 -R25 -R47 -R337 -L58 -L99 -R53 -R20 -R85 -R31 -L60 -R3 -R74 -L463 -R30 -R13 -L13 -L73 -L27 -L58 -R48 -L872 -L118 -R99 -R1 -L75 -R95 -L93 -L5 -R981 -L3 -R5 -L60 -L85 -R16 -L84 -R948 -R60 -L73 -R84 -R89 -L33 -L491 -L23 -R71 -L405 -L9 -R37 -L29 -R53 -R29 -L92 -R392 -L48 -R48 -L30 -R16 -L49 -L37 -L30 -R50 -R71 -R9 -R64 -R36 -L39 -R23 -R35 -R5 -L12 -L922 -R18 -L37 -R29 -R51 -L24 -L42 -L85 -R95 -R22 -R807 -R185 -L19 -R910 -R69 -L476 -R91 -L40 -L44 -R97 -R96 -L386 -L7 -L21 -L79 -R30 -L30 -R36 -L17 -L15 -L41 -R93 -L256 -L705 -R76 -L43 -L89 -R35 -L47 -L27 -L40 -L52 -L80 -L26 -R856 -L265 -R7 -R95 -R38 -L71 -L62 -R98 -R65 -R19 -L939 -R52 -L46 -R89 -L38 -L29 -R629 -R92 -L192 -L43 -R90 -L53 -L32 -L62 -L83 -R70 -R84 -R129 -R315 -L61 -R643 -R59 -R47 -R57 -L80 -R86 -L998 -L44 -L5 -R64 -R217 -L50 -L35 -R11 -R344 -L77 -R75 -R816 -L32 -R648 -L10 -R17 -R29 -R80 -L18 -L92 -R880 -R896 -L52 -L111 -R388 -L7 -L28 -R65 -L86 -R67 -R65 -R27 -L94 -R75 -R12 -L66 -L69 -R57 -L54 -L11 -L21 -L39 -R85 -L30 -L27 -R25 -L16 -L15 -L22 -L33 -L27 -R26 -L77 -L4 -L285 -L29 -R24 -R34 -L26 -L903 -L64 -L36 -L85 -R141 -R27 -R40 -L23 -R74 -R5 -L3 -L76 -L15 -L41 -R30 -R26 -L567 -L733 -L761 -R98 -L37 -R162 -L75 -R78 -R35 -R57 -R51 -R92 -R79 -L79 -R4 -L15 -L89 -L474 -R74 -L9 -R82 -L42 -R27 -L58 -R63 -R37 -L73 -L42 -R115 -L49 -R49 -R88 -R12 -R89 -L89 -L38 -L49 -R87 -R602 -L902 -L77 -L43 -R20 -R333 -R94 -L627 -L23 -L540 -R91 -L50 -L12 -L9 -L25 -L62 -R30 -R132 -R13 -R39 -R816 -R57 -L51 -R31 -R669 -R94 -L37 -R29 -R90 -L94 -L12 -L81 -R405 -L68 -R2 -R66 -L57 -R57 -L12 -L71 -R41 -R42 -R67 -R16 -L35 -R71 -L939 -L6 -L36 -R662 -L82 -L78 -L29 -R743 -L36 -L18 -L261 -R881 -R80 -L16 -R416 -L22 -R22 -R90 -R92 -R18 -R59 -L59 -R487 -L87 -L69 -R35 -L25 -L62 -R21 -L63 -R63 -R523 -R77 -L2 -L98 -L661 -R61 -L42 -L58 -L50 -R45 -L25 -R84 -L654 -L22 -L36 -R30 -R288 -L28 -L69 -R37 -L55 -R55 -R317 -R21 -R36 -R26 -R24 -R94 -R84 -L79 -R77 -L496 -L52 -R73 -L23 -R21 -L323 -L72 -R72 -L12 -R36 -R533 -L25 -L10 -L706 -L16 -R7 -L73 -R66 -L26 -R37 -R89 -L54 -R79 -R475 -L547 -L53 -L60 -R70 -R935 -L9 -R462 -R56 -L24 -R56 -L586 -R63 -L36 -R39 -R68 -L40 -L94 -L642 -L258 -R70 -L95 -R41 -R84 -R13 -L562 -R49 -L96 -L20 -R30 -R68 -L309 -R65 -R61 -R1 -R73 -L10 -L58 -R3 -R92 -R565 -L24 -R59 -L29 -R29 -R61 -R33 -L94 -R146 -L323 -L24 -L99 -L920 -R20 -L50 -L50 -R19 -R32 -L268 -R550 -L71 -R38 -R3 -L3 -R59 -L59 -R44 -L24 -L94 -L14 -R12 -L14 -L62 -R52 -R13 -R87 -L94 -L704 -R25 -L29 -L88 -R44 -R50 -L4 -L271 -L507 -R272 -L61 -L33 -R27 -L212 -L815 -R80 -L15 -L127 -R98 -L16 -L440 -L80 -L23 -R63 -R60 -R591 -R9 -L91 -R859 -L68 -R52 -R728 -L43 -L47 -R29 -R981 -L704 -R25 -R179 -L73 -R73 -R58 -L50 -L8 -R139 -L39 -R65 -L95 -L43 -L60 -R95 -L61 -R865 -L158 -L51 -R93 -L235 -R84 -R31 -R70 -L21 -L756 -R77 -R3 -R45 -R52 -R77 -R56 -R101 -R73 -R4 -R89 -R50 -R50 -L35 -R64 -R9 -L12 -L77 -R205 -L54 -L47 -L853 -R70 -L42 -L9 -L19 -R26 -L96 -R24 -R94 -R252 -L39 -L20 -L73 -L68 -R51 -R84 -R79 -R86 -R58 -L58 -L74 -L22 -R67 -L95 -L26 -R694 -R18 -R180 -L142 -L119 -R19 -R153 -R47 -R73 -L10 -R76 -L52 -L575 -R88 -L475 -R58 -L3 -R769 -R82 -R27 -R56 -R70 -R87 -L32 -R68 -R93 -L81 -L47 -L72 -R84 -R70 -L65 -R11 -R79 -L79 -L87 -L10 -L8 -L795 -L21 -L221 -L58 -R48 -R950 -R2 -R391 -L88 -L88 -L915 -R54 -R94 -R61 -L70 -R61 -R47 -L447 -R572 -R28 -R410 -L24 -L72 -L41 -L259 -L66 -R34 -L39 -L291 -R24 -R24 -L711 -L5 -L80 -R27 -L31 -L69 -L31 -L43 -R802 -L322 -L37 -L728 -L52 -R80 -L703 -R529 -R588 -L14 -L64 -R753 -L61 -R47 -R4 -L489 -L90 -L80 -L90 -L52 -L78 -L424 -L76 -R86 -R23 -L71 -L38 -R508 -L508 -R96 -R234 -R67 -R69 -L92 -R124 -L46 -R47 -R4 -R97 -R64 -L64 -R3 -L38 -L4 -L79 -R18 -L8 -L82 -R90 -L32 -L13 -R245 -L12 -L88 -R92 -L748 -L44 -L74 -R6 -R68 -R14 -L8 -R963 -L769 -R217 -L17 -L58 -L42 -L94 -L6 -L94 -R94 -L58 -L542 -R41 -R585 -R36 -R2 -R536 -L13 -R88 -L67 -L13 -L90 -R95 -R57 -R621 -R90 -R23 -R88 -R51 -R70 -L25 -R913 -L88 -L22 -L578 -R65 -L865 -L965 -L23 -R97 -L29 -R52 -R68 -L63 -L639 -L779 -R27 -R62 -R803 -R52 -R37 -R27 -R973 -L56 -R56 -L17 -R96 -L408 -R31 -L63 -R55 -R6 -R29 -R9 -R4 -R11 -R47 -R28 -R84 -R88 -R31 -L54 -R47 -R27 -L251 -R30 -R170 -R83 -R417 -L10 -L90 -L976 -R55 -R221 -R32 -R74 -L42 -R36 -L417 -R704 -R52 -R628 -L730 -R87 -L22 -L2 -L16 -R40 -R23 -R34 -L74 -L45 -L47 -R38 -R20 -L73 -R37 -L860 -L77 -L50 -L220 -L31 -R43 -R58 -L40 -L60 -R33 -L33 -L70 -R38 -L60 -R78 -R53 -L39 -L5 -L95 -L55 -L28 -R84 -L1 -R47 -R53 -L523 -R13 -L90 -R3 -L803 -L3 -R26 -R77 -L30 -R56 -L69 -L157 -R10 -R11 -L175 -R54 -R375 -R25 -L26 -R40 -R441 -R45 -R76 -R60 -R8 -R76 -L162 -R42 -L23 -R89 -R1 -L31 -L36 -R53 -L53 -L72 -L17 -L51 -R40 -R27 -R46 -R627 -L279 -L12 -R55 -R17 -L89 -R9 -L1 -R662 -L18 -L88 -L56 -L940 -R224 -L9 -L74 -R99 -L114 -R67 -R47 -R18 -R74 -R31 -L23 -R21 -L43 -R45 -R82 -R95 -L444 -R44 -R275 -L618 -L10 -L79 -R79 -L847 -R88 -L88 -L13 -R82 -R31 -L24 -R41 -R80 -R44 -L94 -L62 -L10 -L7 -R38 -L91 -L44 -R29 -L64 -L336 -L436 -L30 -L73 -R561 -L322 -R45 -R11 -L65 -L91 -R691 -R809 -R30 -R470 -R64 -L20 -R461 -R95 -R13 -L2 -L95 -R841 -R33 -L724 -R98 -L14 -L335 -L15 -R6 -R94 -L649 -L352 -R8 -R56 -R27 -L55 -R77 -R1 -R58 -L24 -L41 -L757 -R51 -L49 -R773 -R14 -R78 -L16 -R46 -L72 -R17 -L91 -L61 -R76 -R85 -L45 -R94 -R51 -L75 -L25 -R69 -R31 -R34 -L3 -R69 -L85 -R85 -L977 -R37 -R840 -R123 -R745 -L68 -R28 -R72 -L859 -L15 -L26 -R61 -L17 -R16 -R78 -L79 -L11 -L86 -L562 -R799 -L94 -L40 -L65 -R21 -L21 -L47 -R47 -R36 -L27 -L9 -R51 -L51 -L43 -R57 -L14 -R62 -R38 -R90 -L90 -R89 -R4 -L93 -R23 -R20 -R1 -R56 -R15 -L365 -R50 -L88 -R13 -L98 -R54 -L81 -L552 -L48 -R60 -R69 -R22 -R36 -L87 -R71 -L71 -R98 -R93 -L72 -L97 -R47 -R331 -L46 -R13 -R33 -R40 -R427 -L28 -L91 -R52 -R16 -L816 -L67 -R4 -L37 -L31 -R31 -L10 -L90 -L60 -R154 -R68 -L96 -R96 -L62 -R91 -R9 -L49 -L95 -R78 -L653 -R22 -R72 -R25 -L53 -L13 -R14 -L82 -R634 -L86 -L514 -L42 -R645 -R39 -L84 -L58 -L10 -L90 -R85 -L908 -L77 -L47 -R47 -L99 -L270 -L31 -R79 -L5 -R46 -L81 -L59 -R4 -R529 -R87 -L48 -R85 -L20 -R83 -L56 -L77 -R61 -L28 -L85 -L88 -L27 -R36 -R1 -R63 -R54 -R46 -R49 -L34 -R85 -L79 -R58 -R28 -R27 -L28 -L10 -R19 -L59 -R47 -L124 -R80 -L20 -R90 -R17 -R8 -L50 -R755 -L222 -R22 -R768 -L27 -L375 -L4 -R30 -R75 -L26 -L61 -L17 -R72 -L94 -R93 -L15 -L878 -L45 -L43 -R32 -R76 -R39 -R41 -R60 -R58 -R656 -L71 -L3 -L145 -L655 -R55 -R68 -R14 -L21 -L48 -R232 -L56 -R56 -L45 -R2 -R50 -R17 -L1 -L9 -L14 -R4 -R19 -L57 -L66 -L15 -R29 -R698 -L12 -R77 -L87 -R10 -L252 -L9 -R79 -L14 -R496 -R2 -R98 -L6 -L32 -R85 -R53 -L1 -L230 -L69 -L998 -L2 -L1 -L99 -R13 -L122 -R9 -L19 -R84 -L65 -R35 -R65 -L37 -R37 -L9 -L23 -L68 -L51 -R4 -R10 -R928 -R868 -R6 -L50 -R14 -R87 -L916 -R53 -R97 -R10 -R40 -R310 -R13 -R18 -L41 -R33 -L233 -R53 -L798 -R99 -L454 -L96 -L84 -R80 -L98 -L2 -R65 -L37 -R72 -R68 -R32 -L99 -L1 -L21 -R21 -L93 -L7 -R27 -R58 -R96 -L81 -L578 -L222 -R57 -L92 -R35 -L63 -R24 -L61 -L55 -R85 -L4 -L6 -R11 -L75 -L56 -R13 -L715 -L92 -R905 -L82 -R89 -R32 -R50 -L51 -L577 -R269 -R857 -R12 -L12 -L33 -L26 -L843 -L81 -L660 -R45 -L86 -R33 -L87 -L69 -R40 -R616 -R6 -L9 -R16 -L60 -R90 -L36 -L54 -R22 -R111 -R67 -L56 -L44 -R48 -L65 -L92 -R459 -L50 -L45 -L55 -R70 -L57 -L38 -R43 -R82 -R39 -R61 -L58 -L703 -R40 -L84 -R876 -L80 -R922 -R28 -L912 -L29 -R3 -R5 -R992 -R54 -L59 -R56 -R49 -R57 -L87 -L64 -L888 -R43 -R28 -L41 -L648 -R14 -L14 -R10 -L11 -L48 -L51 -L26 -R95 -L78 -L18 -L652 -R29 -R13 -L63 -L53 -R53 -L77 -L39 -R16 -L63 -L22 -R26 -R59 -R305 -R95 -R41 -R15 -R444 -L72 -R60 -R212 -R90 -L890 -L20 -R46 -R74 -R875 -L35 -L73 -L552 -L15 -L12 -R9 -R71 -L10 -R49 -R561 -L43 -L25 -L37 -R15 -L36 -R58 -R81 -R69 -R5 -R145 -L27 -L88 -L3 -L82 -L47 -L795 -R18 -L7 -R31 -R61 -R64 -L26 -R28 -L27 -L179 -L85 -L95 -L381 -L983 -R86 -R39 -R496 -R2 -R33 -R63 -L96 -L64 -L4 -R92 -R57 -L81 -L93 -R4 -L91 -R64 -R39 -R98 -L46 -L91 -L52 -R91 -L423 -L68 -L932 -L65 -R629 -L502 -L36 -R82 -L8 -L89 -R37 -R533 -R19 -R31 -L431 -L60 -L440 -L56 -R64 -R2 -R10 -R38 -L52 -L906 -L70 -L93 -R463 -L22 -R83 -L69 -L92 -R75 -L26 -L149 -L4 -R4 -R67 -R78 -L870 -R8 -L73 -R52 -R38 -L47 -R47 -L9 -L791 -R211 -L99 -L90 -R58 -R648 -L44 -R66 -L928 -R90 -R88 -L21 -L79 -R65 -R36 -L38 -R637 -L31 -L15 -L69 -L85 -R93 -R68 -R39 -R19 -L6 -L13 -R36 -L36 -R1 -R199 -R66 -L66 -L841 -R41 -R33 -R22 -R45 -R6 -L6 -L20 -L39 -L41 -R15 -R85 -R22 -L9 -R83 -L79 -L59 -R43 -L33 -R32 -R80 -R644 -L335 -L22 -R510 -R614 -R9 -L92 -L108 -R1 -L1 -L438 -R81 -L43 -L44 -L756 -R22 -L753 -R15 -R845 -R71 -L6 -R66 -L42 -R82 -L85 -R83 -R33 -L31 -R81 -R39 -R35 -L47 -R92 -L970 -L523 -R22 -R580 -L9 -R5 -L39 -L66 -L52 -R94 -L90 -R48 -R981 -L81 -R942 -R244 -L56 -R52 -L182 -L25 -R25 -R375 -L75 -L85 -R65 -L65 -R65 -L34 -L53 -R37 -R70 -L479 -R468 -R529 -L134 -R116 -R661 -R634 -R134 -R307 -L15 -L21 -L31 -R531 -L89 -R84 -L695 -L70 -R63 -R36 -L49 -L80 -R57 -R96 -R18 -R29 -R14 -R86 -R2 -L54 -L71 -R522 -R20 -L365 -R28 -R1 -R17 -R42 -R58 -R52 -L828 -R70 -R390 -R16 -R41 -R759 -L73 -L68 -R81 -R51 -L16 -L975 -R41 -L82 -L69 -L90 -L757 -L543 -R502 -R80 -L82 -R3 -L53 -R50 -L978 -R78 -R54 -L254 -R25 -R75 -L21 -R68 -L49 -R2 -R82 -R17 -L9 -L283 -R393 -L78 -L22 -L15 -L985 -R5 -R197 -L3 -R1 -L3 -R91 -R76 -R95 -L63 -R72 -R27 -L46 -R51 -R65 -L67 -R902 -R99 -L40 -L516 -L43 -L78 -L41 -R19 -L3 -L321 -L8 -L30 -R510 -L26 -L75 -R59 -R43 -R51 -R84 -R26 -R23 -L32 -R88 -R11 -L36 -L64 -L89 -R83 -R96 -L90 -L3 -R69 -L66 -R42 -R58 -R65 -R7 -L10 -R38 -R94 -R5 -R1 -R99 -R232 -L33 -L98 -L5 -R5 -L88 -R20 -R5 -R63 -L615 -L806 -L32 -R53 -L36 -R36 -L36 -L64 -R44 -L90 -L45 -R91 -L29 -R98 -R4 -L73 -R3 -L54 -L63 -R14 -L70 -L430 -R71 -R63 -L34 -R47 -L647 -R25 -L8 -R86 -L190 -L13 -L54 -R54 -L6 -L78 -R33 -L49 -L85 -R62 -L77 -R495 -R5 -R30 -L71 -L959 -L85 -L12 -L3 -R19 -L350 -L97 -R89 -L441 -R954 -L72 -R66 -R35 -L3 -L4 -L46 -R50 -R78 -R46 -L87 -L34 -L77 -R46 -L21 -L964 -R109 -L7 -L35 -L92 -R98 -R56 -R89 -R29 -L28 -R35 -R659 -L32 -L510 -R42 -L47 -R47 -R872 -L95 -R80 -L8 -L39 -R90 -L5 -L95 -L303 -L97 -R25 -R75 -R810 -L43 -R33 -R80 -L15 -R79 -L49 -L63 -L64 -R679 -L18 -L86 -R735 -R22 -L4 -L922 -L74 -L80 -R80 -R19 -L59 -R40 -R41 -R59 -L39 -R539 -L59 -R959 -R31 -R73 -L76 -R272 -L78 -L99 -L649 -R55 -L29 -L45 -R45 -L58 -L42 -L427 -L46 -L98 -R876 -L405 -L69 -L31 -L51 -L49 -R88 -R43 -R81 -R75 -R849 -R75 -R89 -L514 -R14 -L1 -L489 -L21 -L89 -R53 -L44 -L9 -L95 -R803 -R92 -L8 -R158 -L15 -R34 -L69 -L38 -R38 -R60 -R712 -L126 -L14 -L13 -L11 -R49 -L66 -L14 -R23 -L94 -R7 -L8 -R95 -L661 -R561 -L20 -L180 -L9 -R52 -R57 -R43 -L43 -R91 -L91 -R31 -L631 -L18 -R18 -R79 -R21 -R35 -L9 -L26 -L1 -R1 -L924 -L976 -L72 -L22 -L905 -R813 -R129 -L45 -L20 -L82 -R64 -R97 -L47 -L10 -L92 -L8 -L243 -L757 -L19 -L81 -R98 -L98 -R98 -L275 -L23 -L25 -L921 -L66 -R12 -L5 -R205 -R91 -L10 -R36 -R34 -R81 -R68 -L35 -R44 -R60 -R18 -L93 -L94 -R71 -R1 -L72 -L18 -L82 -L38 -R34 -R4 -R69 -L16 -R650 -R88 -L291 -L41 -L10 -R66 -L44 -R75 -R93 -R82 -L21 -R51 -R49 -L849 -R92 -R57 -R69 -R62 -R86 -L19 -L598 -L33 -R91 -L92 -R534 -R12 -L96 -L35 -R19 -R57 -R643 -R32 -R69 -L85 -L17 -R45 -L72 -R827 -R98 -R935 -R68 -R97 -L21 -R79 -R37 -L92 -L18 -R43 -L21 -L76 -R72 -L357 -R62 -L5 -L33 -L74 -L93 -L11 -R54 -L43 -L5 -R41 -R32 -L68 -L584 -L16 -R8 -L17 -R40 -L31 -R82 -R18 -L12 -R60 -R91 -R22 -R77 -R33 -L71 -R9 -R91 -L87 -L98 -R85 -R399 -L57 -L24 -R82 -L405 -L68 -L943 -L76 -L65 -L643 -R15 -L215 -L597 -R7 -L10 -R94 -R26 -L64 -R44 -L52 -R23 -R29 -R5 -R577 -R680 -R36 -L98 -R662 -R92 -L98 -L76 -L55 -R41 -L59 -L7 -L74 -R74 -L53 -L84 -L12 -L851 -L618 -L71 -L90 -R79 -R410 -L10 -L90 -L10 -L325 -L50 -L39 -R77 -L565 -R402 -L15 -R96 -R29 -L23 -R794 -R872 -L32 -L71 -R89 -R54 -L84 -R4 -R87 -R804 -R96 -L429 -L81 -L53 -L339 -R2 -R62 -R92 -R24 -R97 -L75 -L443 -L57 -L10 -L104 -L16 -R30 -L21 -R921 -L35 -R62 -R43 -R748 -R82 -R13 -R87 -L828 -L14 -L89 -R567 -L36 -R15 -L15 -R99 -L61 -R74 -R56 -R68 -R51 -R82 -L757 -R88 -L97 -L71 -L432 -L62 -L88 -L76 -L74 -R47 -R38 -L85 -L690 -R90 -L98 -L7 -R5 -L792 -R75 -L83 -L60 -L40 -R89 -R45 -R66 -R88 -R90 -L57 -R1 -R67 -L89 -L66 -L939 -R605 -L13 -L87 -L36 -L87 -R905 -R81 -R62 -R75 -L316 -L54 -R80 -L113 -L195 -L202 -R74 -L47 -L27 -R31 -R48 -R79 -R487 -R84 -L29 -L8 -R8 -R76 -L76 -L96 -R96 -L44 -L8 -L48 -R869 -L469 -R44 -R56 -L30 -R78 -L948 -R346 -R29 -L75 -L53 -L38 -R568 -R23 -L39 -L76 -L72 -R225 -R23 -R129 -L25 -L4 -L61 -L3 -R70 -R76 -L78 -R35 -L11 -R8 -L91 -R52 -R565 -R77 -L11 -R23 -R723 -R17 -R7 -R41 -R35 -R265 -R95 -R80 -L75 -R52 -R24 -R73 -L49 -R19 -R950 -L169 -L9 -R85 -L76 -R792 -L82 -L518 -L62 -R63 -L11 -L95 -L540 -R20 -R39 -R94 -L48 -L18 -L34 -L1 -L54 -R17 -R938 -R15 -R75 -L84 -R94 -L72 -L228 -L77 -L523 -L28 -R25 -R3 -R3 -R48 -L51 -L739 -L27 -L75 -L10 -L36 -L38 -L74 -L73 -R35 -L520 -L18 -L25 -L9 -R13 -L998 -R603 -R91 -R986 -L22 -L54 -L510 -L2 -R2 -R47 -R206 -R951 -R93 -R3 -R921 -R18 -L5 -R71 -R889 -L9 -L57 -L11 -L874 -R81 -R15 -L639 -R825 -R407 -R16 -L48 -L31 -R32 -L5 -R933 -R64 -L693 -R52 -R11 -L9 -L54 -L21 -L14 -R30 -R31 -R474 -R78 -L13 -L686 -L39 -R36 -L76 -L37 -R26 -L7 -R918 -R79 -R37 -L16 -L25 -L22 -L624 -R10 -R781 -R58 -R14 -R94 -L4 -L320 -L627 -L363 -L88 -L50 -R27 -L6 -R45 -L76 -L6 -R71 -R11 -R84 -L91 -L93 -R8 -R87 -L95 -R684 -L91 -R11 -R96 -L7 -L521 -R28 -R327 -R340 -L63 -R25 -R793 -R15 -L987 -L28 -R97 -R31 -L2 -L564 -R112 -L934 -L62 -L78 -R61 -L83 -L33 -L45 -L822 -R94 -R6 -L93 -R89 -R77 -R27 -L16 -L22 -R38 -R526 -R748 -R8 -R718 -R703 -L48 -R35 -L90 -L99 -R8 -R34 -R557 -R2 -L7 -R75 -L90 -L80 -L74 -L521 -L5 -L590 -L34 -R80 -L99 -L73 -R16 -L95 -L70 -L79 -L93 -L16 -L9 -L38 -L89 -R40 -L21 -R85 -L87 -R72 -R5 -L5 -L7 -R25 -L3 -L15 -R86 -L791 -L53 -R89 -L7 -R43 -R33 -L32 -R47 -R85 -L19 -L81 -L259 -R86 -L18 -L9 -L5 -R5 -R53 -R58 -R346 -L57 -L26 -L203 -L71 -R51 -R359 -L86 -L97 -L29 -L32 -L82 -R816 -L59 -L4 -L37 -R97 -L18 -L779 -R27 -L27 -L26 -L1 -R27 -L643 -L27 -R45 -R25 -R105 -R37 -R67 -R39 -L335 -R32 -L47 -R244 -R638 -L32 -L13 -L9 -L52 -R98 -R74 -L116 -L30 -R55 -L55 -R25 -L44 -L65 -L16 -L867 -L58 -R62 -L324 -L48 -L27 -L20 -L18 -L35 -R10 -R61 -L11 -R75 -L82 -L18 -L674 -R24 -L7 -L84 -R10 -R431 -R42 -R51 -L99 -L72 -R30 -R142 -R6 -L76 -R76 -R40 -L97 -R49 -L526 -L69 -L97 -R70 -L827 -R8 -L11 -L40 -L841 -L86 -R47 -L71 -R88 -L37 -L58 -L280 -R58 -L3 -L17 -L54 -R54 -L24 -R24 -R44 -L74 -L70 -L69 -R69 -L87 -L13 -L20 -L18 -L47 -R56 -L28 -L817 -L90 -R64 -R157 -R86 -R68 -L85 -R2 -R15 -L84 -L29 -L30 -L160 -L742 -R497 -L995 -L41 -R97 -L73 -L59 -R73 -L597 -L17 -L36 -R97 -R56 -R42 -R58 -L818 -L82 -R902 -L202 -R96 -L84 -R57 -R19 -R12 -L939 -R585 -R54 -L14 -L735 -L446 -L5 -R58 -L56 -R868 -R522 -L72 -R80 -L64 -L101 -L4 -L51 -R375 -L71 -L68 -L56 -L51 -R885 -R35 -L29 -R79 -R721 -R70 -R430 -L16 -L84 -R28 -L65 -R21 -L84 -R31 -L15 -L28 -L346 -R258 -R95 -L44 -L9 -R58 -L674 -R80 -R2 -L51 -R25 -L82 -L43 -R7 -R58 -L65 -R71 -R72 -R3 -L8 -L95 -R582 -R18 -L20 -R53 -L528 -L705 -L76 -L24 -L87 -R87 -L69 -L58 -L27 -R54 -L77 -R77 -R60 -L60 -L46 -L19 -R72 -L68 -L39 -L17 -R29 -L12 -R46 -L17 -L29 -R90 -R99 -L95 -L94 -L26 -L44 -L30 -R97 -R3 -L27 -L60 -R87 -R62 -R38 -R32 -L70 -L62 -R96 -R14 -R41 -L36 -L15 -L71 -R71 -L53 -R53 -L30 -L53 -R83 -R11 -L48 -R50 -R28 -L16 -L7 -R37 -L28 -R14 -R14 -R50 -R42 -R41 -R2 -L10 -R26 -R26 -R49 -L47 -R30 -R24 -R14 -R8 -R30 -R15 -R47 -R9 -L27 -L32 -R17 -R46 -L34 -R40 -R43 -R25 -L3 -L17 -L4 -L3 -R15 -L50 -R9 -L5 -R40 -L7 -R40 -L15 -R20 -R45 -R39 +L25
+L8
+L44
+L6
+R1
+R26
+R9
+L47
+R16
+R25
+R12
+L42
+R35
+L24
+R31
+R19
+L43
+L33
+L23
+R9
+L17
+R38
+R42
+L3
+L39
+R35
+L50
+L40
+R4
+L13
+R42
+L16
+L26
+L26
+R5
+R4
+L2
+R36
+L23
+L35
+L46
+L26
+L10
+R45
+R32
+L12
+L8
+L25
+R49
+R71
+L24
+R58
+R63
+R38
+R41
+L60
+L40
+R93
+R33
+R62
+R12
+L97
+R25
+R15
+R4
+R88
+R65
+R3
+R76
+L79
+L85
+L32
+L25
+L14
+L2
+L67
+R25
+L35
+R47
+L40
+R28
+R46
+L46
+L62
+R83
+R93
+L17
+L92
+R78
+R17
+R34
+R23
+R43
+R20
+L35
+L66
+R42
+L28
+R81
+R86
+L775
+R22
+L47
+L17
+L83
+L47
+R24
+R8
+R315
+R59
+R65
+R32
+R63
+R376
+R44
+R77
+R342
+R80
+R86
+L24
+R28
+L28
+L87
+L13
+L29
+L39
+L67
+L37
+L88
+L177
+L623
+L40
+L66
+R49
+L74
+R391
+R518
+L418
+R498
+L98
+R19
+R96
+L39
+L79
+R19
+L87
+R71
+L62
+L42
+R4
+R449
+L49
+R44
+L3
+R72
+R87
+R65
+L65
+R88
+R196
+L728
+R544
+R66
+L49
+L17
+L8
+L92
+L45
+L89
+L66
+L25
+R99
+L74
+R72
+R25
+R59
+R64
+L20
+L62
+R92
+L30
+L89
+R89
+R30
+L74
+L42
+R86
+R978
+L36
+L42
+L172
+R72
+L46
+R46
+L75
+L25
+L31
+L88
+L81
+L498
+L2
+L951
+R51
+R41
+L641
+L49
+L73
+L77
+L8
+L36
+L99
+R15
+L20
+L653
+L29
+R90
+R66
+L3
+L24
+R87
+R25
+R72
+R24
+R22
+R33
+L11
+L665
+L63
+R3
+R83
+L9
+R41
+R59
+L79
+R88
+L10
+R61
+R22
+L83
+L76
+R68
+L382
+L873
+R684
+R79
+L979
+L77
+L44
+L31
+R761
+L30
+R859
+L59
+L55
+R455
+L649
+R39
+L390
+L25
+L775
+L381
+R810
+R571
+L70
+L25
+L42
+R37
+R22
+R99
+L34
+L36
+L23
+R44
+R24
+L35
+R28
+L89
+L98
+R84
+L86
+R54
+R81
+R35
+L62
+L62
+R8
+R4
+R42
+L19
+L23
+L10
+L98
+R37
+L76
+R91
+R598
+R67
+L764
+R97
+L2
+L98
+R90
+L17
+R62
+R273
+R763
+L68
+L903
+L498
+L2
+R95
+R4
+R319
+R82
+R198
+L98
+R83
+L983
+R782
+R18
+R490
+L83
+R893
+L965
+L35
+R72
+L50
+L22
+L335
+R30
+R60
+R272
+L12
+R933
+R52
+R3
+R119
+R78
+R26
+R94
+L20
+R39
+L39
+R724
+R35
+R41
+L28
+L55
+R73
+L90
+R27
+L66
+L61
+R61
+R39
+R519
+R81
+R565
+R51
+R97
+L72
+L402
+L39
+L61
+L10
+R58
+L39
+R52
+L366
+R66
+R365
+R83
+R28
+L779
+L597
+L13
+R613
+L657
+R18
+L22
+L62
+L77
+L84
+R55
+R29
+R535
+R56
+R28
+L7
+L12
+R37
+R63
+R81
+L81
+L31
+L69
+R84
+R716
+L40
+R40
+L6
+R6
+R53
+R247
+R34
+L10
+R76
+L52
+L48
+L37
+R64
+L44
+L21
+R38
+L41
+L8
+R16
+R54
+L82
+L30
+R91
+L55
+R54
+L99
+R45
+R59
+R31
+R686
+L69
+L52
+L2
+R46
+L609
+R57
+L1
+R9
+L796
+R76
+L28
+L16
+R6
+L42
+R2
+L39
+L49
+R843
+R64
+R61
+R99
+R19
+L165
+R65
+L37
+L12
+L51
+L145
+L55
+R56
+R56
+R54
+R226
+R8
+L91
+R91
+L92
+R892
+R3
+L3
+L57
+R457
+R81
+R18
+R62
+L39
+R578
+R43
+R957
+L14
+R51
+R84
+R43
+R7
+L11
+R1
+R39
+L94
+L6
+R52
+L37
+R48
+R37
+L10
+R51
+R44
+L85
+L6
+L6
+R68
+L54
+L41
+R79
+L63
+L77
+R11
+R33
+L4
+R280
+L20
+R24
+L524
+R41
+L41
+L71
+L29
+R49
+L92
+L97
+L60
+R13
+L57
+L56
+R89
+R11
+L75
+R375
+L23
+L575
+R34
+L258
+L655
+R765
+L88
+R29
+R56
+L338
+R60
+L96
+L11
+L27
+R495
+L10
+L58
+L85
+L6
+R65
+R52
+L449
+R330
+L75
+L77
+R98
+L53
+L23
+R23
+R23
+R17
+L40
+L49
+R92
+L10
+L562
+L20
+L51
+R475
+L40
+R589
+R13
+L50
+R91
+L70
+R195
+L203
+L74
+L99
+L27
+R95
+R8
+L71
+R62
+R78
+L37
+R65
+R67
+L29
+L38
+L58
+L81
+R31
+R15
+R99
+R694
+R86
+R62
+L36
+R56
+L80
+R7
+R41
+L22
+R86
+L70
+L15
+L77
+L138
+L48
+L75
+L46
+R169
+R41
+R547
+L88
+R388
+L443
+L45
+L134
+R34
+L92
+L708
+L68
+R911
+L93
+L50
+R14
+R73
+L80
+L7
+R85
+R42
+R673
+R80
+R40
+L87
+R34
+L77
+R39
+R32
+L28
+L33
+L89
+R89
+R76
+L76
+R46
+L946
+R44
+L44
+R20
+R80
+L92
+L8
+R49
+R44
+R96
+L4
+L85
+L84
+L16
+R512
+L7
+L5
+L68
+L832
+L20
+R220
+L69
+L96
+R66
+R53
+R37
+R9
+R211
+L11
+R19
+L419
+R10
+R266
+R20
+L96
+L67
+R67
+L6
+L22
+L75
+L17
+L32
+L583
+R83
+L448
+L35
+L47
+L78
+L73
+L367
+R519
+R81
+L887
+L51
+L62
+R47
+L96
+L935
+R73
+R62
+L51
+R21
+L85
+R49
+L285
+L37
+R47
+R69
+L42
+R72
+R65
+L81
+R67
+R292
+R16
+L68
+R28
+L82
+L46
+L98
+R98
+L318
+R18
+L43
+R31
+L88
+R94
+L292
+R5
+R93
+R66
+L70
+R4
+L29
+L98
+L39
+R266
+L903
+L21
+L40
+R64
+L735
+L19
+R54
+R563
+R737
+R454
+R55
+L70
+L39
+R39
+L7
+R71
+L3
+L13
+R1
+R153
+L88
+L53
+L45
+L55
+R397
+R97
+L536
+L58
+R847
+R52
+L299
+R91
+R9
+R49
+R51
+R67
+L51
+L79
+L490
+R96
+L243
+R45
+R73
+L63
+L23
+R968
+R27
+R173
+L7
+L35
+R58
+R84
+R11
+R89
+R81
+L20
+L95
+L66
+L326
+L74
+R70
+R30
+L152
+R52
+R559
+R341
+R96
+L687
+L9
+L28
+R373
+R73
+R91
+R102
+L22
+R211
+R97
+L835
+L62
+L4
+L69
+L68
+L85
+R397
+L54
+L17
+L2
+L98
+R34
+R366
+R61
+L61
+R15
+L81
+R3
+L645
+L16
+R24
+L263
+R63
+R44
+R56
+R43
+L43
+L59
+L309
+R68
+R73
+R62
+R97
+R68
+R2
+L2
+L65
+L80
+L69
+R14
+L7
+L93
+R47
+L58
+R245
+R66
+L12
+L88
+L67
+L47
+L586
+R90
+L9
+L797
+L84
+R920
+R80
+R836
+R64
+R99
+L799
+R394
+L294
+R69
+L569
+L26
+R26
+L66
+R7
+L16
+L251
+R21
+R5
+L56
+L144
+L52
+R99
+L93
+L54
+L31
+R31
+L99
+L401
+L8
+R18
+L10
+L8
+R47
+L39
+L37
+R37
+L519
+R69
+R77
+L69
+L90
+R49
+L17
+R49
+R43
+R8
+L38
+L19
+R57
+R35
+L35
+L347
+L2
+L217
+R661
+L562
+L317
+R3
+R36
+L52
+R6
+R48
+L38
+L36
+R85
+L22
+L46
+L9
+R9
+R1
+R61
+R29
+R85
+L476
+R68
+R58
+L226
+R728
+R72
+L67
+L33
+R80
+L33
+R53
+R34
+L165
+L69
+L60
+L40
+L61
+R10
+R61
+L15
+L29
+L66
+L459
+R959
+L12
+L95
+L93
+R96
+R54
+R67
+R83
+R515
+L15
+R325
+L25
+L66
+L634
+R51
+R449
+R52
+R11
+L63
+L35
+R48
+R50
+R78
+R2
+L19
+R253
+R19
+L12
+R16
+L28
+L72
+L29
+L71
+L81
+L19
+R72
+R28
+R99
+R92
+R81
+R28
+R246
+R79
+R24
+L4
+L45
+R31
+L12
+L294
+L25
+R665
+R35
+L42
+L55
+R47
+L904
+L2
+R56
+R43
+R88
+L31
+L2
+R382
+L80
+L3
+R98
+L21
+R484
+L44
+L14
+L57
+L15
+R61
+L89
+R34
+L334
+L93
+L507
+L55
+L45
+R63
+R28
+L891
+R37
+L921
+R93
+L87
+L922
+L4
+L96
+R63
+L63
+L11
+L259
+L30
+L40
+L6
+R84
+R62
+R65
+L46
+R73
+L93
+L99
+L37
+R26
+L37
+L12
+L40
+R61
+L61
+L40
+L28
+R170
+R692
+L5
+L8
+L26
+R17
+L88
+L16
+L68
+L60
+R48
+R12
+R79
+L42
+L37
+R44
+R56
+R232
+R18
+L67
+L98
+L79
+R827
+R773
+R584
+R10
+L42
+L65
+R85
+R522
+L618
+L82
+L76
+L24
+L74
+R35
+L65
+R4
+R60
+R339
+L72
+R23
+R50
+L76
+L19
+R57
+R155
+R29
+L15
+R4
+L53
+R631
+R73
+R14
+R90
+R52
+L7
+L35
+R46
+R54
+R85
+L80
+R48
+R47
+R646
+R364
+L10
+R86
+L86
+L47
+R86
+L39
+L993
+R91
+L46
+L52
+R10
+R83
+L92
+L44
+R74
+R69
+L53
+R53
+L86
+R86
+R52
+L15
+R63
+R38
+L35
+R40
+R548
+L95
+L988
+R192
+L7
+R66
+R41
+R85
+R7
+L77
+L51
+R88
+R48
+L36
+R44
+R630
+L38
+R729
+R264
+R126
+L74
+L98
+L23
+R80
+R196
+R6
+R94
+L51
+R51
+L85
+R2
+L17
+R85
+L89
+L96
+L3
+L49
+L845
+R62
+L60
+L811
+L208
+R6
+R22
+R20
+R62
+L92
+R96
+R362
+L493
+R10
+R21
+R61
+L861
+L1
+R53
+L852
+L80
+L20
+R90
+L597
+R807
+L14
+L33
+L40
+R87
+R60
+R96
+R44
+R3
+L59
+R820
+L95
+L169
+R65
+R1
+L37
+L48
+L638
+R31
+R51
+R10
+L35
+L96
+R57
+R39
+L29
+R29
+R80
+L67
+L46
+R33
+L19
+R19
+L950
+L130
+L39
+R92
+L1
+L30
+L72
+L70
+R202
+R98
+R29
+L90
+R61
+R152
+L25
+L28
+L99
+L15
+R90
+R38
+L13
+R810
+R90
+L50
+L2
+R15
+L63
+L20
+R20
+L3
+L97
+R98
+R70
+R31
+R16
+L84
+L3
+R72
+L57
+R957
+R5
+R8
+L84
+R71
+R70
+R62
+R84
+R84
+L50
+R30
+R548
+R272
+R295
+L370
+L59
+L66
+R80
+L91
+R81
+L66
+R536
+L40
+L99
+L291
+L94
+R46
+R86
+L46
+R98
+L7
+R5
+R231
+L265
+R33
+L78
+L71
+L44
+R55
+L51
+R61
+R31
+L81
+L80
+R39
+L51
+R58
+R87
+R10
+R915
+L911
+L86
+L338
+R48
+R77
+R41
+L72
+R97
+R758
+L64
+R571
+R82
+L13
+L15
+R28
+L69
+L31
+L93
+R83
+R57
+R53
+R55
+R620
+L75
+L79
+R75
+R4
+R83
+L15
+L337
+L31
+R50
+L50
+R596
+R571
+R292
+R72
+L15
+L316
+L99
+L95
+L6
+R35
+R65
+R37
+L37
+L36
+L16
+L3
+L93
+R48
+L26
+L15
+L173
+L17
+L69
+L8
+L131
+L88
+R45
+L41
+R195
+R31
+L63
+R96
+L9
+R96
+L23
+R90
+R10
+R11
+R26
+L20
+L92
+R469
+L76
+L18
+L863
+R63
+L84
+L16
+L7
+L18
+L37
+L138
+L76
+L557
+L67
+R41
+L70
+R76
+L93
+L352
+L489
+R11
+L96
+L528
+R97
+R39
+L36
+L729
+R29
+L760
+R60
+L61
+R72
+R589
+L28
+R228
+L14
+L78
+R492
+L73
+L70
+R35
+L38
+L96
+R15
+R76
+L8
+R59
+R45
+L45
+L68
+L33
+R24
+L30
+R307
+L54
+L646
+R93
+L85
+L55
+L53
+L62
+L55
+R91
+R226
+R4
+L1
+R197
+L23
+L312
+R95
+R487
+L47
+L17
+R517
+L76
+R931
+R83
+L21
+L63
+L43
+R89
+L27
+R27
+R1
+R69
+R30
+R94
+R72
+R78
+L52
+L40
+R48
+R52
+L52
+R5
+R95
+L98
+R98
+L55
+R555
+L76
+R23
+L847
+L99
+R590
+L91
+R58
+L58
+R24
+L419
+R805
+L44
+L226
+L40
+R39
+R62
+L75
+L16
+R86
+R4
+L530
+L15
+L55
+L937
+R97
+R603
+R83
+R54
+L715
+R15
+R75
+R82
+L57
+L633
+L88
+L504
+R25
+R184
+R617
+R350
+L92
+R241
+L28
+L47
+R55
+L80
+L17
+R17
+L385
+R35
+R66
+L216
+R191
+L79
+R53
+L15
+R72
+R207
+R25
+L77
+L83
+R49
+L95
+L468
+R90
+L70
+L201
+L199
+R22
+L22
+R58
+L30
+L7
+L21
+R657
+R774
+L56
+L275
+L13
+R613
+L29
+R29
+L3
+R36
+R46
+L79
+R126
+L70
+R44
+L64
+R73
+L809
+R860
+L74
+R46
+R68
+L82
+R82
+L3
+L657
+L40
+L60
+R60
+R5
+L5
+L72
+R35
+R74
+R63
+L276
+R76
+R33
+R945
+L78
+L38
+R89
+L51
+L45
+L195
+R476
+L98
+R770
+L8
+R93
+L93
+L937
+R52
+R96
+L11
+R29
+L29
+L79
+R285
+R94
+R67
+R33
+R60
+R70
+R19
+R51
+R816
+L16
+L896
+L89
+L15
+R43
+R57
+L6
+L94
+L99
+L25
+L5
+R29
+L81
+R97
+L16
+L93
+L43
+R7
+R329
+R70
+R82
+L52
+L37
+L81
+L82
+R56
+L56
+R67
+L24
+R57
+L36
+L95
+R31
+R24
+L384
+R24
+R27
+L88
+L248
+L55
+L810
+L34
+R85
+R25
+R99
+R780
+R55
+R80
+L5
+R25
+R47
+R337
+L58
+L99
+R53
+R20
+R85
+R31
+L60
+R3
+R74
+L463
+R30
+R13
+L13
+L73
+L27
+L58
+R48
+L872
+L118
+R99
+R1
+L75
+R95
+L93
+L5
+R981
+L3
+R5
+L60
+L85
+R16
+L84
+R948
+R60
+L73
+R84
+R89
+L33
+L491
+L23
+R71
+L405
+L9
+R37
+L29
+R53
+R29
+L92
+R392
+L48
+R48
+L30
+R16
+L49
+L37
+L30
+R50
+R71
+R9
+R64
+R36
+L39
+R23
+R35
+R5
+L12
+L922
+R18
+L37
+R29
+R51
+L24
+L42
+L85
+R95
+R22
+R807
+R185
+L19
+R910
+R69
+L476
+R91
+L40
+L44
+R97
+R96
+L386
+L7
+L21
+L79
+R30
+L30
+R36
+L17
+L15
+L41
+R93
+L256
+L705
+R76
+L43
+L89
+R35
+L47
+L27
+L40
+L52
+L80
+L26
+R856
+L265
+R7
+R95
+R38
+L71
+L62
+R98
+R65
+R19
+L939
+R52
+L46
+R89
+L38
+L29
+R629
+R92
+L192
+L43
+R90
+L53
+L32
+L62
+L83
+R70
+R84
+R129
+R315
+L61
+R643
+R59
+R47
+R57
+L80
+R86
+L998
+L44
+L5
+R64
+R217
+L50
+L35
+R11
+R344
+L77
+R75
+R816
+L32
+R648
+L10
+R17
+R29
+R80
+L18
+L92
+R880
+R896
+L52
+L111
+R388
+L7
+L28
+R65
+L86
+R67
+R65
+R27
+L94
+R75
+R12
+L66
+L69
+R57
+L54
+L11
+L21
+L39
+R85
+L30
+L27
+R25
+L16
+L15
+L22
+L33
+L27
+R26
+L77
+L4
+L285
+L29
+R24
+R34
+L26
+L903
+L64
+L36
+L85
+R141
+R27
+R40
+L23
+R74
+R5
+L3
+L76
+L15
+L41
+R30
+R26
+L567
+L733
+L761
+R98
+L37
+R162
+L75
+R78
+R35
+R57
+R51
+R92
+R79
+L79
+R4
+L15
+L89
+L474
+R74
+L9
+R82
+L42
+R27
+L58
+R63
+R37
+L73
+L42
+R115
+L49
+R49
+R88
+R12
+R89
+L89
+L38
+L49
+R87
+R602
+L902
+L77
+L43
+R20
+R333
+R94
+L627
+L23
+L540
+R91
+L50
+L12
+L9
+L25
+L62
+R30
+R132
+R13
+R39
+R816
+R57
+L51
+R31
+R669
+R94
+L37
+R29
+R90
+L94
+L12
+L81
+R405
+L68
+R2
+R66
+L57
+R57
+L12
+L71
+R41
+R42
+R67
+R16
+L35
+R71
+L939
+L6
+L36
+R662
+L82
+L78
+L29
+R743
+L36
+L18
+L261
+R881
+R80
+L16
+R416
+L22
+R22
+R90
+R92
+R18
+R59
+L59
+R487
+L87
+L69
+R35
+L25
+L62
+R21
+L63
+R63
+R523
+R77
+L2
+L98
+L661
+R61
+L42
+L58
+L50
+R45
+L25
+R84
+L654
+L22
+L36
+R30
+R288
+L28
+L69
+R37
+L55
+R55
+R317
+R21
+R36
+R26
+R24
+R94
+R84
+L79
+R77
+L496
+L52
+R73
+L23
+R21
+L323
+L72
+R72
+L12
+R36
+R533
+L25
+L10
+L706
+L16
+R7
+L73
+R66
+L26
+R37
+R89
+L54
+R79
+R475
+L547
+L53
+L60
+R70
+R935
+L9
+R462
+R56
+L24
+R56
+L586
+R63
+L36
+R39
+R68
+L40
+L94
+L642
+L258
+R70
+L95
+R41
+R84
+R13
+L562
+R49
+L96
+L20
+R30
+R68
+L309
+R65
+R61
+R1
+R73
+L10
+L58
+R3
+R92
+R565
+L24
+R59
+L29
+R29
+R61
+R33
+L94
+R146
+L323
+L24
+L99
+L920
+R20
+L50
+L50
+R19
+R32
+L268
+R550
+L71
+R38
+R3
+L3
+R59
+L59
+R44
+L24
+L94
+L14
+R12
+L14
+L62
+R52
+R13
+R87
+L94
+L704
+R25
+L29
+L88
+R44
+R50
+L4
+L271
+L507
+R272
+L61
+L33
+R27
+L212
+L815
+R80
+L15
+L127
+R98
+L16
+L440
+L80
+L23
+R63
+R60
+R591
+R9
+L91
+R859
+L68
+R52
+R728
+L43
+L47
+R29
+R981
+L704
+R25
+R179
+L73
+R73
+R58
+L50
+L8
+R139
+L39
+R65
+L95
+L43
+L60
+R95
+L61
+R865
+L158
+L51
+R93
+L235
+R84
+R31
+R70
+L21
+L756
+R77
+R3
+R45
+R52
+R77
+R56
+R101
+R73
+R4
+R89
+R50
+R50
+L35
+R64
+R9
+L12
+L77
+R205
+L54
+L47
+L853
+R70
+L42
+L9
+L19
+R26
+L96
+R24
+R94
+R252
+L39
+L20
+L73
+L68
+R51
+R84
+R79
+R86
+R58
+L58
+L74
+L22
+R67
+L95
+L26
+R694
+R18
+R180
+L142
+L119
+R19
+R153
+R47
+R73
+L10
+R76
+L52
+L575
+R88
+L475
+R58
+L3
+R769
+R82
+R27
+R56
+R70
+R87
+L32
+R68
+R93
+L81
+L47
+L72
+R84
+R70
+L65
+R11
+R79
+L79
+L87
+L10
+L8
+L795
+L21
+L221
+L58
+R48
+R950
+R2
+R391
+L88
+L88
+L915
+R54
+R94
+R61
+L70
+R61
+R47
+L447
+R572
+R28
+R410
+L24
+L72
+L41
+L259
+L66
+R34
+L39
+L291
+R24
+R24
+L711
+L5
+L80
+R27
+L31
+L69
+L31
+L43
+R802
+L322
+L37
+L728
+L52
+R80
+L703
+R529
+R588
+L14
+L64
+R753
+L61
+R47
+R4
+L489
+L90
+L80
+L90
+L52
+L78
+L424
+L76
+R86
+R23
+L71
+L38
+R508
+L508
+R96
+R234
+R67
+R69
+L92
+R124
+L46
+R47
+R4
+R97
+R64
+L64
+R3
+L38
+L4
+L79
+R18
+L8
+L82
+R90
+L32
+L13
+R245
+L12
+L88
+R92
+L748
+L44
+L74
+R6
+R68
+R14
+L8
+R963
+L769
+R217
+L17
+L58
+L42
+L94
+L6
+L94
+R94
+L58
+L542
+R41
+R585
+R36
+R2
+R536
+L13
+R88
+L67
+L13
+L90
+R95
+R57
+R621
+R90
+R23
+R88
+R51
+R70
+L25
+R913
+L88
+L22
+L578
+R65
+L865
+L965
+L23
+R97
+L29
+R52
+R68
+L63
+L639
+L779
+R27
+R62
+R803
+R52
+R37
+R27
+R973
+L56
+R56
+L17
+R96
+L408
+R31
+L63
+R55
+R6
+R29
+R9
+R4
+R11
+R47
+R28
+R84
+R88
+R31
+L54
+R47
+R27
+L251
+R30
+R170
+R83
+R417
+L10
+L90
+L976
+R55
+R221
+R32
+R74
+L42
+R36
+L417
+R704
+R52
+R628
+L730
+R87
+L22
+L2
+L16
+R40
+R23
+R34
+L74
+L45
+L47
+R38
+R20
+L73
+R37
+L860
+L77
+L50
+L220
+L31
+R43
+R58
+L40
+L60
+R33
+L33
+L70
+R38
+L60
+R78
+R53
+L39
+L5
+L95
+L55
+L28
+R84
+L1
+R47
+R53
+L523
+R13
+L90
+R3
+L803
+L3
+R26
+R77
+L30
+R56
+L69
+L157
+R10
+R11
+L175
+R54
+R375
+R25
+L26
+R40
+R441
+R45
+R76
+R60
+R8
+R76
+L162
+R42
+L23
+R89
+R1
+L31
+L36
+R53
+L53
+L72
+L17
+L51
+R40
+R27
+R46
+R627
+L279
+L12
+R55
+R17
+L89
+R9
+L1
+R662
+L18
+L88
+L56
+L940
+R224
+L9
+L74
+R99
+L114
+R67
+R47
+R18
+R74
+R31
+L23
+R21
+L43
+R45
+R82
+R95
+L444
+R44
+R275
+L618
+L10
+L79
+R79
+L847
+R88
+L88
+L13
+R82
+R31
+L24
+R41
+R80
+R44
+L94
+L62
+L10
+L7
+R38
+L91
+L44
+R29
+L64
+L336
+L436
+L30
+L73
+R561
+L322
+R45
+R11
+L65
+L91
+R691
+R809
+R30
+R470
+R64
+L20
+R461
+R95
+R13
+L2
+L95
+R841
+R33
+L724
+R98
+L14
+L335
+L15
+R6
+R94
+L649
+L352
+R8
+R56
+R27
+L55
+R77
+R1
+R58
+L24
+L41
+L757
+R51
+L49
+R773
+R14
+R78
+L16
+R46
+L72
+R17
+L91
+L61
+R76
+R85
+L45
+R94
+R51
+L75
+L25
+R69
+R31
+R34
+L3
+R69
+L85
+R85
+L977
+R37
+R840
+R123
+R745
+L68
+R28
+R72
+L859
+L15
+L26
+R61
+L17
+R16
+R78
+L79
+L11
+L86
+L562
+R799
+L94
+L40
+L65
+R21
+L21
+L47
+R47
+R36
+L27
+L9
+R51
+L51
+L43
+R57
+L14
+R62
+R38
+R90
+L90
+R89
+R4
+L93
+R23
+R20
+R1
+R56
+R15
+L365
+R50
+L88
+R13
+L98
+R54
+L81
+L552
+L48
+R60
+R69
+R22
+R36
+L87
+R71
+L71
+R98
+R93
+L72
+L97
+R47
+R331
+L46
+R13
+R33
+R40
+R427
+L28
+L91
+R52
+R16
+L816
+L67
+R4
+L37
+L31
+R31
+L10
+L90
+L60
+R154
+R68
+L96
+R96
+L62
+R91
+R9
+L49
+L95
+R78
+L653
+R22
+R72
+R25
+L53
+L13
+R14
+L82
+R634
+L86
+L514
+L42
+R645
+R39
+L84
+L58
+L10
+L90
+R85
+L908
+L77
+L47
+R47
+L99
+L270
+L31
+R79
+L5
+R46
+L81
+L59
+R4
+R529
+R87
+L48
+R85
+L20
+R83
+L56
+L77
+R61
+L28
+L85
+L88
+L27
+R36
+R1
+R63
+R54
+R46
+R49
+L34
+R85
+L79
+R58
+R28
+R27
+L28
+L10
+R19
+L59
+R47
+L124
+R80
+L20
+R90
+R17
+R8
+L50
+R755
+L222
+R22
+R768
+L27
+L375
+L4
+R30
+R75
+L26
+L61
+L17
+R72
+L94
+R93
+L15
+L878
+L45
+L43
+R32
+R76
+R39
+R41
+R60
+R58
+R656
+L71
+L3
+L145
+L655
+R55
+R68
+R14
+L21
+L48
+R232
+L56
+R56
+L45
+R2
+R50
+R17
+L1
+L9
+L14
+R4
+R19
+L57
+L66
+L15
+R29
+R698
+L12
+R77
+L87
+R10
+L252
+L9
+R79
+L14
+R496
+R2
+R98
+L6
+L32
+R85
+R53
+L1
+L230
+L69
+L998
+L2
+L1
+L99
+R13
+L122
+R9
+L19
+R84
+L65
+R35
+R65
+L37
+R37
+L9
+L23
+L68
+L51
+R4
+R10
+R928
+R868
+R6
+L50
+R14
+R87
+L916
+R53
+R97
+R10
+R40
+R310
+R13
+R18
+L41
+R33
+L233
+R53
+L798
+R99
+L454
+L96
+L84
+R80
+L98
+L2
+R65
+L37
+R72
+R68
+R32
+L99
+L1
+L21
+R21
+L93
+L7
+R27
+R58
+R96
+L81
+L578
+L222
+R57
+L92
+R35
+L63
+R24
+L61
+L55
+R85
+L4
+L6
+R11
+L75
+L56
+R13
+L715
+L92
+R905
+L82
+R89
+R32
+R50
+L51
+L577
+R269
+R857
+R12
+L12
+L33
+L26
+L843
+L81
+L660
+R45
+L86
+R33
+L87
+L69
+R40
+R616
+R6
+L9
+R16
+L60
+R90
+L36
+L54
+R22
+R111
+R67
+L56
+L44
+R48
+L65
+L92
+R459
+L50
+L45
+L55
+R70
+L57
+L38
+R43
+R82
+R39
+R61
+L58
+L703
+R40
+L84
+R876
+L80
+R922
+R28
+L912
+L29
+R3
+R5
+R992
+R54
+L59
+R56
+R49
+R57
+L87
+L64
+L888
+R43
+R28
+L41
+L648
+R14
+L14
+R10
+L11
+L48
+L51
+L26
+R95
+L78
+L18
+L652
+R29
+R13
+L63
+L53
+R53
+L77
+L39
+R16
+L63
+L22
+R26
+R59
+R305
+R95
+R41
+R15
+R444
+L72
+R60
+R212
+R90
+L890
+L20
+R46
+R74
+R875
+L35
+L73
+L552
+L15
+L12
+R9
+R71
+L10
+R49
+R561
+L43
+L25
+L37
+R15
+L36
+R58
+R81
+R69
+R5
+R145
+L27
+L88
+L3
+L82
+L47
+L795
+R18
+L7
+R31
+R61
+R64
+L26
+R28
+L27
+L179
+L85
+L95
+L381
+L983
+R86
+R39
+R496
+R2
+R33
+R63
+L96
+L64
+L4
+R92
+R57
+L81
+L93
+R4
+L91
+R64
+R39
+R98
+L46
+L91
+L52
+R91
+L423
+L68
+L932
+L65
+R629
+L502
+L36
+R82
+L8
+L89
+R37
+R533
+R19
+R31
+L431
+L60
+L440
+L56
+R64
+R2
+R10
+R38
+L52
+L906
+L70
+L93
+R463
+L22
+R83
+L69
+L92
+R75
+L26
+L149
+L4
+R4
+R67
+R78
+L870
+R8
+L73
+R52
+R38
+L47
+R47
+L9
+L791
+R211
+L99
+L90
+R58
+R648
+L44
+R66
+L928
+R90
+R88
+L21
+L79
+R65
+R36
+L38
+R637
+L31
+L15
+L69
+L85
+R93
+R68
+R39
+R19
+L6
+L13
+R36
+L36
+R1
+R199
+R66
+L66
+L841
+R41
+R33
+R22
+R45
+R6
+L6
+L20
+L39
+L41
+R15
+R85
+R22
+L9
+R83
+L79
+L59
+R43
+L33
+R32
+R80
+R644
+L335
+L22
+R510
+R614
+R9
+L92
+L108
+R1
+L1
+L438
+R81
+L43
+L44
+L756
+R22
+L753
+R15
+R845
+R71
+L6
+R66
+L42
+R82
+L85
+R83
+R33
+L31
+R81
+R39
+R35
+L47
+R92
+L970
+L523
+R22
+R580
+L9
+R5
+L39
+L66
+L52
+R94
+L90
+R48
+R981
+L81
+R942
+R244
+L56
+R52
+L182
+L25
+R25
+R375
+L75
+L85
+R65
+L65
+R65
+L34
+L53
+R37
+R70
+L479
+R468
+R529
+L134
+R116
+R661
+R634
+R134
+R307
+L15
+L21
+L31
+R531
+L89
+R84
+L695
+L70
+R63
+R36
+L49
+L80
+R57
+R96
+R18
+R29
+R14
+R86
+R2
+L54
+L71
+R522
+R20
+L365
+R28
+R1
+R17
+R42
+R58
+R52
+L828
+R70
+R390
+R16
+R41
+R759
+L73
+L68
+R81
+R51
+L16
+L975
+R41
+L82
+L69
+L90
+L757
+L543
+R502
+R80
+L82
+R3
+L53
+R50
+L978
+R78
+R54
+L254
+R25
+R75
+L21
+R68
+L49
+R2
+R82
+R17
+L9
+L283
+R393
+L78
+L22
+L15
+L985
+R5
+R197
+L3
+R1
+L3
+R91
+R76
+R95
+L63
+R72
+R27
+L46
+R51
+R65
+L67
+R902
+R99
+L40
+L516
+L43
+L78
+L41
+R19
+L3
+L321
+L8
+L30
+R510
+L26
+L75
+R59
+R43
+R51
+R84
+R26
+R23
+L32
+R88
+R11
+L36
+L64
+L89
+R83
+R96
+L90
+L3
+R69
+L66
+R42
+R58
+R65
+R7
+L10
+R38
+R94
+R5
+R1
+R99
+R232
+L33
+L98
+L5
+R5
+L88
+R20
+R5
+R63
+L615
+L806
+L32
+R53
+L36
+R36
+L36
+L64
+R44
+L90
+L45
+R91
+L29
+R98
+R4
+L73
+R3
+L54
+L63
+R14
+L70
+L430
+R71
+R63
+L34
+R47
+L647
+R25
+L8
+R86
+L190
+L13
+L54
+R54
+L6
+L78
+R33
+L49
+L85
+R62
+L77
+R495
+R5
+R30
+L71
+L959
+L85
+L12
+L3
+R19
+L350
+L97
+R89
+L441
+R954
+L72
+R66
+R35
+L3
+L4
+L46
+R50
+R78
+R46
+L87
+L34
+L77
+R46
+L21
+L964
+R109
+L7
+L35
+L92
+R98
+R56
+R89
+R29
+L28
+R35
+R659
+L32
+L510
+R42
+L47
+R47
+R872
+L95
+R80
+L8
+L39
+R90
+L5
+L95
+L303
+L97
+R25
+R75
+R810
+L43
+R33
+R80
+L15
+R79
+L49
+L63
+L64
+R679
+L18
+L86
+R735
+R22
+L4
+L922
+L74
+L80
+R80
+R19
+L59
+R40
+R41
+R59
+L39
+R539
+L59
+R959
+R31
+R73
+L76
+R272
+L78
+L99
+L649
+R55
+L29
+L45
+R45
+L58
+L42
+L427
+L46
+L98
+R876
+L405
+L69
+L31
+L51
+L49
+R88
+R43
+R81
+R75
+R849
+R75
+R89
+L514
+R14
+L1
+L489
+L21
+L89
+R53
+L44
+L9
+L95
+R803
+R92
+L8
+R158
+L15
+R34
+L69
+L38
+R38
+R60
+R712
+L126
+L14
+L13
+L11
+R49
+L66
+L14
+R23
+L94
+R7
+L8
+R95
+L661
+R561
+L20
+L180
+L9
+R52
+R57
+R43
+L43
+R91
+L91
+R31
+L631
+L18
+R18
+R79
+R21
+R35
+L9
+L26
+L1
+R1
+L924
+L976
+L72
+L22
+L905
+R813
+R129
+L45
+L20
+L82
+R64
+R97
+L47
+L10
+L92
+L8
+L243
+L757
+L19
+L81
+R98
+L98
+R98
+L275
+L23
+L25
+L921
+L66
+R12
+L5
+R205
+R91
+L10
+R36
+R34
+R81
+R68
+L35
+R44
+R60
+R18
+L93
+L94
+R71
+R1
+L72
+L18
+L82
+L38
+R34
+R4
+R69
+L16
+R650
+R88
+L291
+L41
+L10
+R66
+L44
+R75
+R93
+R82
+L21
+R51
+R49
+L849
+R92
+R57
+R69
+R62
+R86
+L19
+L598
+L33
+R91
+L92
+R534
+R12
+L96
+L35
+R19
+R57
+R643
+R32
+R69
+L85
+L17
+R45
+L72
+R827
+R98
+R935
+R68
+R97
+L21
+R79
+R37
+L92
+L18
+R43
+L21
+L76
+R72
+L357
+R62
+L5
+L33
+L74
+L93
+L11
+R54
+L43
+L5
+R41
+R32
+L68
+L584
+L16
+R8
+L17
+R40
+L31
+R82
+R18
+L12
+R60
+R91
+R22
+R77
+R33
+L71
+R9
+R91
+L87
+L98
+R85
+R399
+L57
+L24
+R82
+L405
+L68
+L943
+L76
+L65
+L643
+R15
+L215
+L597
+R7
+L10
+R94
+R26
+L64
+R44
+L52
+R23
+R29
+R5
+R577
+R680
+R36
+L98
+R662
+R92
+L98
+L76
+L55
+R41
+L59
+L7
+L74
+R74
+L53
+L84
+L12
+L851
+L618
+L71
+L90
+R79
+R410
+L10
+L90
+L10
+L325
+L50
+L39
+R77
+L565
+R402
+L15
+R96
+R29
+L23
+R794
+R872
+L32
+L71
+R89
+R54
+L84
+R4
+R87
+R804
+R96
+L429
+L81
+L53
+L339
+R2
+R62
+R92
+R24
+R97
+L75
+L443
+L57
+L10
+L104
+L16
+R30
+L21
+R921
+L35
+R62
+R43
+R748
+R82
+R13
+R87
+L828
+L14
+L89
+R567
+L36
+R15
+L15
+R99
+L61
+R74
+R56
+R68
+R51
+R82
+L757
+R88
+L97
+L71
+L432
+L62
+L88
+L76
+L74
+R47
+R38
+L85
+L690
+R90
+L98
+L7
+R5
+L792
+R75
+L83
+L60
+L40
+R89
+R45
+R66
+R88
+R90
+L57
+R1
+R67
+L89
+L66
+L939
+R605
+L13
+L87
+L36
+L87
+R905
+R81
+R62
+R75
+L316
+L54
+R80
+L113
+L195
+L202
+R74
+L47
+L27
+R31
+R48
+R79
+R487
+R84
+L29
+L8
+R8
+R76
+L76
+L96
+R96
+L44
+L8
+L48
+R869
+L469
+R44
+R56
+L30
+R78
+L948
+R346
+R29
+L75
+L53
+L38
+R568
+R23
+L39
+L76
+L72
+R225
+R23
+R129
+L25
+L4
+L61
+L3
+R70
+R76
+L78
+R35
+L11
+R8
+L91
+R52
+R565
+R77
+L11
+R23
+R723
+R17
+R7
+R41
+R35
+R265
+R95
+R80
+L75
+R52
+R24
+R73
+L49
+R19
+R950
+L169
+L9
+R85
+L76
+R792
+L82
+L518
+L62
+R63
+L11
+L95
+L540
+R20
+R39
+R94
+L48
+L18
+L34
+L1
+L54
+R17
+R938
+R15
+R75
+L84
+R94
+L72
+L228
+L77
+L523
+L28
+R25
+R3
+R3
+R48
+L51
+L739
+L27
+L75
+L10
+L36
+L38
+L74
+L73
+R35
+L520
+L18
+L25
+L9
+R13
+L998
+R603
+R91
+R986
+L22
+L54
+L510
+L2
+R2
+R47
+R206
+R951
+R93
+R3
+R921
+R18
+L5
+R71
+R889
+L9
+L57
+L11
+L874
+R81
+R15
+L639
+R825
+R407
+R16
+L48
+L31
+R32
+L5
+R933
+R64
+L693
+R52
+R11
+L9
+L54
+L21
+L14
+R30
+R31
+R474
+R78
+L13
+L686
+L39
+R36
+L76
+L37
+R26
+L7
+R918
+R79
+R37
+L16
+L25
+L22
+L624
+R10
+R781
+R58
+R14
+R94
+L4
+L320
+L627
+L363
+L88
+L50
+R27
+L6
+R45
+L76
+L6
+R71
+R11
+R84
+L91
+L93
+R8
+R87
+L95
+R684
+L91
+R11
+R96
+L7
+L521
+R28
+R327
+R340
+L63
+R25
+R793
+R15
+L987
+L28
+R97
+R31
+L2
+L564
+R112
+L934
+L62
+L78
+R61
+L83
+L33
+L45
+L822
+R94
+R6
+L93
+R89
+R77
+R27
+L16
+L22
+R38
+R526
+R748
+R8
+R718
+R703
+L48
+R35
+L90
+L99
+R8
+R34
+R557
+R2
+L7
+R75
+L90
+L80
+L74
+L521
+L5
+L590
+L34
+R80
+L99
+L73
+R16
+L95
+L70
+L79
+L93
+L16
+L9
+L38
+L89
+R40
+L21
+R85
+L87
+R72
+R5
+L5
+L7
+R25
+L3
+L15
+R86
+L791
+L53
+R89
+L7
+R43
+R33
+L32
+R47
+R85
+L19
+L81
+L259
+R86
+L18
+L9
+L5
+R5
+R53
+R58
+R346
+L57
+L26
+L203
+L71
+R51
+R359
+L86
+L97
+L29
+L32
+L82
+R816
+L59
+L4
+L37
+R97
+L18
+L779
+R27
+L27
+L26
+L1
+R27
+L643
+L27
+R45
+R25
+R105
+R37
+R67
+R39
+L335
+R32
+L47
+R244
+R638
+L32
+L13
+L9
+L52
+R98
+R74
+L116
+L30
+R55
+L55
+R25
+L44
+L65
+L16
+L867
+L58
+R62
+L324
+L48
+L27
+L20
+L18
+L35
+R10
+R61
+L11
+R75
+L82
+L18
+L674
+R24
+L7
+L84
+R10
+R431
+R42
+R51
+L99
+L72
+R30
+R142
+R6
+L76
+R76
+R40
+L97
+R49
+L526
+L69
+L97
+R70
+L827
+R8
+L11
+L40
+L841
+L86
+R47
+L71
+R88
+L37
+L58
+L280
+R58
+L3
+L17
+L54
+R54
+L24
+R24
+R44
+L74
+L70
+L69
+R69
+L87
+L13
+L20
+L18
+L47
+R56
+L28
+L817
+L90
+R64
+R157
+R86
+R68
+L85
+R2
+R15
+L84
+L29
+L30
+L160
+L742
+R497
+L995
+L41
+R97
+L73
+L59
+R73
+L597
+L17
+L36
+R97
+R56
+R42
+R58
+L818
+L82
+R902
+L202
+R96
+L84
+R57
+R19
+R12
+L939
+R585
+R54
+L14
+L735
+L446
+L5
+R58
+L56
+R868
+R522
+L72
+R80
+L64
+L101
+L4
+L51
+R375
+L71
+L68
+L56
+L51
+R885
+R35
+L29
+R79
+R721
+R70
+R430
+L16
+L84
+R28
+L65
+R21
+L84
+R31
+L15
+L28
+L346
+R258
+R95
+L44
+L9
+R58
+L674
+R80
+R2
+L51
+R25
+L82
+L43
+R7
+R58
+L65
+R71
+R72
+R3
+L8
+L95
+R582
+R18
+L20
+R53
+L528
+L705
+L76
+L24
+L87
+R87
+L69
+L58
+L27
+R54
+L77
+R77
+R60
+L60
+L46
+L19
+R72
+L68
+L39
+L17
+R29
+L12
+R46
+L17
+L29
+R90
+R99
+L95
+L94
+L26
+L44
+L30
+R97
+R3
+L27
+L60
+R87
+R62
+R38
+R32
+L70
+L62
+R96
+R14
+R41
+L36
+L15
+L71
+R71
+L53
+R53
+L30
+L53
+R83
+R11
+L48
+R50
+R28
+L16
+L7
+R37
+L28
+R14
+R14
+R50
+R42
+R41
+R2
+L10
+R26
+R26
+R49
+L47
+R30
+R24
+R14
+R8
+R30
+R15
+R47
+R9
+L27
+L32
+R17
+R46
+L34
+R40
+R43
+R25
+L3
+L17
+L4
+L3
+R15
+L50
+R9
+L5
+R40
+L7
+R40
+L15
+R20
+R45
+R39
diff --git a/input/test-day1.txt b/input/test-day1.txt index 53287c7..9db3fc6 100644 --- a/input/test-day1.txt +++ b/input/test-day1.txt @@ -1,10 +1,10 @@ -L68 -L30 -R48 -L5 -R60 -L55 -L1 -L99 -R14 -L82 +L68
+L30
+R48
+L5
+R60
+L55
+L1
+L99
+R14
+L82
diff --git a/src/Day1.asm b/src/Day1.asm index ba5eb57..a749c6d 100644 --- a/src/Day1.asm +++ b/src/Day1.asm @@ -1,282 +1,363 @@ -; Advent of Code 2025 - Day 1.1 - -; #include <stddef.h> -; #include <stdio.h> -; #include <stdlib.h> -; #include <stdint.h> -; -; int main(void) -; { -; FILE* input = fopen("input/day1.txt", "r"); -; -; int32_t angle = 50; -; int32_t password = 0; -; -; char line[256]; -; while (fgets(line, sizeof(line), input)) -; { -; int32_t direction = (line[0] == 'L') ? -1 : 1; -; int32_t steps = atoi(line + 1); -; -; angle += direction * steps; -; angle = (angle % 100 + 100) % 100; -; -; if (angle == 0) -; password++; -; } -; -; fclose(input); -; printf("Password: %d\n", password); -; } - -global _start - -%define SYS_EXIT 1 -%define SYS_READ 3 -%define SYS_WRITE 4 -%define SYS_OPEN 5 -%define SYS_CLOSE 6 - -%define O_RDONLY 0 -%define STDOUT 1 - -section .data - inputPath db "input/day1.txt", 0 - newline db 10 ; '\n' - - angle dd 50 ; initial angle - password dd 0 ; result counter - -section .bss - buffer resb 4096 ; chunk read buffer - lineBuffer resb 256 ; one line max 255 chars + NUL - numberBuffer resb 16 ; for PrintInt - lineLen resd 1 ; current line length - -section .text - -_start: - ; open file - mov eax, SYS_OPEN - mov ebx, inputPath - mov ecx, O_RDONLY - int 0x80 - - mov esi, eax ; fd in ESI - mov dword [lineLen], 0 ; no chars in current line yet - -ReadLoop: - ; read up to 4096 bytes - mov eax, SYS_READ - mov ebx, esi - mov ecx, buffer - mov edx, 4096 - int 0x80 - - cmp eax, 0 - jle EOF ; 0 or negative = EOF or error - - mov edi, buffer ; scan pointer - mov ecx, eax ; bytes remaining in this chunk - -ScanChunk: - cmp ecx, 0 - je ReadLoop ; chunk done, read next - - mov al, [edi] - - ; windows can be a fucking bitch - ; handle CR (13) -> just skip - cmp al, 13 - je SkipCR - - ; handle LF (10) -> end of line - cmp al, 10 - je EndOfLine - - ; normal character: append to lineBuffer if space left - mov edx, [lineLen] - cmp edx, 255 ; leave 1 byte for NUL - jae SkipStore ; ignore extra chars if too long - mov [lineBuffer + edx], al - inc edx - mov [lineLen], edx - -SkipStore: - inc edi - dec ecx - jmp ScanChunk - -SkipCR: - inc edi - dec ecx - jmp ScanChunk - -EndOfLine: - ; terminate current line - mov edx, [lineLen] - mov byte [lineBuffer + edx], 0 - - ; if line isn't empty, process it - cmp edx, 0 - je LineDone - - push esi - mov esi, lineBuffer - call HandleLine - pop esi - -LineDone: - mov dword [lineLen], 0 ; reset line length - inc edi - dec ecx - jmp ScanChunk - -; process last line if not newline-terminated, then print result -EOF: - ; if there is a partial line at EOF, process it - mov edx, [lineLen] - cmp edx, 0 - jle FinishEOF - mov byte [lineBuffer + edx], 0 - - push esi - mov esi, lineBuffer - call HandleLine - pop esi - -FinishEOF: - mov eax, [password] - call PrintInt - - ; newline after result - mov eax, SYS_WRITE - mov ebx, STDOUT - mov ecx, newline - mov edx, 1 - int 0x80 - - ; close file and exit - mov eax, SYS_CLOSE - mov ebx, esi - int 0x80 - - mov eax, SYS_EXIT - xor ebx, ebx - int 0x80 - - -; Handle one line: ESI -> "L123" or "R45" -HandleLine: - mov al, [esi] - cmp al, 'L' - je .left - mov ebx, 1 ; direction = +1 for 'R' or anything else - jmp .after -.left: - mov ebx, -1 ; direction = -1 for 'L' -.after: - inc esi ; skip 'L' or 'R' - call ParseInt ; EAX = steps - - imul eax, ebx ; EAX = dir * steps - - mov edx, [angle] - add edx, eax ; update angle (can be out of range, signed) - - ; normalize edx into [0, 100[ using repeated +/-100 (no division) -NormLoop: - cmp edx, 0 - jl NormAdd - cmp edx, 100 - jl NormDone - sub edx, 100 - jmp NormLoop - -NormAdd: - add edx, 100 - jmp NormLoop - -NormDone: - mov [angle], edx - - cmp edx, 0 - jne .done - mov eax, [password] - inc eax - mov [password], eax -.done: - ret - -; ParseInt: - parse decimal number at [ESI] into EAX -; - stops at first non-digit -ParseInt: - xor eax, eax ; result = 0 - -.parseLoop: - mov dl, [esi] - cmp dl, '0' - jl .done - cmp dl, '9' - jg .done - - sub dl, '0' ; digit value 0..9 - movzx edx, dl - - imul eax, eax, 10 ; result *= 10 - add eax, edx ; result += digit - - inc esi - jmp .parseLoop - -.done: - ret - -; PrintInt: print unsigned integer in EAX to stdout -PrintInt: - mov edi, numberBuffer+15 ; write digits from the end - mov byte [edi], 0 ; terminator - dec edi - - cmp eax, 0 - jne .convert - mov byte [edi], '0' - jmp .finish - -.convert: - ; we will repeatedly compute: - ; q = eax / 10 - ; r = eax % 10 - ; using only subtraction -.nextDigit: - mov edx, eax ; tmp = current value - mov ecx, 0 ; q = 0 - - cmp edx, 10 - jb .lastDigit ; if < 10, quotient = 0, remainder = edx -.subLoop: - sub edx, 10 - inc ecx ; q++ - cmp edx, 10 - jae .subLoop ; while tmp >= 10 -.lastDigit: - ; now: - ; ecx = quotient - ; edx = remainder (0..9) - add dl, '0' - mov [edi], dl ; store digit - dec edi - - mov eax, ecx ; eax = quotient - test eax, eax - jnz .nextDigit ; more digits to extract? - - inc edi ; move to first digit -.finish: - mov eax, SYS_WRITE - mov ebx, STDOUT - mov ecx, edi - mov edx, numberBuffer+15 - sub edx, edi ; length - int 0x80 - ret +; Advent of Code 2025 - Day 1
+
+;
+; #include <stdio.h>
+; #include <stdlib.h>
+; #include <stddef.h>
+; #include <stdint.h>
+;
+; int main(void)
+; {
+; FILE* input = fopen("input/day1.txt", "r");
+;
+; int32_t angle1 = 50;
+; int32_t angle2 = 50;
+;
+; int32_t password1 = 0;
+; int32_t password2 = 0;
+;
+; char line[256];
+; while (fgets(line, sizeof(line), input))
+; {
+; int32_t direction = (line[0] == 'L') ? -1 : 1;
+; int32_t steps = atoi(line + 1);
+;
+; // part 1
+; angle1 += direction * steps;
+; angle1 %= 100;
+; if (angle1 < 0)
+; angle1 += 100;
+; if (angle1 == 0)
+; password1++;
+;
+; // part 2
+; for (int i = 0; i < steps; i++)
+; {
+; angle2 += direction;
+; if (angle2 == 100)
+; angle2 = 0;
+; else if (angle2 == -1)
+; angle2 = 99;
+; if (angle2 == 0)
+; password2++;
+; }
+; }
+;
+; fclose(input);
+;
+; printf("Password 1: %d\n", password1);
+; printf("Password 2: %d\n", password2);
+; }
+;
+
+global _start
+
+%define SYS_EXIT 1
+%define SYS_READ 3
+%define SYS_WRITE 4
+%define SYS_OPEN 5
+%define SYS_CLOSE 6
+
+%define O_RDONLY 0
+%define STDOUT 1
+
+section .data
+ inputPath db "input/day1.txt", 0
+ newline db 10
+
+ label1 db "Password 1: ", 0
+ label2 db "Password 2: ", 0
+
+ angle1 dd 50
+ angle2 dd 50
+
+ password1 dd 0
+ password2 dd 0
+
+section .bss
+ buffer resb 4096
+ lineBuffer resb 256
+ numberBuffer resb 16
+ lineLen resd 1
+
+section .text
+
+_start:
+ ; open file
+ mov eax, SYS_OPEN
+ mov ebx, inputPath
+ mov ecx, O_RDONLY
+ int 0x80
+
+ mov esi, eax ; fd in ESI
+ mov dword [lineLen], 0 ; no chars in current line yet
+ReadLoop:
+ ; read up to 4096 bytes
+ mov eax, SYS_READ
+ mov ebx, esi
+ mov ecx, buffer
+ mov edx, 4096
+ int 0x80
+
+ cmp eax, 0
+ jle EOF ; <=0 -> EOF or error
+
+ mov edi, buffer ; scan pointer
+ mov ebp, eax ; bytes remaining in this chunk
+
+ScanChunk:
+ cmp ebp, 0
+ je ReadLoop ; chunk done, read next
+
+ mov al, [edi]
+
+ ; windows can be a fucking bitch
+ ; handle CR (13) -> just skip
+ cmp al, 13
+ je SkipCR
+
+ ; handle LF (10) -> end of line
+ cmp al, 10
+ je EndOfLine
+
+ ; normal character -> append to lineBuffer if space left
+ mov edx, [lineLen]
+ cmp edx, 255 ; leave 1 byte for NULL
+ jae SkipStore ; ignore extra characters if too long
+ mov [lineBuffer+edx], al
+ inc edx
+ mov [lineLen], edx
+
+SkipStore:
+ inc edi
+ dec ebp
+ jmp ScanChunk
+
+SkipCR:
+ inc edi
+ dec ebp
+ jmp ScanChunk
+
+EndOfLine:
+ ; terminate current line
+ mov edx, [lineLen]
+ mov byte [lineBuffer+edx], 0
+
+ ; if line isn't empty, process it
+ cmp edx, 0
+ je LineDone
+
+ push esi
+ push edi
+ mov esi, lineBuffer
+ call HandleLine
+ pop edi
+ pop esi
+
+LineDone:
+ mov dword [lineLen], 0 ; reset line length
+ inc edi
+ dec ebp
+ jmp ScanChunk
+
+
+; process last line if not newline-terminated, then print result
+EOF:
+ ; if there is a partial line at EOF, process it
+ mov edx, [lineLen]
+ cmp edx, 0
+ jle PrintResults
+ mov byte [lineBuffer+edx], 0
+
+ push esi
+ mov esi, lineBuffer
+ call HandleLine
+ pop esi
+
+PrintResults:
+ mov ecx, label1
+ call PrintString
+ mov eax, [password1]
+ call PrintInt
+
+ ; newline
+ mov eax, SYS_WRITE
+ mov ebx, STDOUT
+ mov ecx, newline
+ mov edx, 1
+ int 0x80
+
+ mov ecx, label2
+ call PrintString
+ mov eax, [password2]
+ call PrintInt
+
+ ; newline
+ mov eax, SYS_WRITE
+ mov ebx, STDOUT
+ mov ecx, newline
+ mov edx, 1
+ int 0x80
+
+ mov eax, SYS_CLOSE
+ mov ebx, esi
+ int 0x80
+ mov eax, SYS_EXIT
+ xor ebx, ebx
+ int 0x80
+
+
+; Handle one line: ESI -> "L123" or "R45"
+HandleLine:
+ mov al, [esi]
+ cmp al, 'L'
+ je .left
+ mov ebx, 1 ; direction = +1 for 'R' or anything else
+ jmp .after
+.left:
+ mov ebx, -1 ; direction = -1 for 'L'
+.after:
+ inc esi ; skip 'L' or 'R'
+ call ParseInt ; EAX = steps
+ mov ecx, eax
+
+.part1
+ mov eax, ecx
+ imul eax, ebx ; EAX = dir*steps
+ mov edx, [angle1]
+ add edx, eax ; update angle (can be out of range signed)
+
+; normalize edx into [0; 100[ using repeated +- 100
+Norm1:
+ cmp edx, 0
+ jl N1Add
+ cmp edx, 100
+ jl N1Done
+ sub edx, 100
+ jmp Norm1
+N1Add:
+ add edx, 100
+ jmp Norm1
+N1Done:
+ mov [angle1], edx
+ cmp edx, 0
+ jne .startPart2
+ mov eax, [password1]
+ inc eax
+ mov [password1], eax
+
+; Part 2
+.startPart2:
+ mov edi, ebx
+
+part2Loop:
+ test ecx, ecx
+ jle .done
+ dec ecx
+
+ mov edx, [angle2]
+ add edx, edi
+ cmp edx, 100
+ jne .checkNegative
+ mov edx, 0
+ jmp .p2store
+.checkNegative:
+ cmp edx, -1
+ jne .p2store
+ mov edx, 99
+.p2store:
+ mov [angle2], edx
+ cmp edx, 0
+ jne part2Loop
+ mov eax, [password2]
+ inc eax
+ mov [password2], eax
+ jmp part2Loop
+.done:
+ ret
+
+
+; parse ASCII integer into EAX
+ParseInt:
+ xor eax, eax ; result = 0
+.parseLoop:
+ mov dl, [esi]
+ cmp dl, '0'
+ jl .done
+ cmp dl, '9'
+ jg .done
+
+ sub dl, '0' ; digit value 0..9
+ movzx edx, dl
+
+ imul eax, eax, 10 ; result *= 10
+ add eax, edx ; result += digit
+
+ inc esi
+ jmp .parseLoop
+.done:
+ ret
+
+PrintInt:
+ mov edi, numberBuffer+15 ; write digits from the end
+ mov byte [edi], 0 ; terminator
+ dec edi
+
+ cmp eax, 0
+ jne .convert
+ mov byte [edi], '0'
+ jmp .finish
+.convert:
+ ; we will repeatedly compute:
+ ; q = eax / 10
+ ; r = eax % 10
+ ; using only subtraction
+.nextDigit:
+ mov edx, eax ; tmp = current value
+ mov ecx, 0 ; q = 0
+
+ cmp edx, 10 ; if < 0, q=0, r=edx
+ jb .lastDigit
+.subLoop:
+ sub edx, 10
+ inc ecx ; q++
+ cmp edx, 10
+ jae .subLoop ; while tmp >= 10
+.lastDigit:
+ ; now:
+ ; ecx = quotient
+ ; edx = remainder (0..9)
+ add dl, '0'
+ mov [edi], dl ; store digit
+ dec edi
+ mov eax, ecx ; eax = quotient
+ test eax, eax
+ jnz .nextDigit ; more digits to extract?
+
+ inc edi ; move to first digit
+.finish:
+ mov eax, SYS_WRITE
+ mov ebx, STDOUT
+ mov ecx, edi
+ mov edx, numberBuffer+15
+ sub edx, edi ; length
+ int 0x80
+ ret
+
+PrintString:
+ push ecx
+ push edx
+ mov edx, 0
+.count:
+ cmp byte [ecx+edx], 0
+ je .doneCount
+ inc edx
+ jmp .count
+.doneCount:
+ mov eax, SYS_WRITE
+ mov ebx, STDOUT
+ int 0x80
+
+ pop edx
+ pop ecx
+ ret
|
