diff --git a/.gitignore b/.gitignore index 0a8a0cd..c3bfbe8 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ lib/ *.3dsx *.elf *.smdh +input.txt diff --git a/day01/Makefile b/day01/Makefile index 1b4dec0..999b744 100644 --- a/day01/Makefile +++ b/day01/Makefile @@ -38,7 +38,7 @@ DATA := data INCLUDES := include GRAPHICS := gfx GFXBUILD := $(BUILD) -#ROMFS := romfs +ROMFS := romfs #GFXBUILD := $(ROMFS)/gfx APP_TITLE := Hello Swift APP_DESCRIPTION := Built with Embedded Swift, devkitARM & libctru diff --git a/day01/romfs/test.txt b/day01/romfs/test.txt new file mode 100644 index 0000000..53287c7 --- /dev/null +++ b/day01/romfs/test.txt @@ -0,0 +1,10 @@ +L68 +L30 +R48 +L5 +R60 +L55 +L1 +L99 +R14 +L82 diff --git a/day01/source/day01.swift b/day01/source/day01.swift index 6d311f6..117170f 100644 --- a/day01/source/day01.swift +++ b/day01/source/day01.swift @@ -1,39 +1,19 @@ +#if !hasFeature(Embedded) +import Foundation +#endif + @main struct Day01 { - static func main() { - gfxInitDefault() - - consoleInit(GFX_TOP, nil) - - print("Started...\n") - - let parsed = parseInput(realInput) + static func run() { + guard let input = realInput else { + print("input sttring nil") + return + } + print("Started...") + let parsed = parseInput(input) part1(parsed) part2(parsed) - - print("\nPress Start to exit...") - - // Main loop - while aptMainLoop() { - // Scan all the inputs. This should be done once for each frame - hidScanInput() - - // hidKeysDown returns information about which buttons have been just pressed (and they weren't in the previous frame) - let kDown = hidKeysDown() - - if kDown & KEY_START != 0 { - break // break in order to return to hbmenu - } - - // Flush and swap framebuffers - gfxFlushBuffers() - gfxSwapBuffers() - - // Wait for VBlank - gspWaitForVBlankWrapper() - } - - gfxExit() + print("Press Start to exit...") } static func parseInput(_ input: String) -> [(Direction, Int)] { @@ -87,6 +67,58 @@ struct Day01 { } print("Part 2: \(count)") } + + + #if hasFeature(Embedded) + static func main() { + gfxInitDefault() + consoleInit(GFX_TOP, nil) + guard romfsInit() == 0 else { + print("Couldn't init RomFS") + return + } + + testInput = stringFromFile("romfs:/test.txt") + realInput = stringFromFile("romfs:/input.txt") + + run() + + while aptMainLoop() { + hidScanInput() + let kDown = hidKeysDown() + if kDown & KEY_START != 0 { + break + } + + gfxFlushBuffers() + gfxSwapBuffers() + } + + gfxExit() + } + + static func stringFromFile(_ path: String) -> String { + let file = fopen(path, "r") + var ret = "" + var buf = [CChar](repeating: 0, count: 100) + while fgets(&buf, 100, file) != nil { + ret += String(cString: buf) + } + guard feof(file) != 0 else { + print("Error reading file \(path)") + return "" + } + return ret + } + + #else + static func main() { + testInput = try? String(contentsOfFile: "romfs/test.txt") + realInput = try? String(contentsOfFile: "romfs/input.txt") + run() + } + #endif + } @@ -103,4528 +135,6 @@ enum Direction { } } -let testInput: String = """ -L68 -L30 -R48 -L5 -R60 -L55 -L1 -L99 -R14 -L82 -""" +var testInput: String? = nil -let realInput: String = """ -R46 -L12 -R1 -R12 -R41 -R10 -L45 -R32 -R6 -R31 -R46 -L18 -L33 -R19 -R38 -L32 -R39 -L14 -L33 -L35 -R14 -R20 -L49 -R37 -L25 -R26 -L37 -L30 -R25 -L2 -R43 -R16 -L26 -R30 -R9 -L36 -R38 -L37 -R41 -R5 -L39 -R41 -R9 -L43 -L27 -R22 -R28 -R49 -L33 -R83 -L1 -R50 -R50 -L19 -R74 -R28 -L60 -L34 -R84 -R65 -L96 -L95 -L36 -R7 -R43 -L46 -R7 -L22 -L13 -R80 -L72 -L12 -L23 -L60 -L24 -R69 -R55 -R74 -L14 -L69 -L49 -L1 -L41 -R58 -L40 -R51 -L56 -R87 -L70 -R80 -R55 -R35 -R4 -L99 -L5 -L53 -R27 -L97 -L51 -L88 -R69 -R17 -R66 -L81 -R91 -R89 -L89 -L513 -R94 -R19 -R99 -L99 -L82 -L26 -R440 -L32 -R580 -R959 -L930 -L9 -R76 -L6 -L34 -L612 -L24 -L593 -L7 -R38 -R62 -L66 -R45 -L24 -R14 -R731 -R79 -R19 -R190 -R720 -L43 -L26 -R861 -L863 -L15 -L22 -R67 -L67 -L37 -L485 -R252 -R70 -R10 -L93 -L17 -R36 -R4 -L79 -L955 -R156 -L40 -L22 -L311 -R9 -L82 -L97 -R94 -L58 -L55 -R895 -R53 -L73 -L25 -R734 -L62 -L489 -L33 -L55 -L61 -R356 -R81 -R54 -R847 -L866 -R46 -L42 -L66 -L94 -R180 -R89 -R58 -R425 -L62 -L90 -R23 -R76 -L99 -R61 -R39 -R80 -L21 -R41 -R62 -R85 -L471 -L40 -L80 -L40 -R27 -R57 -L36 -L31 -L95 -L285 -L85 -R32 -L37 -R56 -L392 -R594 -L74 -L59 -R911 -R1 -R43 -L18 -R912 -R863 -L20 -L80 -R87 -L596 -R9 -L69 -L64 -R70 -R98 -L38 -R85 -L26 -L6 -R53 -R97 -L81 -L43 -L70 -L86 -L11 -L25 -R41 -L8 -R383 -R35 -L67 -L90 -L78 -L35 -L65 -R94 -R6 -R60 -R40 -R51 -L84 -R38 -L543 -L72 -R88 -L87 -R9 -L37 -R237 -L67 -R301 -L15 -R81 -L58 -R31 -R2 -L1 -L61 -R38 -R349 -L72 -R72 -R578 -R362 -L40 -R81 -R19 -R54 -L48 -L77 -R71 -R73 -L473 -R110 -R90 -R51 -L51 -R53 -L796 -R43 -R99 -L555 -R204 -R52 -R93 -R7 -R55 -R45 -L218 -L82 -L449 -L70 -R50 -R969 -L665 -L28 -R99 -R51 -R43 -R70 -L19 -R45 -L30 -R434 -R62 -L712 -L50 -R190 -R47 -L341 -L196 -R852 -L54 -L65 -R36 -L69 -R83 -L93 -L190 -L807 -R7 -L2 -R2 -R5 -R82 -L26 -R39 -R95 -R85 -L80 -R11 -R89 -L89 -L25 -R14 -L53 -L218 -R70 -R44 -L32 -L786 -R87 -L33 -R21 -L483 -L17 -L81 -L70 -L40 -L611 -L93 -L5 -R49 -R51 -L61 -L57 -R18 -R62 -R53 -R85 -R40 -L17 -R506 -L49 -L243 -R63 -L49 -R96 -L31 -R52 -L80 -L71 -L44 -R27 -R1 -L1 -R89 -L589 -R40 -L85 -R45 -L25 -L91 -L84 -R43 -L55 -L49 -R993 -L38 -R6 -L47 -L1 -L82 -R32 -L2 -L723 -R48 -R94 -R18 -L863 -L826 -L44 -L4 -R7 -R93 -R78 -R30 -L71 -L37 -L651 -L79 -L58 -R576 -L610 -R22 -R77 -L77 -R430 -R99 -L530 -R5 -L4 -L305 -L95 -L863 -L81 -R44 -L836 -L91 -R12 -R15 -R38 -R689 -L86 -R59 -L27 -R63 -R64 -R67 -R33 -R27 -R264 -R130 -R579 -L95 -L459 -L46 -R411 -L21 -R15 -R1 -L806 -L77 -R85 -L3 -L5 -L654 -R54 -L64 -L285 -R73 -L65 -R41 -R29 -L146 -R417 -L62 -L82 -R32 -R374 -R26 -L457 -L23 -L10 -R34 -R68 -L37 -R33 -L15 -L97 -L40 -L58 -L28 -L9 -L27 -R37 -R8 -R711 -R22 -L373 -L27 -L94 -R21 -L35 -L92 -R33 -L85 -R552 -R17 -L65 -R309 -R39 -L903 -R63 -R83 -R41 -L56 -R10 -R62 -L270 -L22 -R157 -L35 -L30 -L11 -R49 -L5 -R967 -R94 -R46 -L740 -R77 -R23 -L12 -L15 -R27 -R4 -L630 -L16 -L26 -R68 -L50 -L556 -R6 -R639 -R630 -L98 -L71 -R21 -L21 -R75 -R53 -L84 -R56 -R86 -R14 -R55 -L57 -R4 -R98 -L30 -R20 -R10 -R98 -R5 -R56 -R207 -R34 -L7 -R7 -L19 -R92 -L242 -R43 -L19 -R3 -L27 -L31 -L16 -R17 -L48 -R92 -L11 -R32 -L12 -L64 -R10 -L86 -L414 -R676 -L76 -L27 -R16 -R12 -R99 -L83 -L7 -R90 -L82 -L5 -R83 -R30 -L26 -L51 -L594 -R719 -L74 -L7 -L493 -L99 -L44 -L68 -L772 -R83 -L36 -L76 -L28 -R89 -L35 -L44 -L350 -L78 -L45 -R77 -R78 -L52 -L73 -L27 -L73 -R34 -L32 -R57 -L86 -L43 -L4 -L28 -R75 -L4 -R98 -R57 -L51 -R55 -L38 -R83 -R65 -R95 -R40 -L89 -L16 -L44 -L41 -L23 -L987 -R65 -L208 -R198 -L55 -R52 -R36 -R40 -L72 -R44 -R48 -R20 -L68 -R2 -L78 -R96 -R62 -L77 -L305 -R146 -R17 -L63 -L3 -R10 -R693 -L78 -L59 -R5 -R32 -L91 -L34 -R25 -L185 -R15 -L78 -L79 -R69 -R58 -R88 -R12 -R94 -R45 -L91 -R47 -L663 -R868 -L759 -L97 -R60 -R64 -L68 -R87 -R13 -R67 -R92 -R1 -R42 -L402 -R3 -R4 -R90 -L13 -R16 -R89 -R6 -L795 -L26 -L91 -R17 -R88 -R12 -R96 -L96 -R81 -R76 -R43 -L84 -R84 -R96 -L50 -R6 -L15 -L911 -L60 -L66 -L832 -R68 -L36 -R60 -R40 -L753 -R73 -L15 -L71 -R484 -R517 -R66 -R476 -L77 -R22 -R78 -R20 -R2 -L722 -L32 -R41 -L328 -L23 -R42 -L97 -R735 -L807 -R81 -R88 -R58 -R179 -R42 -L79 -L68 -R68 -R1 -L42 -R71 -R72 -R95 -L53 -R56 -L48 -L52 -R449 -R51 -L30 -L70 -R25 -L77 -R52 -R65 -R228 -L93 -R64 -R476 -R46 -R59 -R69 -R45 -R21 -R51 -L16 -L224 -L80 -R301 -R88 -R385 -L30 -R22 -L39 -L38 -L75 -R175 -L74 -L486 -L40 -L1 -R1 -L61 -L72 -L367 -R54 -R46 -R89 -L4 -R15 -L63 -R67 -R62 -R34 -R12 -R95 -R93 -R36 -L95 -L3 -R77 -R29 -R71 -L15 -L581 -R53 -R528 -L20 -L80 -L98 -R98 -R55 -L555 -L866 -R51 -R15 -R899 -L399 -R5 -L758 -L28 -R82 -L401 -R51 -L45 -L6 -L14 -R40 -L253 -L473 -R50 -R150 -R11 -R80 -R612 -R833 -L712 -L89 -R30 -R60 -R75 -L4 -L66 -R22 -R68 -L56 -L93 -L11 -R340 -L926 -R212 -L36 -R51 -L959 -R65 -R93 -L37 -L63 -R12 -L62 -R92 -R20 -R38 -R887 -R13 -R92 -R34 -R818 -L196 -R52 -R6 -L6 -L72 -R19 -R94 -L41 -R413 -L67 -R54 -R719 -L41 -R22 -R96 -L796 -R64 -L84 -L22 -L58 -R56 -L314 -R284 -L194 -L85 -R49 -L896 -R42 -R95 -R63 -L305 -R98 -L42 -R49 -L936 -L10 -L47 -R27 -R66 -L48 -R48 -R34 -R45 -R67 -R54 -L98 -L57 -L66 -R21 -L12 -L577 -L74 -R863 -R66 -R98 -L29 -R420 -L255 -R81 -R53 -L34 -L24 -R226 -R21 -L30 -L43 -L429 -R921 -L23 -L19 -L59 -R57 -L3 -L595 -R111 -R68 -L79 -R1 -L703 -R2 -L5 -L40 -L10 -L79 -L66 -L310 -L90 -L66 -L8 -L44 -R6 -L31 -R43 -R14 -R86 -R79 -L438 -R59 -R81 -R83 -L894 -L3 -L99 -L841 -R92 -R623 -L151 -R77 -R32 -L64 -L99 -L8 -L29 -L85 -R97 -R49 -L61 -L56 -R32 -L76 -L36 -R36 -R474 -R26 -L825 -R67 -L49 -R7 -R51 -L12 -L83 -L9 -L77 -L62 -R92 -L73 -L706 -R19 -L55 -R70 -L72 -L83 -L38 -L58 -L804 -L692 -R92 -R54 -R27 -L876 -R607 -R49 -L9 -R38 -R819 -R48 -L57 -L188 -R88 -R26 -L26 -L76 -R72 -R22 -R97 -L22 -R596 -L70 -R81 -L37 -L33 -R26 -L43 -R87 -R67 -L55 -R107 -L73 -R54 -R17 -R81 -L41 -L57 -R49 -L42 -R293 -R85 -L85 -R25 -R832 -R65 -L48 -L99 -L96 -L79 -R93 -R79 -R30 -L183 -L36 -L22 -L29 -R845 -L25 -R637 -R11 -R15 -L43 -R28 -R99 -R28 -R19 -R28 -R326 -L76 -L924 -R61 -R50 -L27 -R16 -R757 -R373 -L30 -R57 -R68 -R72 -L811 -R47 -L12 -L21 -L56 -L541 -R7 -L10 -L211 -L89 -R67 -R25 -R80 -R38 -L17 -R85 -R61 -R95 -R66 -L319 -R61 -L2 -R960 -L89 -R71 -R19 -R20 -L21 -L186 -R47 -R39 -R71 -R14 -R15 -L26 -R84 -L58 -L51 -L49 -L99 -L1 -L65 -L135 -R27 -L827 -L47 -L321 -L32 -L79 -L29 -L34 -R96 -L54 -R63 -R2 -L44 -R181 -R982 -L78 -L6 -L72 -R69 -R603 -L19 -R19 -R41 -L73 -R465 -R20 -L69 -R590 -R93 -R6 -R12 -L9 -L84 -L389 -R97 -R494 -L88 -L106 -L21 -L79 -R11 -R33 -L439 -R612 -L90 -R73 -L675 -L87 -R65 -L36 -L67 -R66 -L96 -L388 -L89 -R6 -L99 -R71 -R982 -L9 -L533 -L111 -L37 -R923 -L72 -R86 -R16 -R33 -L72 -L67 -R90 -L42 -R4 -R735 -R9 -R94 -L4 -L96 -L36 -R31 -R20 -R37 -L452 -L63 -L40 -L88 -R88 -L82 -R92 -L7 -R35 -R27 -R51 -R87 -R45 -R29 -L74 -R311 -R89 -L62 -R94 -L37 -L95 -R545 -R14 -R41 -R82 -L82 -L55 -L345 -R1 -L59 -R238 -L30 -R50 -R275 -L66 -R90 -L56 -R99 -L188 -R829 -R17 -L421 -R21 -R46 -R68 -R13 -R49 -R424 -R93 -R7 -R74 -L974 -L93 -R81 -L94 -L66 -L26 -R40 -R58 -R23 -R18 -R59 -R43 -L46 -R63 -L81 -R21 -L62 -R62 -R697 -L97 -R80 -L766 -R45 -L59 -R291 -R9 -L68 -R58 -L94 -R50 -R718 -L35 -L29 -L73 -R581 -L708 -R88 -R12 -R73 -L77 -R81 -R97 -L542 -R17 -R1 -L94 -L56 -L48 -L57 -R5 -L9 -R20 -L763 -L56 -L24 -L368 -L22 -L40 -R62 -R30 -R70 -L51 -R33 -L82 -R75 -L60 -L70 -R3 -L61 -R613 -R792 -R108 -L37 -R37 -L69 -R34 -R835 -R67 -R33 -L157 -L43 -R816 -L44 -L72 -R58 -L58 -R28 -L3 -L72 -L73 -L80 -L26 -L39 -L81 -L754 -L96 -L85 -R50 -L258 -L27 -R16 -L84 -R12 -R672 -L99 -R230 -R70 -R99 -L83 -R583 -L82 -L14 -R96 -R343 -L577 -R93 -R41 -L894 -R28 -R66 -R76 -L76 -L677 -L23 -L35 -L41 -R98 -L103 -L688 -R18 -R34 -R82 -R46 -L11 -L14 -L5 -L81 -R35 -L53 -L82 -L5 -L44 -L37 -L64 -L17 -L87 -L46 -R876 -R224 -L799 -L63 -R62 -L65 -L65 -L70 -R46 -R24 -R30 -L63 -L24 -R387 -L71 -R71 -L94 -L36 -L70 -L32 -L77 -L762 -L29 -L17 -R225 -L32 -R96 -L72 -R77 -R16 -R7 -L51 -R445 -R6 -L32 -L77 -R9 -L5 -L95 -R20 -L59 -L18 -L32 -L329 -L723 -R41 -L69 -L12 -R922 -L67 -L950 -R476 -R27 -R173 -R83 -L962 -L56 -R59 -R60 -R513 -L97 -R70 -R54 -L24 -R416 -R484 -R57 -R21 -R22 -L57 -R71 -R686 -R93 -L616 -R747 -R81 -L323 -R418 -R32 -R97 -R28 -R460 -L58 -R73 -L26 -L6 -R6 -L21 -R76 -L286 -R629 -L4 -L52 -R10 -R87 -R55 -R55 -L76 -L26 -L35 -R82 -R715 -R85 -R78 -L34 -L27 -L8 -R26 -L35 -R93 -R7 -R48 -R62 -R84 -L94 -R96 -L89 -L29 -R2 -L80 -R933 -L33 -L59 -L77 -R111 -R25 -R76 -L76 -R56 -L37 -R84 -R97 -L25 -L79 -R4 -R92 -R96 -L67 -R42 -R46 -R28 -L37 -R29 -L29 -R34 -R93 -R19 -R84 -R770 -L56 -R689 -L74 -L1 -R42 -L72 -R72 -L609 -R945 -R15 -R49 -R8 -R492 -R58 -R42 -R470 -R34 -R17 -R94 -R5 -R4 -R82 -L85 -L62 -R41 -R37 -R63 -L50 -R17 -R41 -R92 -R995 -R5 -L63 -R63 -R23 -L41 -R55 -L601 -L40 -L14 -L87 -L221 -R24 -R49 -R712 -L359 -L28 -R28 -L844 -R79 -R90 -R75 -L46 -L64 -L14 -R97 -L655 -R90 -L20 -R12 -R79 -L1 -L78 -R72 -L99 -L1 -R602 -L19 -R72 -R8 -L78 -L36 -R87 -L23 -R23 -L408 -R57 -R590 -R66 -R339 -R53 -L5 -L90 -L6 -L76 -R31 -R854 -L13 -R43 -L65 -R122 -L592 -L75 -L61 -L82 -L90 -R86 -L86 -R64 -R97 -L57 -R44 -L88 -L94 -R279 -L10 -R13 -R56 -R12 -R84 -R59 -L75 -L84 -R80 -R20 -L18 -L1 -L267 -R786 -L197 -R597 -R10 -L99 -R89 -L19 -L81 -L877 -L23 -L35 -R82 -L47 -R37 -R63 -R43 -R57 -R38 -R62 -R36 -R52 -L9 -R321 -R92 -R73 -R53 -L37 -R19 -R36 -L36 -R121 -R665 -L621 -R92 -L57 -L52 -R86 -R72 -R12 -R358 -L809 -L6 -R39 -R11 -L52 -R95 -R95 -L12 -R33 -R30 -R53 -R41 -R10 -R96 -L87 -L13 -L33 -L90 -L77 -L89 -L11 -R51 -R43 -L45 -L92 -L857 -L86 -L82 -L29 -L26 -R1 -R507 -R94 -L90 -L89 -L55 -L3 -L62 -R20 -R36 -R164 -L14 -R62 -L42 -L27 -L56 -L50 -R27 -L47 -R32 -L11 -R64 -L738 -L41 -R518 -R67 -L16 -L28 -L451 -L264 -R15 -R57 -L398 -L705 -R481 -L35 -L23 -R58 -R6 -R88 -R79 -R92 -L99 -L94 -L24 -L58 -L20 -L63 -L42 -R95 -L42 -R92 -L999 -L85 -R362 -L23 -L23 -R82 -R41 -R79 -R21 -R720 -L43 -L530 -R8 -R45 -L3 -R3 -L66 -L34 -R727 -R509 -R93 -L29 -R97 -R61 -L58 -R82 -R32 -R29 -R57 -L13 -L87 -R385 -L23 -L408 -R46 -R59 -L59 -L23 -R521 -R46 -R54 -R902 -L634 -L75 -R9 -R655 -L29 -L30 -R93 -R84 -R66 -L540 -R10 -R91 -L910 -R97 -R46 -L33 -L2 -L60 -L93 -L45 -R73 -R27 -R20 -L720 -L90 -R90 -L76 -L655 -R31 -L2 -L498 -R41 -R71 -L12 -R378 -R222 -R37 -R98 -R26 -L61 -L490 -L10 -L66 -R66 -L48 -R82 -L41 -L393 -L52 -R652 -R483 -L83 -R75 -L788 -R38 -L62 -R37 -R56 -R71 -L21 -R19 -R75 -R92 -L17 -L75 -R44 -R356 -L95 -L5 -L140 -L52 -R41 -R43 -R78 -L13 -R64 -R73 -L994 -R861 -L7 -R46 -L842 -L406 -L15 -R863 -L812 -R3 -L26 -R35 -L15 -R15 -R87 -L29 -L54 -L95 -L9 -L5 -R423 -R38 -L18 -R701 -R61 -L20 -R20 -R11 -R61 -L225 -R78 -R17 -L43 -L32 -L64 -R372 -L75 -L41 -R94 -R47 -L11 -L89 -L87 -L59 -R46 -R127 -L676 -R48 -R1 -L268 -R68 -L54 -R76 -L22 -L52 -L53 -R906 -R99 -L82 -R382 -R87 -R13 -R806 -R36 -R78 -L20 -L762 -R62 -L66 -L34 -R49 -R51 -L65 -R65 -L21 -L62 -R32 -L770 -R98 -L723 -L543 -R89 -L47 -L53 -L59 -R12 -L53 -R85 -L945 -L82 -R27 -L58 -L97 -L883 -R53 -R21 -L62 -R526 -R15 -L89 -L30 -R365 -R70 -L16 -R142 -L89 -L88 -R35 -R24 -R776 -R21 -L38 -L83 -L21 -R22 -L60 -R53 -L613 -L81 -R569 -L33 -R64 -R89 -L64 -R64 -R11 -R64 -L64 -R15 -R96 -L35 -L85 -R9 -L29 -L61 -L83 -R36 -L14 -L64 -R15 -R16 -L204 -L408 -L4 -R21 -L11 -R690 -L23 -R423 -R376 -L446 -L45 -R15 -L65 -R7 -L2 -L48 -L92 -L54 -R33 -L53 -R41 -R33 -R2 -L69 -R933 -L66 -L20 -R90 -R20 -R310 -L893 -L56 -L63 -L57 -R57 -R41 -R10 -R61 -L65 -R98 -R25 -R41 -L57 -R82 -L124 -R57 -L5 -R24 -R85 -L24 -L80 -R212 -R28 -L97 -L4 -R12 -R41 -L49 -R795 -R5 -L31 -L8 -R88 -R92 -R16 -L157 -L92 -R71 -L79 -L352 -R45 -R45 -L38 -R83 -L61 -R78 -R64 -L64 -L41 -L59 -R247 -R53 -L80 -L20 -L23 -R89 -R34 -L323 -R723 -L799 -R75 -R50 -R40 -R9 -L807 -R36 -R56 -R40 -R590 -R88 -R9 -R13 -L38 -R38 -R20 -R76 -R2 -R2 -R32 -L38 -L194 -R77 -R14 -R94 -L85 -L8 -R58 -R2 -R25 -R23 -R86 -L32 -R85 -L3 -L91 -L45 -R75 -R27 -L50 -R9 -L61 -L32 -R94 -L762 -R42 -L33 -R47 -L56 -L91 -L9 -L13 -L87 -L88 -R688 -L94 -L36 -R71 -R82 -R77 -R24 -L205 -R15 -L34 -R69 -L90 -R18 -L14 -L92 -L43 -R52 -R66 -R175 -L26 -L15 -L18 -R46 -R66 -R24 -L18 -R91 -L54 -L84 -L2 -R534 -R82 -L185 -L6 -L48 -L28 -R8 -R292 -R88 -R516 -R76 -R132 -L87 -R75 -L22 -L66 -R55 -L67 -L36 -L56 -R92 -L83 -R98 -L24 -R62 -R71 -R44 -L68 -R52 -L48 -R3 -R93 -R68 -L68 -R95 -R69 -L951 -L69 -R56 -L482 -R82 -R34 -R59 -R507 -L47 -R94 -R63 -L49 -R39 -R55 -L444 -R89 -R5 -R95 -R44 -L33 -L11 -L311 -L89 -L63 -R75 -L49 -L88 -L98 -L549 -L533 -R5 -L54 -R94 -R60 -R63 -L563 -R77 -R23 -L44 -L42 -R886 -L51 -R51 -R967 -L67 -R71 -R73 -L548 -L23 -L19 -L61 -R7 -R52 -R31 -R18 -L39 -R77 -R4 -R6 -L81 -R29 -L476 -L979 -L42 -L90 -R90 -R843 -R74 -L83 -L34 -L668 -R50 -R462 -R53 -R3 -R679 -R821 -L238 -R67 -R11 -L30 -R56 -L73 -L410 -R91 -L95 -R21 -L87 -L35 -R90 -L52 -L17 -L27 -R28 -R53 -L33 -R702 -R78 -R614 -L52 -R59 -L6 -R85 -R56 -R58 -R32 -L94 -L82 -R629 -L603 -L96 -L54 -R43 -R11 -R15 -R85 -L35 -L65 -L13 -R74 -R88 -L349 -R83 -L74 -L83 -R74 -L93 -R61 -R83 -L52 -L99 -L83 -R15 -R38 -L759 -L711 -R54 -R46 -L301 -L99 -L32 -L548 -R22 -L39 -R24 -L7 -L58 -R32 -L94 -R309 -R80 -L89 -R47 -R53 -L49 -L51 -L91 -L429 -L80 -R72 -L45 -R935 -R30 -R638 -R372 -R98 -L94 -R74 -L93 -L663 -L73 -L51 -R444 -L799 -L61 -R43 -L35 -L18 -R68 -R25 -L524 -L41 -L2 -R61 -R51 -R55 -L67 -L755 -L945 -R52 -L60 -L42 -R80 -R167 -L119 -L278 -R94 -L92 -L77 -R51 -R84 -L19 -R10 -L51 -L95 -L59 -L46 -L79 -L54 -L34 -L33 -R69 -L175 -L410 -R61 -R11 -L56 -L34 -R878 -L56 -R65 -L43 -R90 -R89 -L89 -L5 -L56 -L7 -L756 -R71 -R53 -R441 -R59 -L114 -L47 -R33 -R72 -R856 -R6 -L320 -L86 -L202 -L62 -L36 -R78 -L78 -R23 -L915 -L91 -L17 -L70 -R11 -R59 -L42 -L51 -R17 -L26 -L798 -R49 -R997 -R87 -R28 -L84 -L10 -L12 -L55 -L753 -R553 -R75 -L69 -R649 -L55 -R79 -R21 -L57 -R41 -L84 -R38 -R18 -R434 -L190 -R41 -L41 -L140 -R75 -R65 -R50 -L50 -R71 -R59 -L619 -R43 -R94 -L43 -L95 -R3 -R248 -R39 -R38 -L33 -R95 -L90 -R20 -L30 -R404 -R96 -L59 -L12 -L629 -L48 -L854 -R97 -R54 -L46 -R97 -L39 -L90 -R6 -L77 -R2 -R11 -R39 -L287 -R735 -R99 -R76 -R925 -R665 -R35 -R150 -R3 -R47 -R17 -R83 -R469 -R34 -R97 -R2 -R98 -L39 -L69 -R8 -L399 -L69 -L44 -L2 -L586 -R21 -L57 -L64 -L28 -R28 -L69 -L89 -L74 -R32 -L283 -R73 -L12 -R22 -R617 -R25 -R558 -L78 -R78 -R34 -R69 -L612 -L91 -L14 -R14 -R91 -L75 -R84 -L35 -L13 -R676 -R182 -R48 -L62 -L85 -R2 -R71 -R79 -L74 -L938 -L32 -R81 -R6 -L19 -R13 -L609 -L26 -L85 -L654 -R74 -R597 -L97 -L721 -R21 -L70 -L87 -L75 -R34 -L32 -R80 -R59 -R91 -L51 -L81 -R10 -R39 -R35 -L74 -R822 -R932 -R875 -L151 -R58 -L914 -R11 -L17 -R69 -R791 -L69 -L94 -L40 -R23 -R93 -R90 -L2 -R59 -L814 -L79 -L13 -L44 -L64 -R57 -R5 -R26 -R1 -R1 -R21 -R89 -R2 -L89 -R32 -L45 -L28 -R64 -L36 -L97 -L30 -L73 -L17 -L883 -L62 -R69 -R119 -R74 -L17 -L83 -L381 -R25 -L44 -L80 -L92 -R64 -R949 -L871 -L827 -R57 -L197 -L4 -L2 -R88 -R59 -R788 -L37 -L95 -R38 -R27 -R35 -R23 -L17 -R194 -L69 -L71 -R26 -R83 -R31 -R18 -R39 -L57 -L65 -R89 -R133 -L57 -R98 -L644 -L50 -R980 -R85 -R962 -L34 -L61 -R77 -R339 -R48 -L81 -L58 -L780 -R19 -R48 -R52 -L240 -R82 -R658 -R28 -R39 -R88 -R45 -R8 -L79 -R21 -L50 -R82 -L82 -R710 -R87 -L397 -R430 -L30 -R44 -L31 -R96 -L27 -R18 -L94 -L676 -L116 -R61 -R50 -L68 -R43 -L1 -L99 -R783 -R209 -L39 -L46 -R36 -L54 -R211 -L46 -L395 -R17 -R393 -L36 -L633 -L29 -R43 -L75 -L939 -L59 -L74 -R148 -L26 -R11 -L45 -L98 -L87 -R18 -R12 -R13 -R87 -L83 -R83 -R49 -L49 -L46 -L24 -L21 -L32 -R90 -R33 -R85 -L85 -R23 -R77 -L34 -L66 -L85 -L15 -R3 -L3 -L454 -R579 -L78 -L47 -R50 -L32 -L18 -R39 -R91 -L40 -R10 -R84 -L35 -R751 -R67 -R64 -L31 -R8 -R8 -L83 -L33 -L50 -L50 -R64 -R36 -R71 -L70 -R56 -R43 -L23 -R523 -L295 -L457 -R52 -R4 -R47 -L51 -R35 -R98 -R87 -R80 -R24 -R50 -L39 -L9 -L71 -R45 -R10 -L24 -L986 -R373 -R99 -L472 -L26 -R26 -L1 -R85 -R22 -L6 -L35 -L65 -L37 -L99 -L664 -R56 -R64 -L20 -L1 -L65 -R68 -L2 -L558 -L42 -L87 -R887 -L18 -R92 -R26 -L24 -L43 -L50 -L29 -R446 -R539 -R61 -L947 -R829 -L806 -L76 -R830 -L91 -R34 -L77 -R86 -L94 -R12 -L446 -L77 -L533 -L39 -R92 -L7 -L74 -R68 -R116 -R88 -L88 -L31 -L20 -R83 -L32 -L71 -R784 -L13 -L9 -L304 -L87 -R665 -L53 -L12 -L76 -L87 -R125 -R33 -L772 -R77 -L89 -L11 -L70 -L30 -R26 -L965 -R39 -R153 -R47 -R648 -R52 -R108 -L71 -R63 -L17 -R17 -L63 -L74 -L16 -R21 -L68 -L93 -L46 -R539 -R60 -R269 -L84 -R37 -L287 -L83 -L31 -R4 -L85 -L82 -R84 -L28 -R136 -R90 -L86 -L945 -R28 -R49 -R79 -R142 -R831 -R24 -L491 -L42 -R1 -L52 -R68 -L2 -R96 -R69 -R28 -L544 -R323 -L76 -L74 -R74 -L76 -R154 -L78 -R2 -L981 -L21 -R46 -R91 -L37 -L92 -R92 -R76 -R88 -L64 -R56 -L82 -L674 -R63 -R87 -R50 -L65 -L8 -L47 -L587 -R11 -L4 -R80 -L80 -R391 -R888 -R23 -R19 -L370 -L760 -L491 -L873 -L72 -L89 -R34 -R23 -R70 -R943 -L36 -R42 -L27 -L62 -L78 -L26 -L11 -L538 -R534 -L34 -L282 -R30 -R33 -L77 -R96 -L853 -L80 -R8 -R37 -L40 -L30 -L142 -L701 -L58 -R53 -L94 -R73 -R127 -R42 -L42 -R329 -L516 -L76 -L154 -R930 -L97 -L16 -L63 -R28 -L365 -R796 -L96 -L81 -R92 -R8 -L1 -L86 -R254 -R51 -R63 -L71 -R54 -L54 -L16 -L107 -L406 -R80 -L71 -R579 -R24 -R188 -R69 -L69 -L92 -R92 -R328 -R72 -L70 -R35 -L43 -L282 -R425 -L7 -L69 -R99 -L36 -R82 -R65 -L488 -L80 -L1 -R63 -R7 -L51 -R651 -L25 -R402 -R23 -L18 -R77 -R41 -R15 -L7 -L632 -R94 -R12 -R18 -R89 -R58 -L595 -L70 -L15 -R86 -L2 -L61 -L190 -R358 -L45 -R75 -L88 -L24 -L76 -L89 -L85 -R72 -L98 -L82 -L89 -L29 -R62 -L42 -R84 -L184 -R1 -R87 -R92 -R261 -R87 -R52 -L44 -R28 -L97 -R80 -L967 -R98 -R18 -R88 -L69 -L87 -R918 -R1 -R33 -R50 -L13 -R21 -L55 -L3 -L390 -R90 -L70 -L95 -L35 -L64 -R64 -L86 -R16 -L73 -L57 -L12 -R12 -R693 -L16 -L82 -L99 -L18 -R779 -R22 -L453 -L14 -L12 -L43 -L257 -R30 -R52 -L82 -R2 -R74 -L92 -R592 -L76 -L80 -R80 -R40 -R60 -L56 -R24 -L86 -L607 -R25 -L56 -R56 -L84 -L52 -L40 -L24 -R51 -R49 -R58 -R94 -R84 -L474 -R57 -L19 -L55 -R921 -L366 -R88 -R5 -R7 -L419 -R23 -R78 -L82 -R81 -R15 -R78 -L74 -L29 -R29 -R35 -L72 -L63 -L378 -L95 -L27 -R69 -R78 -R29 -L58 -L41 -R23 -L265 -L276 -L59 -L41 -L859 -R16 -L97 -L84 -L64 -L78 -R71 -L41 -R55 -R52 -L41 -R90 -R15 -R12 -R22 -L28 -R17 -R75 -R8 -R61 -R47 -R28 -L36 -R89 -R5 -R6 -R79 -L879 -L91 -R62 -L68 -R49 -R45 -L92 -R15 -R58 -L31 -R53 -L45 -R3 -L789 -L9 -L70 -L978 -R5 -L9 -R75 -L77 -R9 -L76 -R87 -L55 -L29 -R358 -L287 -L47 -L27 -R61 -R36 -R478 -L53 -R62 -L54 -L69 -R61 -R53 -R79 -R42 -R46 -L81 -R73 -R27 -L2 -R2 -R69 -L77 -R7 -L73 -R81 -L807 -L8 -R61 -L64 -R11 -L43 -R99 -L56 -L97 -L95 -R92 -R45 -R55 -R84 -R47 -L597 -R66 -L86 -R786 -R12 -R35 -L47 -R59 -L559 -L66 -R19 -L87 -L91 -L275 -L86 -R99 -R902 -L515 -L44 -R314 -L71 -R80 -L231 -L46 -R675 -R23 -L67 -R167 -R123 -L49 -L268 -L410 -R605 -L75 -R43 -R43 -R68 -R20 -L596 -R96 -L53 -R92 -R65 -L4 -R12 -L97 -R85 -L49 -L4 -L947 -L83 -R386 -L83 -R53 -L94 -L151 -R40 -L71 -R47 -R56 -R89 -R11 -L54 -R88 -R66 -R816 -L816 -R7 -L903 -L44 -L60 -R16 -R84 -L23 -R23 -R78 -L574 -L4 -R31 -L62 -L69 -L64 -L97 -L32 -R93 -R22 -L22 -L9 -R870 -R56 -L102 -R85 -L23 -R75 -R221 -R2 -R75 -R146 -R6 -R3 -L5 -R13 -L94 -L51 -L68 -R34 -R46 -L80 -L43 -R43 -R88 -R96 -R74 -L9 -R2 -L218 -R467 -R44 -R36 -R620 -L16 -L50 -L34 -L209 -R9 -R40 -L40 -R817 -L64 -L53 -R659 -L429 -R22 -L33 -R98 -R4 -R36 -R66 -L723 -R83 -R781 -R494 -R91 -R51 -R61 -R86 -R11 -L968 -R3 -R707 -R39 -L39 -L69 -R11 -R85 -R41 -R75 -L89 -R55 -R36 -R83 -L28 -L45 -L55 -L66 -R66 -R12 -L72 -L66 -R13 -L787 -L586 -R1 -R85 -R53 -L996 -R237 -L194 -L90 -L53 -R37 -L438 -R33 -R911 -L94 -R173 -L39 -R84 -L24 -L16 -L84 -L534 -R4 -L70 -L81 -L37 -L30 -R355 -R93 -L21 -R75 -L97 -L27 -L30 -L58 -L96 -R54 -R41 -L734 -R42 -L49 -L53 -L72 -L43 -L32 -R97 -L497 -R21 -R6 -L857 -R569 -L684 -L64 -L896 -L95 -R33 -L77 -R44 -R84 -R38 -R78 -R67 -R33 -R81 -R19 -L364 -R81 -R39 -L56 -L88 -L936 -R734 -L43 -L67 -L675 -L25 -L68 -R53 -L4 -R41 -L22 -L15 -L46 -L15 -R19 -L43 -R56 -R19 -L28 -R553 -L68 -L819 -L50 -L663 -L82 -L58 -R40 -R53 -L24 -L29 -R53 -L53 -L542 -R42 -L76 -R76 -L833 -L82 -L85 -L49 -L851 -L64 -L69 -L67 -R21 -R68 -R21 -R713 -L23 -L56 -L44 -R233 -L54 -L79 -L55 -R83 -R65 -L84 -L37 -L396 -R324 -R77 -L77 -L855 -R9 -L44 -R90 -R73 -L254 -R81 -R80 -L63 -L264 -R71 -R63 -R13 -L86 -R34 -R52 -R20 -R90 -L462 -R561 -L609 -R12 -L57 -L55 -R92 -L61 -R69 -R6 -L6 -L18 -L82 -R23 -R73 -R78 -L74 -R99 -L30 -R88 -L38 -L19 -R1 -R82 -R54 -L737 -R26 -R74 -R92 -R21 -R87 -R5 -L11 -R31 -R875 -L72 -L28 -L11 -L50 -R61 -L166 -R306 -L165 -L69 -L59 -L257 -L182 -L81 -R73 -L54 -R8 -L1 -R21 -L23 -L22 -R71 -R14 -L14 -R9 -L95 -R86 -R65 -R92 -R49 -L48 -L158 -L37 -L63 -L78 -R18 -L940 -L36 -R8 -L72 -L742 -L5 -R990 -R251 -R42 -L30 -L31 -R25 -L32 -L468 -R97 -L23 -L265 -L778 -L52 -L29 -R50 -R8 -R92 -L793 -L4 -L3 -L63 -L30 -L34 -L73 -L58 -L642 -R83 -L62 -R59 -R15 -R5 -R67 -L67 -R55 -R45 -L99 -R46 -L747 -R620 -L20 -L94 -L9 -L797 -R105 -R64 -L69 -R354 -R63 -R84 -R11 -R85 -R99 -L42 -L54 -L47 -L578 -L475 -R21 -L35 -R96 -R85 -L69 -L48 -L40 -R90 -R40 -R254 -R531 -L446 -R960 -R90 -R67 -R839 -R65 -R25 -L68 -L557 -R34 -R936 -L68 -R81 -R96 -L79 -L20 -L80 -R511 -R89 -L84 -R83 -L95 -L10 -R93 -R713 -L9 -R74 -L81 -R716 -L35 -L965 -L66 -R66 -R786 -R14 -R76 -L51 -L25 -R85 -R79 -L64 -R88 -L788 -L78 -R1 -L74 -L549 -L643 -R43 -R42 -L42 -L34 -R34 -L147 -L53 -R3 -R934 -L97 -L740 -L33 -R33 -R30 -L430 -R189 -R3 -R29 -R79 -L609 -L11 -R730 -R290 -L4 -L72 -L28 -R53 -R51 -L64 -L88 -R80 -R72 -L50 -L65 -R81 -L8 -R344 -L2 -R92 -R8 -L562 -R62 -R724 -L65 -R31 -R66 -R58 -L23 -R69 -L147 -L513 -L30 -R39 -R51 -R40 -L997 -R64 -R65 -R68 -R42 -R89 -R32 -R85 -R52 -R90 -L86 -L26 -R356 -L7 -L266 -R17 -L47 -L54 -L26 -R83 -L34 -L95 -R2 -L42 -R75 -R462 -L302 -R67 -R33 -R33 -R8 -R603 -L44 -R51 -R1 -R14 -L966 -L50 -L39 -L11 -R361 -R99 -L288 -L35 -R63 -L30 -L20 -L846 -R747 -L14 -R153 -L64 -R59 -R115 -R46 -R38 -L30 -L88 -R102 -L520 -L48 -R3 -R497 -R93 -L510 -R70 -L52 -R86 -R13 -R43 -R39 -R73 -L623 -R40 -R19 -R11 -L96 -R794 -R188 -L46 -L64 -L87 -R253 -R26 -L70 -R66 -L98 -R24 -L92 -R45 -L73 -L15 -L75 -R44 -L726 -L78 -R1 -R215 -R162 -R71 -L10 -R39 -L65 -L2 -L77 -R90 -L46 -L88 -L9 -R481 -R41 -L25 -R41 -L40 -R99 -L98 -L12 -L66 -R22 -L58 -L88 -R13 -L28 -L103 -R245 -R96 -R65 -R1 -R18 -R85 -L19 -R27 -L34 -L940 -L877 -R51 -L67 -L597 -R58 -L99 -L92 -L601 -R569 -L71 -R767 -L12 -R554 -R27 -R81 -R83 -R59 -L26 -L93 -L52 -R33 -L21 -L662 -L93 -L45 -L77 -R970 -L30 -L63 -R843 -R68 -L11 -R246 -L25 -L90 -L31 -L8 -L718 -R26 -L860 -L22 -R93 -R50 -R39 -L392 -R14 -L87 -R1 -R50 -L86 -L48 -L52 -R77 -R23 -R58 -R42 -R745 -L20 -L25 -R55 -R19 -L12 -R8 -L18 -R28 -L80 -L78 -L81 -R59 -R65 -L82 -L83 -L32 -L31 -L29 -R86 -L94 -R6 -L4 -L80 -R78 -R38 -L96 -R658 -R92 -R308 -R97 -R203 -R30 -R170 -R194 -R60 -L134 -L86 -L21 -R87 -R17 -L57 -L40 -R21 -L24 -R83 -R718 -L52 -R275 -L694 -L86 -R51 -R88 -L9 -R9 -L80 -L20 -R682 -R18 -R236 -L94 -L42 -R82 -R18 -L41 -R41 -L51 -L24 -L25 -R67 -L190 -L31 -R79 -L32 -L93 -R16 -R19 -L135 -L60 -L240 -L102 -R828 -R566 -L36 -L656 -R11 -L62 -R94 -R64 -L21 -R44 -R67 -L97 -L658 -L11 -L162 -L69 -L557 -L30 -L57 -R483 -R605 -L44 -R22 -L622 -L686 -L14 -R97 -L60 -L53 -L52 -R974 -L78 -L680 -L48 -L31 -R731 -L12 -L50 -R62 -R55 -L31 -L99 -L732 -L37 -R616 -R17 -R28 -R53 -L56 -R7 -L13 -R53 -L61 -L29 -L47 -R76 -R55 -L39 -R90 -R81 -L4 -L452 -R18 -L49 -L996 -R94 -R216 -L924 -L90 -L65 -L191 -L7 -L90 -L47 -R23 -R77 -L204 -R69 -L65 -L89 -L54 -R1 -R42 -L66 -R79 -R87 -R705 -R765 -L70 -R62 -L32 -L80 -R91 -R44 -L18 -L176 -R72 -L7 -L48 -R47 -L74 -L34 -R92 -R61 -R96 -L79 -R43 -L73 -R31 -L59 -L28 -R88 -L55 -R51 -R15 -R31 -L5 -L19 -R34 -R29 -L92 -R82 -L90 -L19 -L71 -R12 -L45 -L77 -L65 -R65 -R37 -R33 -L81 -R46 -R38 -L92 -R34 -L26 -L89 -L24 -R22 -R62 -R3 -R94 -R88 -L14 -L14 -R40 -R27 -L35 -L47 -L24 -R3 -L32 -R33 -R4 -L33 -R49 -L47 -R31 -R43 -R11 -L12 -L18 -R15 -L18 -L22 -L43 -L7 -L8 -R6 -L14 -L46 -R49 -R5 -R32 -R38 -L45 -R22 -L1 -R11 -L22 -R49 -R28 -R41 -R12 -R25 -R3 -R22 -R25 -L26 -R45 -R22 -L43 -R9 -R48 -R1 -""" +var realInput: String? = nil