diff --git a/.clang-format b/.clang-format deleted file mode 100644 index cf644c2..0000000 --- a/.clang-format +++ /dev/null @@ -1,297 +0,0 @@ ---- -Language: Cpp -AccessModifierOffset: -2 -AlignAfterOpenBracket: Align -AlignArrayOfStructures: None -AlignConsecutiveAssignments: - Enabled: false - AcrossEmptyLines: false - AcrossComments: false - AlignCompound: false - AlignFunctionDeclarations: false - AlignFunctionPointers: false - PadOperators: true -AlignConsecutiveBitFields: - Enabled: false - AcrossEmptyLines: false - AcrossComments: false - AlignCompound: false - AlignFunctionDeclarations: false - AlignFunctionPointers: false - PadOperators: false -AlignConsecutiveDeclarations: - Enabled: false - AcrossEmptyLines: false - AcrossComments: false - AlignCompound: false - AlignFunctionDeclarations: true - AlignFunctionPointers: false - PadOperators: false -AlignConsecutiveMacros: - Enabled: false - AcrossEmptyLines: false - AcrossComments: false - AlignCompound: false - AlignFunctionDeclarations: false - AlignFunctionPointers: false - PadOperators: false -AlignConsecutiveShortCaseStatements: - Enabled: false - AcrossEmptyLines: false - AcrossComments: false - AlignCaseArrows: false - AlignCaseColons: false -AlignConsecutiveTableGenBreakingDAGArgColons: - Enabled: false - AcrossEmptyLines: false - AcrossComments: false - AlignCompound: false - AlignFunctionDeclarations: false - AlignFunctionPointers: false - PadOperators: false -AlignConsecutiveTableGenCondOperatorColons: - Enabled: false - AcrossEmptyLines: false - AcrossComments: false - AlignCompound: false - AlignFunctionDeclarations: false - AlignFunctionPointers: false - PadOperators: false -AlignConsecutiveTableGenDefinitionColons: - Enabled: false - AcrossEmptyLines: false - AcrossComments: false - AlignCompound: false - AlignFunctionDeclarations: false - AlignFunctionPointers: false - PadOperators: false -AlignEscapedNewlines: Right -AlignOperands: Align -AlignTrailingComments: - Kind: Always - OverEmptyLines: 0 -AllowAllArgumentsOnNextLine: true -AllowAllParametersOfDeclarationOnNextLine: true -AllowBreakBeforeNoexceptSpecifier: Never -AllowShortBlocksOnASingleLine: Never -AllowShortCaseExpressionOnASingleLine: true -AllowShortCaseLabelsOnASingleLine: false -AllowShortCompoundRequirementOnASingleLine: true -AllowShortEnumsOnASingleLine: true -AllowShortFunctionsOnASingleLine: All -AllowShortIfStatementsOnASingleLine: Never -AllowShortLambdasOnASingleLine: All -AllowShortLoopsOnASingleLine: false -AllowShortNamespacesOnASingleLine: false -AlwaysBreakAfterDefinitionReturnType: None -AlwaysBreakBeforeMultilineStrings: false -AttributeMacros: - - __capability -BinPackArguments: true -BinPackLongBracedList: true -BinPackParameters: BinPack -BitFieldColonSpacing: Both -BracedInitializerIndentWidth: -1 -BraceWrapping: - AfterCaseLabel: false - AfterClass: false - AfterControlStatement: Never - AfterEnum: false - AfterExternBlock: false - AfterFunction: false - AfterNamespace: false - AfterObjCDeclaration: false - AfterStruct: false - AfterUnion: false - BeforeCatch: false - BeforeElse: false - BeforeLambdaBody: false - BeforeWhile: false - IndentBraces: false - SplitEmptyFunction: true - SplitEmptyRecord: true - SplitEmptyNamespace: true -BreakAdjacentStringLiterals: true -BreakAfterAttributes: Leave -BreakAfterJavaFieldAnnotations: false -BreakAfterReturnType: None -BreakArrays: true -BreakBeforeBinaryOperators: None -BreakBeforeConceptDeclarations: Always -BreakBeforeBraces: Attach -BreakBeforeInlineASMColon: OnlyMultiline -BreakBeforeTemplateCloser: false -BreakBeforeTernaryOperators: true -BreakBinaryOperations: Never -BreakConstructorInitializers: BeforeColon -BreakFunctionDefinitionParameters: false -BreakInheritanceList: BeforeColon -BreakStringLiterals: true -BreakTemplateDeclarations: MultiLine -ColumnLimit: 120 -CommentPragmas: '^ IWYU pragma:' -CompactNamespaces: false -ConstructorInitializerIndentWidth: 4 -ContinuationIndentWidth: 4 -Cpp11BracedListStyle: true -DerivePointerAlignment: false -DisableFormat: false -EmptyLineAfterAccessModifier: Never -EmptyLineBeforeAccessModifier: LogicalBlock -EnumTrailingComma: Leave -ExperimentalAutoDetectBinPacking: false -FixNamespaceComments: true -ForEachMacros: - - foreach - - Q_FOREACH - - BOOST_FOREACH -IfMacros: - - KJ_IF_MAYBE -IncludeBlocks: Preserve -IncludeCategories: - - Regex: '^"(llvm|llvm-c|clang|clang-c)/' - Priority: 2 - SortPriority: 0 - CaseSensitive: false - - Regex: '^(<|"(gtest|gmock|isl|json)/)' - Priority: 3 - SortPriority: 0 - CaseSensitive: false - - Regex: '.*' - Priority: 1 - SortPriority: 0 - CaseSensitive: false -IncludeIsMainRegex: '(Test)?$' -IncludeIsMainSourceRegex: '' -IndentAccessModifiers: false -IndentCaseBlocks: false -IndentCaseLabels: false -IndentExportBlock: true -IndentExternBlock: AfterExternBlock -IndentGotoLabels: true -IndentPPDirectives: None -IndentRequiresClause: true -IndentWidth: 4 -IndentWrappedFunctionNames: false -InsertBraces: false -InsertNewlineAtEOF: false -InsertTrailingCommas: None -IntegerLiteralSeparator: - Binary: 0 - BinaryMinDigits: 0 - Decimal: 0 - DecimalMinDigits: 0 - Hex: 0 - HexMinDigits: 0 -JavaScriptQuotes: Leave -JavaScriptWrapImports: true -KeepEmptyLines: - AtEndOfFile: false - AtStartOfBlock: true - AtStartOfFile: true -KeepFormFeed: false -LambdaBodyIndentation: Signature -LineEnding: DeriveLF -MacroBlockBegin: '' -MacroBlockEnd: '' -MainIncludeChar: Quote -MaxEmptyLinesToKeep: 1 -NamespaceIndentation: None -ObjCBinPackProtocolList: Auto -ObjCBlockIndentWidth: 2 -ObjCBreakBeforeNestedBlockParam: true -ObjCSpaceAfterProperty: false -ObjCSpaceBeforeProtocolList: true -OneLineFormatOffRegex: '' -PackConstructorInitializers: BinPack -PenaltyBreakAssignment: 2 -PenaltyBreakBeforeFirstCallParameter: 19 -PenaltyBreakBeforeMemberAccess: 150 -PenaltyBreakComment: 300 -PenaltyBreakFirstLessLess: 120 -PenaltyBreakOpenParenthesis: 0 -PenaltyBreakScopeResolution: 500 -PenaltyBreakString: 1000 -PenaltyBreakTemplateDeclaration: 10 -PenaltyExcessCharacter: 1000000 -PenaltyIndentedWhitespace: 0 -PenaltyReturnTypeOnItsOwnLine: 60 -PointerAlignment: Right -PPIndentWidth: -1 -QualifierAlignment: Leave -ReferenceAlignment: Pointer -ReflowComments: Always -RemoveBracesLLVM: false -RemoveEmptyLinesInUnwrappedLines: false -RemoveParentheses: Leave -RemoveSemicolon: false -RequiresClausePosition: OwnLine -RequiresExpressionIndentation: OuterScope -SeparateDefinitionBlocks: Leave -ShortNamespaceLines: 1 -SkipMacroDefinitionBody: false -SortIncludes: - Enabled: true - IgnoreCase: false -SortJavaStaticImport: Before -SortUsingDeclarations: LexicographicNumeric -SpaceAfterCStyleCast: false -SpaceAfterLogicalNot: false -SpaceAfterOperatorKeyword: false -SpaceAfterTemplateKeyword: true -SpaceAroundPointerQualifiers: Default -SpaceBeforeAssignmentOperators: true -SpaceBeforeCaseColon: false -SpaceBeforeCpp11BracedList: false -SpaceBeforeCtorInitializerColon: true -SpaceBeforeInheritanceColon: true -SpaceBeforeJsonColon: false -SpaceBeforeParens: ControlStatements -SpaceBeforeParensOptions: - AfterControlStatements: true - AfterForeachMacros: true - AfterFunctionDefinitionName: false - AfterFunctionDeclarationName: false - AfterIfMacros: true - AfterNot: false - AfterOverloadedOperator: false - AfterPlacementOperator: true - AfterRequiresInClause: false - AfterRequiresInExpression: false - BeforeNonEmptyParentheses: false -SpaceBeforeRangeBasedForLoopColon: true -SpaceBeforeSquareBrackets: false -SpaceInEmptyBlock: false -SpacesBeforeTrailingComments: 1 -SpacesInAngles: Never -SpacesInContainerLiterals: true -SpacesInLineCommentPrefix: - Minimum: 1 - Maximum: -1 -SpacesInParens: Never -SpacesInParensOptions: - ExceptDoubleParentheses: false - InCStyleCasts: false - InConditionalStatements: false - InEmptyParentheses: false - Other: false -SpacesInSquareBrackets: false -Standard: Latest -StatementAttributeLikeMacros: - - Q_EMIT -StatementMacros: - - Q_UNUSED - - QT_REQUIRE_VERSION -TableGenBreakInsideDAGArg: DontBreak -TabWidth: 8 -UseTab: Never -VerilogBreakBetweenInstancePorts: true -WhitespaceSensitiveMacros: - - BOOST_PP_STRINGIZE - - CF_SWIFT_NAME - - NS_SWIFT_NAME - - PP_STRINGIZE - - STRINGIZE -WrapNamespaceBodyWithEmptyLines: Leave -... - diff --git a/.clang-tidy b/.clang-tidy deleted file mode 100644 index 96d691c..0000000 --- a/.clang-tidy +++ /dev/null @@ -1,18 +0,0 @@ -# We explicitly enable checks with '*' and disable noisy ones with '-' -Checks: > - -*, - bugprone-*, - modernize-*, - performance-*, - readability-*, - cppcoreguidelines-*, - misc-*, - # Disable these specifically if they are too annoying - -modernize-use-trailing-return-type, - -llvmlibc-* - -# Treat warnings as errors (optional, good for strict discipline) -WarningsAsErrors: '' - -# This ensures clang-tidy sees the same headers as your compiler -# It will read the compile_commands.json automatically \ No newline at end of file diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile deleted file mode 100644 index 6590d35..0000000 --- a/.devcontainer/Dockerfile +++ /dev/null @@ -1,25 +0,0 @@ -FROM xianpengshen/clang-tools:21 - -# Install development tools (cmake, ninja, build essentials) -USER root -RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - cmake \ - ninja-build \ - build-essential \ - libc++-dev \ - libc++abi-dev \ - git \ - python3 \ - python3-pip \ - ca-certificates \ - && rm -rf /var/lib/apt/lists/* - -# Create workspace folder (VS Code devcontainer convention) -ARG WORKSPACE_FOLDER=/workspaces/aoc25 -RUN mkdir -p ${WORKSPACE_FOLDER} && chown -R root:root ${WORKSPACE_FOLDER} -WORKDIR ${WORKSPACE_FOLDER} - -ENV SHELL=/bin/bash - -CMD ["bash"] diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index 9f3dd8d..0000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "aoc25-clang21", - "build": { - "dockerfile": "Dockerfile" - }, - "workspaceFolder": "/workspaces/aoc25", - "workspaceMount": "source=${localWorkspaceFolder},target=/workspaces/aoc25,type=bind,consistency=cached", - "settings": { - "C_Cpp.default.compilerPath": "/usr/bin/clang++-21", - "C_Cpp.default.intelliSenseMode": "linux-clang-x64", - "clang-format.executable": "/usr/bin/clang-format-21" - }, - "extensions": [ - "ms-vscode.cpptools", - "ms-vscode.cmake-tools", - "llvm-vs-code-extensions.vscode-clangd", - "xaver.clang-format" - ], - "postCreateCommand": "cmake -S . -B build || true" -} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 3b61161..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "name": "Debug", - "type": "lldb", - "request": "launch", - "program": "${command:cmake.launchTargetPath}", - "args": [], - // CHANGE THIS LINE: - // Point the working directory to the folder containing the executable - "cwd": "${command:cmake.launchTargetDirectory}", - "preLaunchTask": "CMake: build" - } - ] -} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 5ff1ece..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "C_Cpp.intelliSenseEngine": "disabled", - "editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd", - "editor.formatOnSave": true, - "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools", - "cmake.configureOnOpen": false, - "cmake.generator": "Ninja", - "clangd.arguments": [ - "--background-index", - "--compile-commands-dir=${workspaceFolder}/build", - "--header-insertion=iwyu", - "--clang-tidy", - "--completion-style=detailed" - ] -} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json deleted file mode 100644 index a74761c..0000000 --- a/.vscode/tasks.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "CMake: build", - "type": "shell", - "command": "/usr/bin/cmake", - "args": [ - "--build", - "${workspaceFolder}/build", - "--config", - "Debug", - "--target", - "${command:cmake.buildTargetName}" - ], - "group": { - "kind": "build", - "isDefault": true - }, - "problemMatcher": "$gcc", - "detail": "Builds the target currently selected in the CMake status bar" - } - ] -} \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index ec35a8f..ea14dde 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,41 +1,6 @@ cmake_minimum_required(VERSION 3.10.0) - -# Set compilers before project() to ensure they're used -set(CMAKE_C_COMPILER /usr/bin/clang-21) -set(CMAKE_CXX_COMPILER /usr/bin/clang++-21) - project(aoc25 VERSION 0.1.0 LANGUAGES C CXX) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -# Helper to add AoC day targets and auto-copy any input files -function(aoc_add_day name src_dir) - # remaining args are source files - set(sources ${ARGN}) - - add_executable(${name} ${sources}) - set_target_properties(${name} PROPERTIES CXX_STANDARD 23 CXX_STANDARD_REQUIRED ON) - - target_compile_options(${name} PRIVATE -stdlib=libc++) - target_link_options(${name} PRIVATE -stdlib=libc++) - - # Gather common input files in the source directory - file(GLOB INPUT_FILES - "${src_dir}/*_input" - "${src_dir}/puzzle_input" - "${src_dir}/test_input" - ) - - foreach(f IN LISTS INPUT_FILES) - get_filename_component(fname ${f} NAME) - add_custom_command(TARGET ${name} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${f} $/${fname} - COMMENT "Copying ${fname} to build directory for ${name}" - ) - endforeach() -endfunction() # Per-day subprojects (example: day1) add_subdirectory(day1) -add_subdirectory(day2) -add_subdirectory(day3) -add_subdirectory(day4) diff --git a/day1/CMakeLists.txt b/day1/CMakeLists.txt index 623d629..acb5852 100644 --- a/day1/CMakeLists.txt +++ b/day1/CMakeLists.txt @@ -1,2 +1,2 @@ - # Use top-level helper to add the target and copy input files - aoc_add_day(day1 "${CMAKE_CURRENT_SOURCE_DIR}" main.cpp) +add_executable(day1 main.cpp) +set_target_properties(day1 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON) diff --git a/day1/day1_input b/day1/day1_input index 0af6e27..e69de29 100644 --- a/day1/day1_input +++ b/day1/day1_input @@ -1,4446 +0,0 @@ -R41 -R17 -L15 -L2 -L41 -L47 -L42 -R8 -R29 -L32 -L14 -R26 -R28 -L35 -R2 -L4 -L27 -R37 -L14 -R2 -R50 -R12 -L13 -L3 -L29 -L37 -L6 -R43 -R13 -L26 -L24 -R23 -R29 -R18 -R8 -R20 -R50 -L23 -L24 -R25 -R31 -R6 -L19 -L25 -R6 -L43 -R21 -L15 -R3 -L38 -R94 -L11 -R27 -R38 -R19 -L73 -L94 -L9 -R74 -R73 -L23 -R93 -R92 -R40 -R17 -L57 -L33 -R53 -L98 -L25 -L71 -L26 -R89 -L30 -R66 -L88 -L37 -L42 -L58 -L53 -L40 -L7 -R96 -L56 -R60 -L59 -L14 -L11 -L49 -L24 -R38 -R19 -L62 -L38 -L93 -L7 -R30 -R31 -L3 -L13 -R9 -L563 -R75 -R34 -L4 -L34 -L162 -L3 -R146 -L97 -R94 -L49 -L99 -L992 -R93 -R4 -L6 -L91 -L27 -R86 -R50 -R66 -R57 -L59 -R27 -L38 -R15 -R23 -L65 -L77 -L996 -R98 -L6 -R27 -L929 -R103 -L78 -L77 -R80 -R972 -L94 -L36 -R7 -R28 -R43 -L72 -R72 -L621 -L323 -L56 -R87 -R23 -L110 -L93 -L731 -R42 -L18 -L9 -R9 -L72 -R9 -R14 -R69 -R34 -L454 -L41 -L82 -R7 -L66 -R5 -L672 -R31 -L13 -R531 -R89 -R31 -L25 -L73 -L922 -L47 -L316 -R13 -R84 -L34 -R647 -R92 -L8 -R69 -R135 -R60 -R5 -L464 -L99 -R63 -L19 -R907 -L78 -R90 -R38 -R62 -R66 -L466 -R462 -L762 -L287 -R678 -L91 -R72 -R81 -L356 -L859 -R63 -L28 -L69 -L4 -L877 -L23 -L1 -L2 -L897 -L54 -L49 -R15 -R89 -R10 -L21 -R11 -L46 -L832 -R57 -L43 -L70 -L859 -L8 -R19 -R81 -L32 -R1 -L83 -R33 -L19 -R19 -L19 -R10 -L27 -L83 -L57 -L57 -R14 -R31 -L97 -R66 -R147 -L747 -L52 -R392 -L65 -R97 -L99 -R20 -R13 -L80 -L43 -L90 -L190 -R797 -L89 -R992 -R997 -L89 -L37 -R77 -R49 -R86 -R214 -L13 -L689 -R17 -R59 -L48 -L24 -R98 -L74 -R15 -L766 -L670 -L5 -R645 -L445 -L76 -R76 -R53 -L60 -L93 -R71 -R668 -L39 -R450 -R288 -R76 -L14 -R9 -L9 -R43 -L66 -R67 -R572 -L63 -R658 -R89 -L18 -R747 -L211 -R13 -R41 -L44 -L16 -R188 -L576 -R76 -L464 -R364 -L154 -L38 -R65 -R2 -L70 -L705 -L56 -R256 -L56 -L44 -L5 -L95 -L897 -L16 -L19 -L647 -R4 -L78 -L80 -R58 -L75 -L50 -R16 -R614 -R70 -L48 -R48 -L47 -R74 -L38 -L89 -R548 -R52 -R23 -L22 -L20 -R274 -R525 -L82 -L76 -L90 -R68 -L649 -L61 -R12 -L97 -R95 -L10 -R510 -R274 -R26 -L34 -L66 -R18 -L25 -L54 -R29 -R32 -R59 -R578 -L937 -R91 -L252 -R84 -R77 -R27 -R77 -L26 -R3 -L81 -R91 -L40 -L23 -L81 -R753 -L78 -L338 -R9 -R1 -R873 -R10 -R85 -R80 -R358 -R45 -R430 -L3 -L60 -R621 -R67 -R69 -R56 -R97 -L51 -R183 -L580 -R69 -L79 -R68 -R811 -R57 -R7 -L14 -L29 -R36 -L391 -L109 -L2 -R2 -L95 -R18 -L23 -L79 -R79 -L71 -R696 -L34 -R73 -R528 -L782 -R271 -R29 -L310 -L17 -L383 -R59 -R75 -R84 -R162 -R520 -R92 -R266 -R363 -R247 -L32 -L50 -L86 -L27 -L73 -L7 -R880 -R331 -R96 -L35 -L65 -R42 -R34 -L176 -L372 -L54 -R26 -L64 -R64 -R412 -R83 -L95 -R22 -R78 -R60 -R54 -L14 -R85 -L985 -L57 -R72 -L15 -L2 -R51 -L24 -R38 -L3 -R93 -L53 -R73 -R16 -R44 -L33 -L46 -L305 -R51 -L77 -L18 -L795 -R361 -L64 -R353 -L88 -L598 -R6 -L50 -L24 -R94 -R87 -L916 -L45 -L26 -L630 -L18 -L52 -L75 -R7 -L32 -R25 -R75 -L75 -R35 -L60 -L70 -R70 -R34 -R36 -L87 -R94 -R23 -L67 -R667 -R16 -R84 -L8 -R96 -L26 -R84 -R54 -L61 -L15 -L48 -R63 -L49 -L10 -R37 -R183 -R951 -L51 -L342 -R208 -R695 -L61 -R80 -R20 -L80 -L570 -L350 -R40 -L922 -R703 -L61 -R40 -R760 -R703 -R40 -L3 -L842 -R976 -L53 -R98 -R49 -L75 -R64 -L17 -R89 -R65 -L54 -R2 -R98 -R896 -L96 -R49 -R651 -L15 -R15 -R64 -R14 -L78 -R86 -R3 -R39 -R172 -L69 -R70 -L601 -R18 -L307 -L11 -L59 -L41 -L92 -L8 -R78 -R107 -L85 -L90 -L10 -L6 -L994 -R27 -R30 -R43 -L139 -L7 -R46 -L2 -R2 -L719 -R58 -L39 -L948 -L52 -R29 -L91 -L46 -L92 -R42 -L58 -L84 -L31 -L29 -L65 -R41 -L110 -L81 -L64 -L50 -L74 -L98 -R61 -R73 -L73 -L3 -L621 -L876 -R25 -L49 -R8 -R16 -L58 -L91 -L988 -R37 -L82 -R82 -L55 -R558 -L22 -L90 -L91 -R94 -R6 -L92 -L8 -L99 -L1 -R97 -R105 -R741 -L70 -R94 -L85 -R577 -R11 -R730 -L291 -L9 -R48 -R1 -L630 -L10 -R85 -R218 -L12 -L347 -L53 -R664 -L57 -L65 -L42 -L90 -L93 -L859 -R48 -R394 -R60 -L49 -R63 -L55 -R20 -L5 -R17 -R19 -R30 -L75 -L21 -L50 -L40 -R86 -R15 -R22 -R983 -R12 -L32 -R4 -L4 -L48 -L16 -L83 -L25 -L49 -L86 -L93 -L34 -L40 -R185 -L11 -R54 -L29 -L826 -L75 -R1 -L47 -R122 -L64 -L36 -L22 -R59 -L80 -L257 -L80 -R1 -L621 -R25 -L84 -R2 -R57 -R61 -R39 -R474 -R26 -R291 -L50 -R15 -R39 -R2 -L56 -L41 -R695 -L160 -R95 -R46 -L76 -L95 -R95 -R9 -R361 -R3 -R722 -R86 -L81 -L73 -L87 -L553 -R66 -L71 -R934 -L60 -R37 -L59 -R75 -R54 -L692 -R45 -R84 -R23 -L12 -R66 -R23 -R925 -L66 -R46 -R7 -R88 -R32 -L97 -L19 -R35 -R45 -L96 -R53 -L454 -L98 -L101 -L85 -R85 -L20 -L646 -L94 -R370 -L10 -L90 -L45 -R940 -R95 -R15 -R561 -R80 -R44 -L25 -R89 -L64 -L20 -L893 -L87 -R65 -L32 -R42 -R25 -L328 -L76 -L79 -L17 -R327 -L27 -L27 -L551 -R12 -R881 -L71 -L96 -R89 -R63 -L57 -L94 -R93 -L42 -L54 -L31 -R483 -R102 -R89 -R59 -R24 -L60 -L12 -R62 -R38 -L21 -R21 -R74 -R20 -R6 -R20 -R72 -L37 -L55 -L63 -L37 -R96 -R63 -L59 -L14 -R82 -L468 -L51 -R25 -R26 -R44 -R57 -L72 -R923 -R80 -R99 -L66 -L265 -L94 -L73 -R466 -L99 -L27 -R27 -R30 -L67 -R33 -R31 -R88 -R255 -L70 -R627 -R383 -R724 -R99 -L911 -R53 -R81 -R19 -R94 -L983 -L56 -R70 -L87 -L85 -R31 -L23 -R464 -L63 -L63 -R26 -L65 -L37 -L98 -L234 -L66 -L378 -R122 -L64 -R20 -L31 -R822 -R9 -L68 -R68 -R74 -L42 -R928 -R979 -R61 -R678 -L78 -R75 -L475 -L85 -R7 -L31 -L91 -L62 -L85 -R71 -L84 -L35 -L34 -R40 -L11 -R88 -R87 -R42 -R57 -L58 -L716 -R34 -R60 -R206 -L38 -R72 -L39 -L20 -L95 -L234 -R476 -R57 -R221 -R44 -L44 -R522 -R49 -L71 -R13 -L495 -R20 -L83 -R45 -R81 -L56 -L25 -R14 -R976 -R340 -R82 -L12 -L34 -L77 -R460 -L38 -R86 -L97 -L60 -L530 -R80 -R49 -L39 -R74 -R847 -L7 -L57 -R52 -R86 -R8 -L3 -R37 -L37 -L58 -L42 -L947 -R47 -L5 -R805 -R47 -R53 -L81 -R4 -L93 -R91 -R70 -L91 -L15 -L485 -R15 -L15 -L42 -R4 -L50 -R473 -L66 -R99 -L96 -R4 -L26 -R58 -R3 -L78 -R38 -L8 -R61 -R21 -L48 -L47 -R34 -R20 -R81 -L32 -L3 -L40 -R93 -R79 -L70 -R15 -L72 -L99 -L71 -R25 -R40 -L19 -L78 -L3 -R79 -R19 -R11 -R691 -R619 -R81 -L95 -L55 -R41 -R9 -R636 -L75 -L7 -L94 -R740 -R64 -R36 -R32 -R68 -R332 -R68 -R14 -R81 -L12 -R11 -R6 -L38 -R70 -L397 -R68 -L47 -L87 -R31 -L75 -R49 -R87 -L13 -L92 -R46 -L602 -R58 -L58 -R692 -L456 -R98 -L92 -R58 -R65 -L565 -R49 -L73 -L763 -R660 -R96 -L17 -R16 -R74 -L542 -L19 -L20 -L48 -L13 -L28 -R28 -L18 -R52 -R66 -R61 -L94 -R33 -R55 -L55 -L45 -R70 -L51 -R26 -R383 -R17 -L96 -R28 -R98 -L20 -R875 -L77 -L208 -R27 -L128 -L199 -L38 -R43 -L38 -L69 -R28 -L24 -L17 -R99 -L84 -R42 -L95 -L56 -L148 -L66 -R4 -R16 -L95 -L261 -R18 -R53 -L12 -L628 -L72 -L81 -R59 -L36 -R46 -L23 -L65 -R12 -R2 -L79 -R65 -R89 -R34 -R8 -L31 -L12 -L5 -R77 -L37 -L46 -L426 -R49 -L41 -L37 -L36 -L86 -L667 -L82 -R88 -R764 -L3 -R333 -L7 -L40 -L86 -R679 -R796 -L29 -L46 -R737 -L37 -R53 -L89 -L64 -R63 -L63 -L38 -R838 -L58 -L42 -L55 -R55 -L64 -R99 -R72 -L392 -L75 -R560 -R88 -L64 -R76 -R77 -L82 -L61 -L94 -R82 -L76 -L96 -L273 -L29 -R18 -L66 -R74 -L877 -R73 -R52 -L22 -R21 -L80 -L59 -L23 -L430 -L429 -L73 -R73 -L1 -L995 -L638 -R419 -L71 -R75 -R10 -R601 -R63 -L63 -R98 -L32 -L21 -R55 -R37 -L535 -R98 -L75 -R722 -R89 -L36 -R90 -R7 -L35 -L62 -R34 -R62 -L32 -L18 -L46 -R880 -L84 -R4 -L81 -R44 -R86 -L49 -L131 -L69 -R587 -L87 -L65 -R18 -R64 -R98 -R884 -R50 -R14 -R8 -R29 -L71 -R54 -L21 -L362 -R49 -L57 -L79 -R74 -R13 -R280 -L597 -R17 -R67 -R37 -R96 -L35 -L83 -L82 -L28 -R28 -L48 -R48 -L91 -R70 -R68 -L47 -L54 -L21 -L25 -L137 -L49 -R20 -R66 -L95 -L5 -R86 -R89 -R61 -R910 -L46 -R90 -L60 -L84 -L16 -L28 -L362 -L940 -L75 -R93 -L820 -L99 -L9 -L93 -R45 -R34 -R324 -R94 -L194 -L77 -R77 -R34 -L34 -R89 -R267 -L45 -L15 -L89 -R79 -R52 -R74 -R88 -R18 -L57 -R89 -L50 -R89 -R58 -L85 -L45 -R71 -R12 -R344 -R51 -R17 -L14 -R25 -R62 -R12 -R703 -R38 -R362 -L90 -L10 -L656 -L735 -R57 -R94 -L60 -L90 -L49 -L33 -R92 -L77 -L43 -R91 -L51 -R62 -L2 -L34 -L25 -R28 -R31 -R8 -R44 -R86 -L224 -L78 -R64 -R89 -L89 -L55 -R99 -L28 -L20 -L33 -L63 -L60 -L562 -L21 -L557 -L87 -L84 -R9 -R81 -L696 -R91 -R95 -R91 -L26 -L74 -R15 -L15 -L60 -L40 -R8 -R92 -L89 -L76 -L67 -L468 -L360 -R65 -L5 -R80 -L80 -L33 -R98 -R31 -R104 -L32 -R152 -L17 -L3 -R1 -L337 -R67 -L33 -R83 -R719 -L30 -R189 -R34 -L93 -R31 -R669 -R28 -L56 -R28 -R55 -R45 -L93 -L7 -R72 -R29 -L951 -L1 -L31 -R615 -R18 -L17 -L23 -R89 -R70 -R47 -R83 -L18 -R18 -R4 -L4 -R88 -R77 -L65 -R54 -R51 -R33 -R74 -R65 -R30 -L15 -R94 -L186 -L912 -L95 -R477 -R87 -L257 -R24 -R22 -L46 -R70 -L70 -R58 -L682 -R24 -L58 -R40 -R18 -R6 -L6 -L62 -R34 -R75 -R53 -L628 -L179 -R7 -L92 -R92 -L21 -R53 -L63 -L50 -L219 -L4 -R14 -R90 -R53 -R15 -L68 -R18 -R82 -L82 -R91 -R91 -L41 -R41 -L923 -R23 -L98 -L15 -R67 -R81 -R24 -L40 -L19 -L689 -R8 -R17 -R38 -L66 -L8 -R73 -R30 -R35 -R909 -L447 -L72 -R72 -L527 -R7 -R27 -R78 -L86 -L99 -L65 -R79 -L45 -L61 -R93 -L223 -R36 -R77 -L91 -L81 -L419 -L37 -R72 -L35 -L63 -R31 -R96 -L44 -L20 -L219 -L84 -L69 -L34 -R79 -L74 -L34 -R35 -L12 -L88 -L38 -R838 -L882 -L919 -R22 -L680 -L41 -L88 -L85 -R23 -L50 -R57 -L57 -R77 -R99 -L976 -R60 -R40 -L72 -L28 -L17 -L16 -R78 -R49 -L30 -R136 -L735 -L65 -L39 -L961 -R16 -R83 -R73 -R18 -L90 -L36 -R36 -R552 -R48 -L937 -R37 -R37 -R4 -R233 -R26 -L70 -L30 -L98 -L2 -R8 -R44 -L52 -R14 -L663 -R49 -R93 -R907 -L36 -R36 -R589 -L11 -R1 -R927 -R98 -L4 -R35 -L435 -L6 -R817 -R3 -L314 -L41 -R941 -R61 -L34 -R795 -R62 -R382 -R46 -L87 -L25 -L91 -L63 -R54 -R10 -R88 -R669 -R733 -L7 -L93 -R43 -R97 -R1 -L77 -L64 -R12 -L331 -L581 -L13 -R13 -L21 -L79 -R17 -R42 -R41 -R3 -R97 -L977 -L923 -R54 -R30 -R16 -R82 -R71 -L53 -L821 -L46 -R567 -L386 -L287 -L54 -L56 -L17 -R93 -R98 -L91 -R8 -L8 -L20 -R20 -R88 -R48 -L475 -L158 -L90 -L15 -L75 -R37 -L260 -L44 -L44 -L584 -L34 -R98 -L92 -L67 -R50 -R26 -L11 -R2 -R180 -R80 -L578 -L13 -R31 -R72 -R52 -L9 -L91 -L94 -L30 -L82 -R86 -R196 -L326 -R92 -L66 -R24 -L24 -R30 -R170 -L13 -L96 -R9 -R2 -R998 -L9 -R47 -L57 -R319 -R13 -R29 -L2 -R18 -L658 -L25 -L35 -L10 -L79 -R71 -L22 -R641 -L20 -R16 -L57 -L80 -L391 -R91 -L12 -R712 -L64 -R811 -R53 -L95 -L66 -R90 -R78 -L7 -L45 -L55 -L102 -R2 -L454 -L31 -R1 -R98 -R86 -L76 -L28 -L54 -L86 -R16 -R128 -L972 -R472 -R19 -R81 -L41 -L687 -L34 -L91 -L183 -L364 -R42 -R8 -R508 -L10 -R20 -R743 -L53 -L12 -R854 -R35 -L35 -R578 -R538 -L16 -R37 -R71 -L8 -L79 -R79 -R77 -R723 -R66 -R34 -L6 -L40 -L54 -R24 -R24 -R43 -L76 -L72 -R57 -R59 -L85 -R49 -L32 -R39 -R48 -L78 -L99 -L98 -L99 -R96 -R11 -L94 -L45 -R85 -R843 -L819 -R19 -L88 -R88 -L20 -R417 -R3 -R51 -R49 -R69 -L69 -L4 -L412 -L46 -L5 -R38 -L44 -L63 -R265 -R37 -L67 -L84 -L33 -L104 -R302 -R64 -L16 -R72 -R80 -R461 -R83 -R76 -L4 -R83 -L34 -R966 -R615 -L35 -R248 -L441 -R903 -R42 -R46 -L14 -R25 -R708 -L47 -L61 -L602 -L72 -R29 -R88 -R27 -L761 -L227 -R705 -R13 -L85 -R180 -R8 -R97 -L97 -R38 -R59 -R11 -R606 -L48 -R9 -R305 -R17 -R66 -L16 -R13 -L63 -R9 -L47 -R38 -L363 -L37 -R11 -R88 -R98 -R3 -L33 -R88 -L555 -R80 -R17 -L97 -L453 -R28 -R256 -R92 -L23 -L42 -L51 -R854 -R39 -L8 -R67 -L52 -R704 -R84 -R518 -R66 -L18 -R13 -R26 -R70 -R30 -L371 -R16 -L98 -R36 -R989 -R16 -R59 -L747 -R12 -R53 -L245 -L143 -L77 -R67 -R193 -R40 -L53 -R53 -L24 -L452 -R3 -L22 -L45 -L60 -R82 -R18 -R14 -L79 -L17 -R9 -R26 -R47 -L247 -L781 -L72 -L9 -L85 -R23 -R534 -L63 -L808 -R20 -L46 -L250 -L316 -L708 -R8 -L70 -L42 -L1 -R62 -L263 -R11 -L84 -R87 -R38 -R210 -R52 -R28 -R72 -R81 -R19 -L34 -R88 -L402 -L452 -R2 -L64 -R65 -R19 -R78 -R5 -L11 -L49 -R55 -R10 -L14 -L96 -L69 -L2 -R88 -L58 -R41 -L79 -L21 -R89 -L97 -R708 -L207 -R61 -L54 -L68 -L27 -L85 -L2 -R18 -R60 -R4 -R812 -L84 -L15 -L13 -R78 -L31 -L12 -R46 -L42 -L14 -L51 -R66 -L40 -L411 -R11 -L46 -R978 -L91 -R59 -R19 -R38 -L57 -R1 -R99 -R70 -L899 -R48 -R53 -R3 -R82 -R459 -R8 -L80 -R58 -L2 -L60 -R360 -L43 -R743 -R97 -R833 -R72 -L84 -R88 -R63 -R10 -L33 -R2 -L21 -R6 -L328 -L18 -R331 -R81 -R60 -R82 -L36 -L78 -L55 -L40 -L21 -L78 -L18 -L15 -R82 -L122 -L63 -R3 -R3 -R89 -L92 -R456 -R44 -R11 -R54 -L8 -R43 -L574 -L10 -R84 -L28 -R685 -L62 -R905 -R50 -R91 -R59 -L36 -R354 -R82 -L226 -R9 -L83 -L80 -R290 -R34 -L721 -L47 -L76 -R451 -R49 -R51 -R81 -R34 -L366 -R33 -L50 -R17 -R52 -L49 -L3 -L426 -L63 -L65 -L946 -R92 -R37 -L29 -R75 -L475 -R1 -R67 -R61 -R86 -L37 -R34 -L39 -L27 -R254 -R414 -L29 -L52 -R96 -L829 -L74 -R56 -R34 -L65 -R329 -R55 -L59 -L43 -R67 -R52 -L653 -L43 -L56 -R73 -R37 -R6 -R80 -R504 -R63 -L759 -L30 -L65 -R58 -R33 -R304 -R20 -R85 -L14 -L10 -L658 -L6 -R79 -R78 -R22 -R75 -L159 -R35 -L791 -R669 -R571 -L25 -L62 -L13 -L39 -R112 -R73 -R54 -R549 -R39 -L83 -L45 -L75 -L19 -R661 -R37 -R14 -R22 -R10 -R90 -L909 -L863 -L28 -R36 -R8 -R811 -R45 -L81 -L19 -L92 -R92 -L868 -L732 -L47 -L5 -L48 -L31 -L89 -L80 -R642 -L986 -L41 -R217 -R11 -R69 -R88 -R979 -L79 -R37 -R48 -R15 -L33 -L67 -R14 -R60 -L87 -R19 -L6 -R981 -L81 -L33 -L71 -R13 -L719 -R36 -L31 -L95 -L94 -R23 -L88 -L41 -R17 -R73 -L90 -L29 -R89 -R84 -L59 -R7 -L66 -R41 -R71 -R62 -L50 -L76 -L618 -R44 -R78 -L44 -R66 -L61 -L39 -L64 -L98 -R62 -R440 -L78 -R38 -L48 -L50 -R683 -L40 -L21 -R76 -R71 -L71 -L63 -L53 -R84 -R332 -R94 -L8 -L32 -L44 -R90 -R7 -R93 -L637 -L821 -L87 -L17 -L83 -L6 -R51 -R4 -L74 -R70 -R185 -L36 -L208 -L41 -L16 -L34 -L85 -R28 -R7 -R903 -L3 -R289 -R11 -L98 -L2 -R1 -R99 -R88 -R12 -L34 -R96 -R12 -L74 -R23 -L23 -R44 -R54 -L19 -R21 -L25 -R804 -L10 -L13 -R44 -R67 -R738 -R56 -L43 -L18 -L25 -L47 -L28 -R13 -R954 -R733 -R80 -L35 -R55 -L56 -L26 -R682 -R5 -L73 -L71 -L61 -R57 -R724 -R35 -L3 -L54 -R741 -L27 -R84 -R43 -R689 -L89 -L31 -R23 -L8 -L84 -L55 -L45 -R34 -R66 -L995 -R26 -L7 -L50 -L640 -R66 -R92 -R55 -R4 -R835 -L36 -L14 -R201 -L5 -L58 -L265 -L31 -R22 -R6 -R94 -L90 -R69 -L79 -L29 -L831 -L404 -L70 -R94 -L60 -L367 -L426 -R693 -L429 -R305 -L20 -L56 -R56 -R44 -L49 -R649 -R15 -R985 -R277 -R923 -L56 -R902 -L24 -R412 -L34 -R27 -L75 -R48 -L98 -R98 -L65 -L35 -R39 -L39 -R19 -R445 -L54 -R90 -L81 -R81 -L52 -R52 -L32 -L814 -L15 -R38 -R21 -R35 -R28 -R39 -R97 -L781 -L10 -L53 -L53 -R385 -R758 -R1 -L35 -L35 -L74 -R32 -R73 -R11 -L79 -L437 -R13 -L46 -L87 -L80 -R13 -L39 -L774 -R64 -R306 -R30 -L61 -R661 -R166 -R34 -L122 -L78 -R63 -R33 -L96 -L51 -R51 -R65 -R26 -L63 -L906 -R778 -L726 -R73 -R53 -L63 -R784 -R83 -L4 -L26 -L56 -L9 -L99 -R80 -L90 -R677 -L77 -L13 -R13 -R33 -R267 -R98 -R52 -R250 -L59 -L44 -L97 -L86 -L72 -L42 -L454 -R54 -R4 -L15 -R42 -L42 -R10 -R1 -R28 -L88 -L16 -R76 -L28 -L75 -L97 -R45 -R55 -L29 -R29 -R18 -R55 -R27 -L298 -L2 -L692 -R81 -L823 -L34 -L32 -R596 -L1 -L95 -R355 -L48 -R7 -R35 -L55 -L511 -L14 -L78 -L91 -R82 -L48 -L32 -L40 -R95 -R77 -R36 -R30 -L79 -L626 -R32 -R24 -R49 -R6 -L6 -L48 -R8 -R40 -R41 -R1 -R920 -L19 -R57 -R13 -L13 -R51 -L51 -R23 -L3 -L20 -L92 -R512 -L34 -R3 -L9 -L46 -R666 -L69 -R69 -L80 -R20 -L54 -R14 -R62 -L862 -R79 -R64 -L80 -L24 -L671 -L12 -L588 -L68 -R448 -L95 -L35 -L218 -R31 -L496 -R65 -L49 -L2 -R39 -R710 -L98 -R79 -R921 -L45 -L55 -L35 -R47 -L49 -L563 -R579 -R21 -R40 -L556 -L84 -L25 -R56 -R66 -R14 -L44 -R454 -R79 -L81 -L680 -R40 -R45 -L24 -R28 -R97 -R75 -R92 -L92 -L30 -L850 -R80 -R26 -R74 -R57 -R34 -R456 -R53 -L17 -R40 -L623 -R34 -R37 -L51 -L72 -L217 -L34 -L22 -R25 -R83 -L83 -R18 -L18 -L90 -L89 -R72 -L96 -L88 -R48 -R745 -R98 -R9 -R91 -R47 -L338 -R91 -R40 -L40 -L47 -R63 -R84 -L158 -L869 -L573 -L53 -L78 -R31 -R45 -R14 -L2 -R60 -R68 -R68 -L88 -L28 -L37 -L7 -L24 -R454 -L50 -R327 -L89 -R621 -R568 -L31 -L69 -L41 -L98 -R639 -L64 -R574 -R57 -R71 -R677 -R14 -L715 -L14 -R4 -R96 -R2 -L2 -R4 -R22 -L126 -R54 -R54 -R103 -R96 -L22 -R625 -L310 -L87 -R34 -L533 -R71 -R18 -R89 -L92 -R662 -L78 -R55 -L74 -R35 -R667 -R133 -R829 -L29 -R15 -R85 -L72 -R30 -R42 -R33 -L71 -L85 -R23 -R72 -L13 -R41 -L616 -R82 -R37 -L3 -R40 -L40 -L2 -R81 -L11 -L11 -L21 -R64 -R50 -R181 -R69 -R69 -R31 -L48 -L45 -R93 -L57 -L43 -R1 -L1 -L80 -L26 -L28 -R38 -R960 -L479 -L56 -L29 -L65 -R72 -R46 -R47 -R34 -R270 -R88 -R8 -L477 -L37 -L95 -L7 -L84 -R64 -R136 -R66 -R69 -R90 -L93 -L12 -L20 -L32 -R27 -R37 -L28 -R96 -R43 -L543 -R97 -L165 -L591 -R620 -R439 -R39 -L68 -L151 -R680 -R97 -R84 -R19 -L51 -L399 -L50 -L27 -L50 -L191 -R37 -L21 -L49 -R89 -L88 -L7 -L93 -L90 -R416 -R68 -R53 -R26 -R38 -L85 -L60 -L60 -L13 -L93 -R44 -L62 -L58 -R9 -L65 -L56 -R654 -R34 -L69 -L7 -L24 -R42 -L542 -R99 -R1 -L89 -L94 -L21 -R1 -R627 -L324 -R55 -R792 -L75 -L191 -R6 -L87 -R89 -R24 -R22 -L35 -R922 -L22 -L762 -R11 -L616 -R67 -L58 -R60 -R98 -L321 -R21 -R19 -L419 -R675 -R31 -L6 -L5 -L95 -R84 -L78 -R19 -L22 -L3 -L79 -L76 -L138 -L51 -R59 -R13 -L42 -R95 -L39 -L11 -R86 -L91 -R18 -L344 -L50 -L63 -R738 -R75 -R81 -R44 -R875 -L40 -R347 -R77 -L284 -L83 -L217 -L783 -R83 -L20 -R91 -L43 -L17 -R89 -R75 -R25 -L4 -R38 -R19 -L67 -R940 -L2 -L24 -R10 -R43 -L467 -R14 -L37 -R872 -L35 -L63 -R66 -L88 -L846 -R16 -R95 -L91 -L41 -L3 -R52 -R603 -R48 -L9 -R65 -L4 -R48 -L9 -R86 -R75 -R91 -R90 -L81 -L88 -L11 -R99 -L10 -L90 -R871 -L21 -L7 -R57 -R25 -L8 -R87 -L4 -L59 -R59 -R72 -R18 -R10 -L29 -R29 -L908 -R75 -R33 -L92 -L908 -L82 -L77 -R84 -L25 -R89 -L67 -R951 -L73 -L25 -R31 -L43 -R7 -L70 -R104 -R77 -R98 -L33 -R254 -R17 -R83 -R989 -L89 -R79 -R21 -R68 -L755 -L17 -L693 -L63 -L40 -L58 -L42 -L86 -R86 -L61 -R361 -L24 -R25 -L93 -R79 -R56 -R99 -L42 -R44 -L92 -R37 -R11 -L48 -L764 -L854 -L834 -R4 -R482 -L406 -R20 -R76 -R38 -L54 -L60 -L59 -L82 -L59 -R64 -R41 -L82 -R77 -L37 -R78 -R55 -L79 -L57 -R144 -L741 -L50 -L63 -L25 -L25 -L42 -L32 -R86 -R86 -L57 -L90 -L99 -R90 -L67 -L577 -L46 -L52 -L8 -L92 -L916 -R33 -R33 -R61 -L11 -R6 -R93 -R14 -R87 -R57 -L58 -L94 -R95 -R32 -R68 -R436 -L723 -R187 -L551 -L10 -R19 -L48 -R90 -L663 -L37 -L175 -L54 -L321 -R751 -R25 -L60 -L341 -R75 -R887 -L187 -R330 -L47 -R7 -L58 -R68 -L48 -L438 -L89 -R75 -L4 -L73 -L16 -R593 -R7 -R85 -R8 -R46 -L6 -L20 -L70 -R50 -R22 -L22 -L54 -L283 -L58 -R42 -R271 -R7 -L723 -R98 -R29 -R84 -L15 -L98 -L82 -R98 -L71 -R13 -R30 -L47 -R59 -L52 -R60 -L8 -L56 -R86 -L30 -R7 -L7 -L29 -L70 -R10 -L33 -R70 -R11 -L59 -R74 -L834 -R60 -L3 -L35 -R38 -L70 -R143 -R258 -L22 -L97 -L79 -R394 -R73 -L48 -R31 -R17 -L91 -L9 -L47 -R47 -R446 -R10 -R87 -L72 -R29 -R775 -R225 -L43 -R35 -R629 -L21 -L98 -R98 -L56 -L44 -R15 -R5 -L80 -R60 -R63 -L63 -R34 -L34 -R29 -R49 -R17 -L117 -R22 -R690 -L51 -R38 -L777 -L81 -R59 -R622 -L67 -R99 -R68 -L92 -R99 -R26 -L33 -L38 -R60 -R78 -L57 -L43 -L30 -L70 -R55 -L87 -L60 -L61 -L47 -L67 -L508 -L25 -L6 -L52 -L42 -R66 -R34 -L86 -R57 -R574 -R19 -L64 -R69 -L195 -R726 -L62 -L90 -L41 -R93 -L129 -L96 -R885 -R931 -R9 -R66 -R47 -L13 -L59 -L315 -L26 -R1 -R99 -R47 -L55 -L592 -R45 -R955 -L677 -L823 -R91 -L73 -R82 -L856 -R56 -R157 -L89 -L68 -R18 -R25 -R57 -R94 -R106 -L70 -L88 -L42 -L90 -L99 -L34 -R65 -L78 -L64 -R62 -L262 -R4 -L20 -R34 -R73 -R9 -L34 -R71 -R3 -L37 -R843 -L46 -R8 -L8 -R2 -R47 -R51 -R934 -L34 -L32 -R932 -R65 -L45 -R87 -L81 -L173 -R84 -L737 -R36 -R33 -R25 -L94 -L54 -L38 -R76 -R11 -L99 -R40 -L94 -R58 -L48 -L252 -R4 -R551 -L78 -R23 -L56 -R56 -R57 -L77 -L71 -L9 -R78 -R22 -L93 -L43 -L64 -L10 -L39 -L67 -L84 -L18 -R718 -R15 -L15 -L264 -R62 -L98 -L43 -R43 -L632 -R9 -L77 -L24 -L39 -R63 -L52 -L15 -L33 -R795 -R93 -R804 -R97 -L48 -R953 -L36 -L6 -R160 -R88 -L25 -L75 -L33 -R26 -L354 -L44 -L93 -L48 -L54 -R894 -R6 -R50 -R61 -L72 -R85 -R76 -L84 -L12 -R593 -L97 -L57 -L21 -L66 -L56 -L48 -L458 -R85 -L34 -L45 -R33 -L93 -L11 -L8 -L935 -R14 -R55 -R39 -R6 -R56 -L56 -L2 -R2 -R144 -L32 -L213 -R876 -L4 -R29 -L48 -L52 -L2 -R77 -R49 -R76 -R70 -L70 -R52 -L36 -L27 -L83 -R85 -L8 -R12 -R24 -R304 -R77 -R21 -R90 -R77 -R12 -R52 -L7 -R55 -L37 -L30 -L92 -L6 -R65 -L7 -R66 -L89 -R66 -L8 -L86 -L42 -R17 -R83 -R201 -L56 -R8 -L75 -R99 -L77 -R30 -L57 -L49 -L24 -R72 -L947 -R61 -R163 -L49 -R81 -R563 -L44 -R73 -L73 -L87 -L873 -L40 -R45 -L13 -L8 -L24 -L37 -L45 -R956 -L74 -R43 -L43 -L88 -R29 -L47 -L94 -L19 -R97 -R31 -L28 -R71 -L48 -L93 -L62 -R51 -L61 -L45 -L94 -R22 -R32 -L54 -R89 -L607 -R18 -R493 -L93 -L54 -L80 -R64 -R677 -R93 -L11 -L89 -L33 -L10 -L16 -L80 -L79 -R18 -R72 -R37 -R83 -R30 -L22 -L3 -L97 -L76 -R76 -L68 -L74 -L84 -L74 -L79 -R46 -L17 -R8 -L14 -L78 -L17 -R74 -L368 -L787 -R32 -L16 -L38 -R54 -R38 -L11 -R427 -R26 -L80 -L54 -L46 -L17 -L10 -R27 -L99 -L1 -L121 -R28 -R93 -L82 -R95 -R65 -L21 -R43 -L83 -L877 -R109 -L8 -R83 -R76 -L9 -R9 -L50 -R92 -R81 -R77 -R64 -L64 -L94 -R736 -L55 -L58 -R71 -R21 -R67 -L36 -R798 -R40 -L48 -R58 -R70 -R66 -L10 -R250 -R87 -L78 -R315 -L68 -R960 -R8 -R91 -L75 -L7 -R91 -L18 -L39 -L43 -L52 -R26 -R669 -L43 -R949 -L24 -L925 -L1 -L62 -L837 -R54 -L154 -R11 -L11 -L65 -R272 -L7 -L76 -L80 -L64 -R10 -R270 -L32 -R62 -R10 -R325 -L26 -R1 -R363 -R437 -L64 -R11 -R53 -L48 -R748 -R21 -R16 -R547 -R74 -L505 -L53 -R302 -R962 -L11 -R2 -R45 -R98 -L29 -R31 -R75 -L55 -L584 -R64 -L54 -R54 -R79 -R637 -R34 -L60 -L30 -R118 -R97 -R25 -L81 -R949 -R76 -L96 -L51 -L25 -R586 -L87 -R331 -R61 -L91 -L854 -L18 -R97 -R986 -L83 -R60 -L160 -L712 -R6 -R45 -R418 -L90 -L20 -R92 -L83 -R644 -L50 -R50 -R26 -R974 -L154 -L66 -L80 -R34 -L504 -L980 -L35 -R49 -R95 -R741 -R57 -L12 -L111 -R66 -L44 -R83 -R35 -L272 -L402 -R413 -L55 -R62 -R80 -R299 -L223 -L811 -L94 -R29 -R43 -R58 -R92 -R7 -L51 -L8 -L41 -R63 -L63 -R421 -L50 -R74 -L4 -R59 -L76 -L193 -L908 -L36 -L238 -R51 -L87 -L63 -R53 -L56 -R11 -L72 -R935 -L21 -L90 -R6 -L53 -L963 -R94 -R66 -R40 -L92 -L94 -L54 -R95 -R81 -R1 -L37 -R50 -R50 -R11 -R89 -R18 -L568 -R90 -R160 -R32 -L32 -R79 -L79 -R77 -L77 -L68 -L234 -R52 -R371 -L221 -R24 -R64 -L67 -L9 -L292 -R80 -L93 -R95 -L13 -L89 -R68 -R32 -L56 -L44 -L106 -L392 -L2 -L170 -R88 -L18 -R258 -R73 -R2 -R42 -R76 -L85 -R34 -L49 -R270 -L13 -L94 -R214 -R4 -L32 -R58 -R42 -L836 -R736 -R414 -L587 -L27 -L12 -L3 -R79 -L64 -R61 -L19 -R846 -R75 -R64 -L585 -L57 -L254 -L6 -R22 -L664 -L87 -R94 -L81 -L94 -R575 -R810 -R83 -L242 -R87 -L68 -R49 -R54 -R43 -L13 -L24 -R31 -L6 -R54 -R62 -L99 -R89 -R21 -L21 -L795 -R95 -L40 -R79 -R69 -R721 -L82 -R53 -L6 -R76 -R30 -L676 -R76 -L634 -L452 -L398 -R84 -L32 -R32 -R85 -R9 -R52 -R60 -R94 -R3 -R94 -R225 -R21 -R50 -R70 -L269 -L80 -L92 -L33 -L944 -L45 -L25 -R125 -L8 -L92 -L56 -R351 -L46 -L50 -L91 -R956 -R80 -L5 -R366 -R24 -R71 -R44 -L70 -R32 -R94 -R23 -L23 -L43 -L18 -L29 -L8 -R59 -R39 -R69 -L69 -L72 -L55 -L44 -L3 -R14 -L35 -R695 -L26 -R26 -L211 -L40 -L826 -R77 -R25 -L25 -L45 -R77 -R34 -R25 -R6 -R69 -R34 -L46 -R663 -L17 -L93 -R93 -L54 -L5 -L14 -R73 -R644 -L139 -R73 -L833 -R55 -R60 -R43 -R5 -R92 -L63 -L88 -R51 -L670 -L941 -R89 -L78 -L45 -R7 -R38 -R26 -R64 -L90 -L70 -R943 -L631 -L86 -L456 -R46 -R30 -R50 -L26 -L62 -R62 -L99 -L1 -R34 -L41 -R76 -R31 -R72 -L63 -R91 -R559 -L514 -R91 -R82 -R73 -R2 -L42 -R56 -R21 -L71 -L75 -R18 -R62 -R58 -R24 -R420 -R23 -R77 -L64 -L84 -L87 -R33 -L56 -L606 -L78 -R31 -R57 -L76 -R2 -L36 -R31 -R69 -L374 -L19 -L11 -R160 -L56 -L8 -R95 -L87 -R3 -L3 -L34 -L66 -R31 -L331 -L839 -R60 -L921 -L894 -R23 -L63 -R45 -L11 -R24 -R76 -R60 -L47 -L13 -R28 -R36 -L964 -L77 -R45 -R6 -R42 -R84 -R921 -L221 -L14 -R89 -R82 -L57 -R65 -L591 -L725 -L49 -L922 -R22 -R64 -R307 -L96 -R13 -R12 -R84 -L212 -L772 -L7 -L346 -R46 -L46 -R45 -L592 -R80 -R145 -L93 -L214 -R82 -L696 -L4 -L58 -R30 -R89 -R45 -L34 -L72 -R86 -L38 -L48 -L35 -R7 -R28 -R63 -L63 -R46 -L46 -R38 -L38 -R12 -R93 -L47 -R42 -L55 -R23 -R77 -R55 -R56 -R547 -L86 -R83 -R87 -R73 -R50 -R35 -R55 -R54 -L89 -R88 -R57 -R90 -L19 -R43 -L24 -L70 -L30 -L1 -L97 -R81 -L95 -R81 -R16 -L85 -L89 -R60 -R7 -L47 -R69 -R45 -L45 -L97 -R97 -L47 -L53 -L12 -L1 -R13 -R37 -R87 -R67 -L54 -R63 -R96 -R4 -R65 -R63 -L28 -R70 -L20 -L55 -R72 -R59 -R62 -L78 -R89 -L87 -R88 -R54 -R46 -R70 -L70 -R63 -L63 -R12 -L12 -L99 -R99 -R46 -L46 -L36 -R7 -L12 -L5 -L31 -L34 -R36 -R42 -R41 -L10 -R17 -L21 -R18 -L16 -L33 -L9 -L33 -L13 -L50 -L36 -R20 -R15 -L29 -R16 -R31 -L2 -L12 -L40 -R41 -R47 -R8 -L42 -L48 -R45 -L29 -R42 -R20 -L33 -L7 -R22 -R32 -L20 -L14 -L28 -L17 -R33 -R6 -R39 -R47 -R9 -L5 diff --git a/day1/main.cpp b/day1/main.cpp index 2c152fe..dc519e2 100644 --- a/day1/main.cpp +++ b/day1/main.cpp @@ -1,111 +1,5 @@ #include -#include -#include -#include -#include -struct DialRotation { - char direction; - int distance; -}; - -auto parseRotations(const std::string& filename) -> std::expected, std::string> { - std::ifstream inputF {filename}; - - if (!inputF){ - - return std::unexpected{"Some file open error.\n"}; - } - std::vector dialRotations{}; - DialRotation curDial{}; - while ( inputF >> curDial.direction >> curDial.distance) - { - //std::println("{} : {}", curDial.direction, curDial.distance); - dialRotations.push_back(curDial); - } - - return std::move(dialRotations); -} -constexpr int dialStart = 50; -constexpr int maxDial = 100 ; - -auto executeSafeCrack(const std::vector& dialRotations){ - int dial {dialStart}; - std::cout << "The dial starts by pointing at " << dial << "\n"; - int countZero = 0; - - for (const auto& curDial : dialRotations){ - int fullRotations = curDial.distance / maxDial; - int modulo = curDial.distance % maxDial; - - if (fullRotations > 0){ - std::cout << "Big number! Passed " << "" << fullRotations << " times through 0!\n"; - countZero += fullRotations; - } - - if(curDial.direction == 'L'){ - int prevDial = dial; - dial -= modulo; - if (dial < 0){ - dial += maxDial; - if (prevDial != 0) { - std::cout << "Passed through 0 from a L rotation! Count++!\n"; - countZero++; - } - } - if (dial == 0){ - std::cout << "Stopped at 0! Count++!\n"; - countZero++; - } - } - else{ - dial += modulo; - if (dial >= maxDial){ - dial -= maxDial; - countZero++; - std::cout << "Passed through 0 from a R rotation! Count++!\n"; - } - } - - std::println("{} : {:3}, Dial now at: {:5} cnt: {}", curDial.direction, curDial.distance, dial, countZero); - if (dial < 0){ - std::cout << "Shit's fucked!\n"; - break; - } - if (dial >= maxDial){ - std::cout << "Shit's fucked!\n"; - break; - } - } - std::print("Zeros: {}\n", countZero); - return countZero; -} - -auto main(int, char**) -> int { - auto retval = parseRotations("day1_input"); - - std::vector testCase = { - {'L', 68}, - {'L', 30}, - {'R', 48}, - {'L', 5}, - {'R', 60}, - {'L', 55}, - {'L', 1}, - {'L', 99}, - {'R', 14}, - {'L', 82}, - {'L', 1000}, - }; - - if(retval) { - auto realResult = executeSafeCrack(*retval); - auto result = executeSafeCrack(testCase); - std::println("Testcase result: {}", result); - std::println("Total result: {}", realResult); - } - else{ - std::print("{}\n", retval.error()); - } - return 0; +int main(int, char**){ + std::cout << "Hello, from aoc25 day1!\n"; } diff --git a/day2/CMakeLists.txt b/day2/CMakeLists.txt deleted file mode 100644 index ebc71e2..0000000 --- a/day2/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ - # Use top-level helper to add the target and copy input files - aoc_add_day(day2 "${CMAKE_CURRENT_SOURCE_DIR}" main.cpp) \ No newline at end of file diff --git a/day2/main.cpp b/day2/main.cpp deleted file mode 100644 index f139552..0000000 --- a/day2/main.cpp +++ /dev/null @@ -1,153 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -struct IDRange { - long leftRange; - long rightRange; -}; - -auto parseRanges(const std::string& filename) -> std::expected, std::string> { - std::ifstream inputF {filename}; - - if (!inputF){ - return std::unexpected{"Some file open error.\n"}; - } - std::vector idRanges{}; - - std::string bigString{}; - std::getline(inputF,bigString); - auto ranges = std::ranges::to>(std::views::split(bigString, ',')); - - for(const auto& range : ranges){ - auto subParts = std::ranges::to>(std::views::split(range, '-')); - idRanges.emplace_back(std::stol(subParts[0]), std::stol(subParts[1])); - } - - inputF.close(); - - return std::move(idRanges); -} - - -auto countDoubles(const std::vector& idRanges) { - long doubles{}; - for(const auto& rng : idRanges){ - //std::println("{}-{}", rng.leftRange, rng.rightRange); - for( long i = rng.leftRange; i <= rng.rightRange; i++){ - auto str_version = std::to_string(i) ; - auto str_len = str_version.size(); - //std::print("Checking {}. Length: {}", str_version, str_version.size()); - if (str_len % 2 == 0) { - //std::print(" Divisible by two, splitting..."); - std::string_view left_half = std::string_view(str_version).substr(0, str_len/2); - std::string_view right_half = std::string_view(str_version).substr(str_len/2, str_len); - //std::print("Halves: {}/{}",left_half, right_half); - if(left_half == right_half){ - //std::print(" EQUAL!"); - doubles += i; - } - } - //std::println(); - } - } - return doubles; -} - - - -auto calculatePossibleSplits(int length) -> std::vector{ - //std::println("Possible ways to split a str of length {}: ", length); - std::vector returnVec{}; - for(auto toCheck : std::views::iota(2, length+1)){ - if(length % toCheck == 0) - { - //std::println("{}", toCheck); - returnVec.push_back(toCheck); - } - } - return std::move(returnVec); -} -std::unordered_map> splitMap{}; -auto getPossibleSplits(int length) -> const std::vector&{ - if(!splitMap.contains(length)){ - //std::println("Caching {}",length); - splitMap[length] = calculatePossibleSplits(length); - } - return splitMap.at(length); -} - -auto countRepeats(const std::vector& idRanges) { - long doubles{}; - for(const auto& rng : idRanges){ - //std::println("{}-{}", rng.leftRange, rng.rightRange); - for( long i = rng.leftRange; i <= rng.rightRange; i++){ - auto str_version = std::to_string(i) ; - auto str_len = str_version.size(); - //std::print("Checking {}. Length: {} ", str_version, str_version.size()); - - std::vector numsToCheck = getPossibleSplits(str_len); - //std::println("Possible splits: {}", numsToCheck); - for (int checkNum : numsToCheck) - { - //std::print("Splitting in {}: ", checkNum); - std::vector splits(checkNum); - for(auto toCheck : std::views::iota(0, checkNum)){ - auto window = str_len/checkNum; - splits[toCheck] = std::string_view(str_version).substr(toCheck*window, window); - //std::print("[{}]: {} /{} ", toCheck, splits[toCheck], window); - } - - if(std::equal(splits.begin() + 1, splits.end(), splits.begin())){ - //std::print(" EQUAL!"); - doubles += i; - break; - } - - //std::println(); - } - //std::println(); - } - //std::println(); - } - return doubles; -} - -auto main() -> int { - - - auto testCase = parseRanges("test_input"); - if(testCase) { - auto testResult = countDoubles(*testCase); - auto testResultP2 = countRepeats(*testCase); - std::println("P1 Testcase result: {}", testResult); - std::println("P2 Testcase result: {}", testResultP2); - } - else{ - std::print("{}\n", testCase.error()); - } - - - auto realRanges = parseRanges("puzzle_input"); - if(realRanges) { - //auto realResult = countDoubles(*realRanges); - auto realResultP2 = countRepeats(*realRanges); - //std::println("P1 Real result: {}", realResult); - std::println("P2 Real result: {}", realResultP2); - } - else{ - std::print("{}\n", realRanges.error()); - } - - return 0; -} diff --git a/day2/puzzle_input b/day2/puzzle_input deleted file mode 100644 index 28ec75c..0000000 --- a/day2/puzzle_input +++ /dev/null @@ -1 +0,0 @@ -9191906840-9191941337,7671-13230,2669677096-2669816099,2-12,229599-392092,48403409-48523311,96763-229430,1919163519-1919240770,74928-96389,638049-668065,34781-73835,736781-819688,831765539-831907263,5615884-5749554,14101091-14196519,7134383-7169141,413340-625418,849755289-849920418,7745350-7815119,16717-26267,4396832-4549887,87161544-87241541,4747436629-4747494891,335-549,867623-929630,53-77,1414-3089,940604-1043283,3444659-3500714,3629-7368,79-129,5488908-5597446,97922755-98097602,182-281,8336644992-8336729448,24-47,613-1077 \ No newline at end of file diff --git a/day2/test_input b/day2/test_input deleted file mode 100644 index bd04584..0000000 --- a/day2/test_input +++ /dev/null @@ -1 +0,0 @@ -11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124 \ No newline at end of file diff --git a/day3/CMakeLists.txt b/day3/CMakeLists.txt deleted file mode 100644 index 04836a0..0000000 --- a/day3/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ - # Use top-level helper to add the target and copy input files - aoc_add_day(day3 "${CMAKE_CURRENT_SOURCE_DIR}" main.cpp) \ No newline at end of file diff --git a/day3/main.cpp b/day3/main.cpp deleted file mode 100644 index aab3028..0000000 --- a/day3/main.cpp +++ /dev/null @@ -1,168 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -struct IDRange { - long leftRange; - long rightRange; -}; - -auto parseBanks(const std::string& filename) -> std::expected>, std::string> { - std::ifstream inputF {filename}; - - if (!inputF){ - return std::unexpected{"Some file open error.\n"}; - } - std::vector> banks{}; - - std::string bankLine{}; - while(std::getline(inputF,bankLine)){ - banks.emplace_back(bankLine - | std::views::transform([](char c){ return c - '0';}) - | std::ranges::to>()); - } - - - - inputF.close(); - - return std::move(banks); -} - -auto calculateJoltage(const std::vector& bank) -> long{ - auto curIt = bank.begin(); - auto rightIt = bank.end(); - //int leftMax = 0; - - auto leftBound = bank.begin(); - - // First find biggest number with that is not the last - while(curIt != rightIt-1){ - if(*curIt > *leftBound ){ - leftBound = curIt; - } - //std::println("Cur: {}, lMax: {}", *curIt, *leftBound); - curIt++; - } - - int rightMax = 0; - while(leftBound != rightIt) { - rightMax = std::max(rightMax, *rightIt); - rightIt--; - } - - - std::println("LMax: {}, rMax: {}", *leftBound, rightMax); - return (*leftBound)*10 +rightMax; -} - -auto countJoltages(const std::vector>& banks) { - long totalJoltage{}; - for(const auto& bank : banks){ - std::println("Bank: {}", bank); - totalJoltage += calculateJoltage(bank); - } - return totalJoltage; -} - -auto calculateJoltageP2(const std::vector& bank) -> long long{ - const int TO_TAKE = 12; - std::vector takenNumbers{}; - - auto curIt = bank.begin(); - auto rightIt = bank.end(); - - auto leftBound = bank.begin(); - - while(takenNumbers.size() != TO_TAKE){ - - // First find biggest number with that is not in the last 12 - while(curIt != (rightIt +1 - TO_TAKE + takenNumbers.size())){ - if(*curIt > *leftBound ){ - leftBound = curIt; - } - curIt++; - } - takenNumbers.push_back(*leftBound); - - curIt = leftBound+1; - leftBound = curIt; - } - - long long intRepr = std::ranges::fold_left(takenNumbers, 0, [](long long x, long long y) -> long long{ - return (x*10) + y; - }); - return intRepr; -} - -auto calculateJoltageP2_Optimized(const std::vector& bank) -> long long { - const int TO_TAKE = 12; - - if (bank.size() < TO_TAKE) { return 0; } - - long long result = 0; - auto current_start = bank.begin(); - - for (int i = 0; i < TO_TAKE; ++i) { - - - int items_needed_after_this = (TO_TAKE - 1) - i; - auto search_end = bank.end() - items_needed_after_this; - - auto max_it = std::max_element(current_start, search_end); - - result = (result * 10) + *max_it; - - current_start = max_it + 1; - } - - return result; -} - -auto countJoltagesP2(const std::vector>& banks) { - long totalJoltage{}; - for(const auto& bank : banks){ - totalJoltage += calculateJoltageP2_Optimized(bank); - } - return totalJoltage; -} - -auto main() -> int { - - - auto testCase = parseBanks("test_input"); - if(testCase) { - //auto testResult = countJoltages(*testCase); - auto testResultP2 = countJoltagesP2(*testCase); - //std::println("P1 Testcase result: {}", testResult); - std::println("P2 Testcase result: {}", testResultP2); - } - else{ - std::print("{}\n", testCase.error()); - } - - - auto realPuzzle = parseBanks("puzzle_input"); - if(realPuzzle) { - //auto realResult = countJoltages(*realPuzzle); - auto realResultP2 = countJoltagesP2(*realPuzzle); - //std::println("P1 Real result: {}", realResult); - std::println("P2 Real result: {}", realResultP2); - } - else{ - std::print("{}\n", realPuzzle.error()); - } - - return 0; -} diff --git a/day3/puzzle_input b/day3/puzzle_input deleted file mode 100644 index f6136ac..0000000 --- a/day3/puzzle_input +++ /dev/null @@ -1,200 +0,0 @@ -1222222312332225132221222322223222212123112122221122321222132212122312222221212112222322211112122222 -1345446423422232333442846252125241622734244225359323445433441754253232142272634482426733122226243425 -4577785646656747466375765575483456466553659534557243455743516567366564563657487644966426447385374456 -8222241222244832332283327241231524722223244352322232213522125242245322283224432151246355541722522324 -5635743334524945473375734334333434335143733447653334825456648464763377423445683323144636458153553242 -3232232312232332323212122223223233223321211222211132312332324232222232322523312323232163333222323322 -2472322324223274543733231232327134352234642232134332324474422235367263242723634682312212321627217212 -2322173432233122122222222213121212122322122223443222342522222222251411222236234224413232123242322223 -3652868667537452366966235765333245635664416546663245643298725986543622252758383653626463865737627748 -3253353434242444324342234443345354345254334442434394133446153443846544445463344442443434235445352234 -5525553365254244555275437345525352655555522746447455432455324534325535325273245541464725355252535575 -2214425229352326112252442232322442223322421533421422132524224245252242545214333222331524435255222223 -2234124522332123154444451131323344345334231233643452432242214434344233242231242332234344421524422232 -3236463384444313444333424423252643421343424424235323434132354443426454435344525454443465344534334423 -4543423346942324444333211221223212242324282444324344223441284163344472232231533442334222493142444332 -2252414424434323225422335355623444534443242223425454222114434323343422333232215262245342315322124145 -2122646344333414322344334235233373362531215643422331422265651312416332422214424426224243324542223642 -3847153424154522215342336613544333655363532363224243424235531432231232223355334226233328533731422324 -4213313279221255132733337332676783336438397722223623627143243336265323866272222383326952231117437536 -3232133691332323342527227744573324433247223253622233171323332113722323235353712225334322234221572332 -3445335444436434327374244374433344434442444442144443444264833443473634342344644763335344533673334344 -6333292325523633354384344331338332264312366653353246484744834445326665525233525441397563944365838662 -1422232212232134233341212239222212422322511212211252221221221311232212122322342312122222212222232242 -4545663443455345754454364437755673136355444555752453744637424434742134442237535355363587654542364464 -3723323233422393333326837768263333265213832212132322233392861423235237313423222323336342333932322332 -2349332626622312523226252359247213331622422325232223293333234249496222352453182422439533232324235293 -3252554344223424221332333445133334222243533523322421453434312323722222434332343535223326331431344432 -3224323455245243765446462354444354565156446364328331212243352324112326343383442623343643333324452114 -2563171155451654324562512247376555764275624737724434776266221511514262446463627513517271167474535589 -2323221323223322223334221233241223231111213213212232232222332211322222532111222323231232322222332225 -7424783332616784611422874441346688443382343661511421287338824445411353727864326752163275477222364319 -3354533332333324343135355544433311324132422234444325333334323542434333323236543423444343227424343334 -3732574422333334533553366332367433652284326723242266162436673434447364637354732463774564353343333173 -4212223242312223221423321222214221222221122222221223322432331232222222224221234124112233123122123224 -3233434633732743545124537434234653353464343242543244546323364447233333572534344434245434343234545544 -2225242525223643221254336142222234373343222332224343332434265232343412424722166322326213372423448325 -2432322533332432732522234451432243624223143437138244633421392233224232322224425221313425321446222431 -2114424325322242324512124415314222144242143241432626422134224363342352224534344271233533532423443323 -3223224211211258211121421231242223222222212132732212251212221332224232244332223232225222224212212382 -1423131332321213313231313222233122533323233422232242231222232333331522222332121323333322232212122213 -5655554636456633545666665465556655366655654365545555366536746474736775544563574766645543646465536663 -3252755647445345577525346257335542222374212663671322343546264454567666534555544522382675823433726252 -3244651472243442224343562543518331333224445441454272421314953422141242425435544454532935313335535434 -2342333332321232221552333333344324343334632333232535253353445333332221242352242142233322232333422342 -2942122243614122123433252121292245182224241221326222442224135558253129224221315828732241442331372126 -2242122222421262311324444533242264443193322114222232212321121222333224312122336224333123333222223323 -2522362222253223782132236734313213411233672343453425332393384438633251253243217453314522213171123341 -3322333394423945242354443527243254144453523323423533223344254426635332443365444262334236433353624145 -5144363655544353445575456545535555553435557475538345539433254564335654546565526555535346264443556655 -4412333212122253112332322213222234222143332423432321112245112221351222222253323232332321222333225514 -3212222333233323121322222232232322322222242222321232223232232413312623341322221232223233333332222312 -4655445445664456554455544425246365545456565443544665558564474465663555525545635534355556553546655464 -2221222262232642433342264243612222222254241322526435265474324262242262225124422365221321532222154524 -2244433336631854623226311233223251314433322432662162666122313213414532223622223323213322546422123325 -4222312324252212332222243163152524432335321226244344335543522253343222457323243342432525242222421143 -2223412144354332412133131421325233214154422322322223722333232512232232222264544312122352221441252941 -2222221222122222231166235212214217222224221227372222222621824225245122264782122371422422335232432511 -2335334342152363523314422243422312212223332322222633242654124622542232252333244421322333332323523213 -3297973276668316426221924925275762549257228394533832343394336485363134743218173242447539267433384546 -2222222223241824142225222211232261221341411222325331212222124932222521262222262522322322312232224244 -5455444375585253144452424554354432563465462783446535754146493443556344763543324646447516433845365456 -7225186565757383564548236146446656162154835755533443468783467345345528846865233738243576443545572276 -2432421122244344436232458835283613273272427567343262433273623255234353365532232377243247762225352224 -2244342451422331233454232333223212312311311322383442232211321323342122213323223324312322143432432224 -2124143431323222541232225222831262336222224232324222152222213313222152232246222252241321243122532324 -1653932264143262633447653566243653172332634272456212343345236352214843653833315745321244346234693568 -4319388539655436758264786843998954433446458665333836836736414628834358479866434924575444337233445547 -2332231223223122222323232132233212233212234222222452122311132241223232332343322111312251321212322222 -4334224233223132312223235323241144632322423352522324241333313222232722243422222233322242332422321322 -7325143833445522342253575533545239454636574276452453545428245255572262258745258255454354382256551147 -4313428332343335133253313633363753222432332233333223332323723434364223323322222332332333222143433243 -5221121211554122623411335422212282122231242322432225222231274222222221214622142153252554222521322221 -2533453653533433392736235246324663763457254654283346375627342355332223273342643242236342734633533883 -2326222212232223211151222223272253222322312222113331222122322342232242222221222321122222222222222122 -3254324143436364232642544433433113754463332513334433382133427353556232328232343213563352335224252422 -5532336124222222122362223222331532245222452114229322142354133451222222225222222422222226346262114222 -3422333321332331222122212212122222323132213222333133332242415315232233334422222226223223122232712232 -6466753623243634686665566555555556355557555746645476598476241646166355284655667645578651566452676376 -2863222611313324322633232242323175743363253754241522221363826251688324435122232632233229595553333333 -2631233111213234235423624117353313342321331412232236313363532122713534332222638232343323223231252147 -5734565454654684242455752875976553556762545674431465458856453456455676355556642665623546935661758526 -2124241122142243325226342626232322442222331225222322441223224222113141221341221222322323222244512242 -3323363333335333333533333422153533332323343333133353333233355132623333243333333333323233333543434323 -4545332344521233543441821132432217333232244232243441433422234235444144223344442436353342244242813642 -2245923758623329723677234255242626666247532456252435328826343327323255732266648272923456765867424523 -4242291532296955862224621235693222398688563224642267272435923551221826272762227694597582694864322741 -4525587925524756326254523845567633246353344322646355766862772549423535466234795457673626979237357587 -3524846433553444343353453444363434435434444454344343344923334445343344335673454342334443344434442233 -8632541534343456944443234544136653215426833324325564653222554352446552339454613554345351352224452552 -4146136335256231436411256352635624365143261533236364343154432523235115664366615642155165465254523789 -3337736245234343333623443435363723345343534343634383323443536464133443524362323475553435333373454234 -2243332223561223133313332632353167233512223321222222262373312353422337333224222222331224233222322332 -3342542757535443656354333347363535753345534333748323566223343397533576647364333799332452333497334735 -6214212222222221221722423222282233322221321322232114725542222222324222214326272222322112112122323232 -4566422331332323636343525522334543323323224333366434353355255332433333323327323333533336353233313345 -4934444334224443372221124142644262554522744457423252263443334244444343254241357354442425444244434244 -3533348344333432323395883523342323533555649546624154416673456585151454523532567353929363642354224842 -3272221132643232822215223335523322212622393333432322222322423233132324328323223322951223334322323233 -2112622221212122222321221212422211222332251223332222363313122222322111321112324232722228272121113129 -3232523113123332333334231322321314263322131442422331323231323235332235325362312423223322534321321132 -9358556673766458329644599557567935658745257592867335543536146444655376355865957353876686234678366352 -5242223355523353224244441422243464324293371233324331534321421331422266422544235333234323433212338322 -4653544535233343446354247333541445343474243434444143415343444434446434444524374336434443343444554245 -3235533232523263225253363754561433453672725343534134563353661342643372341354333546566443434572133646 -3137934345454194326447323243223235254632424543945232242332331273362453447323238335823314153439633343 -2331232412262312322342322325313227322221622222176124215422231242122332221321222252713422217762621322 -3515124353432543135154424243432114341133552541554315213344351351553141444244535355115221354215426789 -2222222222223121112432132623144222214132252223222312331222222222221322222211222124322222181222234332 -2733222222212122218223325243113392232212227226222111241242232222212321223224322112232132222333321222 -7423253663522632216327236216426125525225336622341265352432225232222342252128632248522882222244423223 -5656839457566364549863875929783786563887555255788384646782785655752768663427235647423543444667545663 -2244224173242422144239447473244346231442242229441244124422561238512214226319427848248254394249239222 -3134324244123434411111341421211242342343321332244231123443213414121333144312141321414144241432456789 -2123222222532222331122223122122232122222282222352223152332321231223233322132223233212512221222222222 -3433337723687313343343341333333232233143333333333444326633324332322344333435732373333339332334344633 -4734552425421133624242225432756414442452344421683389322143423264864536194533224324143235262457432334 -5743642663548353363383344322233736237347332333663496653345433667377423173776724473546743337486434338 -6745464734746655363746438358445664347243384434547446379696644668564594954298936645584647643645765174 -5562557343335352722313258363233214252223526572225225223224641266122232332222116335672252525223512224 -5324226433351356545237253335433342535112223443325322434552591322233564453223344426491342444723513325 -2822323232432122331246221323232343332554293136122333138422323347433214333342132232242221233462232312 -3553334326333124133333333443313223333332333321325323333333423333324131233344332433233325343333334332 -3553328424442352323424221244423162245575433454736413256577364757365434564463335553523652256352344234 -4333423333322333233333331436323413243123352333623334333532342324242332521353623132232333533142332332 -2222235323113243332323253332263323232313333332332325333223422233223322242333123343333132222223333232 -5432334223333385363332322423354481633343433663433346341253542549375343333235363317433343343345273233 -1211122221212523421414252524222232212242522223222173212122222222233222251223212432122221222222232222 -5555341373369287553554338535578346252454585441333387475853443447548553955539636382737338684853648324 -3444423436833333536435333469436413441544344643358423523832535336444252855433235443347434334335334353 -4652433245373392351734541444434543592364584448349324446637446349426369323434633725425423434523353232 -1613212122723622242278212221272232412222223221222123223141422438212222321217383212222222524151328272 -2322312221422422243251342312132233222332232522132292212222421416224432224454211322142523242421242213 -2453552449355335353333455534312653322433129233223542244232317324523453324362443644654232245354535355 -3223432424314542311234346543245354543943325442344248556333321343354834323744433333325273223323236444 -3273322242922222234141213432233322333233323233223332331233321362321232132213232213221182122223213132 -4321354552542622325322616522523522526222253343721322354523641942223223225346435225323225616272146222 -2222132222222314211222121112121222222422412332512312212238221233253221213322222225231322322222223212 -3625623123174243241432662232234224452322223242162366253323442226423214114235521213214745343323445724 -2533233634253623433464437438242224623365332366323247348625873244236133936564534554336313622223133233 -8878788898777877487699888978898898777977877887887878896888888878889887889848788977988888888887598668 -3322373372422425244333245533554547334164541333434725333551323235552289432536533452254363344345231312 -1432436353334323233332333434434434433424332432323444344144364343344333333323243543333323344433453343 -3321443243342233121332332324222232332123333322232343123332343442222335114332322333333322212213223233 -2532352313412243222233523334241232345232323333312424323324232228332434414314322322135333233423343333 -6656264513224552455562413226315265366634632353552262256444251544424652563522513324454612351466422455 -3352334352963332363533134343333333333331733354223333334623335333332333343273513443333313333335523354 -7234732263333313357336744324735447533332634323323355352393353854644514337353133337532334948735433414 -8448646669263527951633858664544365767593846387636872455643647447578868665723215245346326842854666246 -2221322254222333253532212133222723212212241322223221222224323212222221222212121223111222231222211262 -1311333211332114227262347322122123232233222342227242633244212241214232121232342233132332222333228342 -2433433332444244212341442233154233443534424344443252433444434434432444323414342412342522233224444234 -2332233231464331642112543243233233321333362333542212223229243331222423322623331222724383423154246213 -3685536668666666766346582753666677876666572767446566666855463675556368366662476666652966456454677355 -1542215351142422327152324432222223322261222322114323522354322122262433432214242222241414222323352726 -3343413121222324251423224222122622143221233122324132222222421215121222412121412525311221242124252342 -2431163523214342142332232422413226164322332525241262222322223244236132224241222224224214264235323172 -8772463943137885373335252784576835477612752314166627355584276345334339636258711682416362866626727333 -1222222221421213222122273213222222222122622122225312225221122222132122322645422222621635224223112215 -3532213535352425264677454321235222442623242524167515217734513234215222242343961435525732355576335421 -3223214224342353422322222841224212214234222222933232633222455122323445332223455222223342651232421224 -7115343354233333232372323253132342221232232311226422321722136322525334224424223223321312222223333232 -4357663662356634546546765162524356556634434553343632666244395322153624565646225555345655566333465356 -2434343323323343342133252224322722324433333334422225233327143133352225134332374235484355434423321374 -1222252522232132523226226225267532752122243221523212222122224321337666223242631221222122242226252622 -2327332235127463626626621337227622858425364527752132212321323245321645326236343171423221625251761627 -5143312422222264523313532221243252242262241221552323712434423533212231135242225373522222333252243414 -2233873448923333213233237234315234232333333433353463333123337333633333332733322355224533333773372694 -6342346344334456623423254555234952146436432456242565674356553445434543524446245423534532524355535842 -3231222524241322342342223321233231332222634322332314231223212323232436223372353212431121252233352322 -4333335332232322233333231333232333333332354364223353434331233243323223533253632332333623513123322312 -2212212222223222321121322222321125232226121222222322222224221222222222322222221221222221232511212222 -3122221222121222544224224252252241122232222112223323231212134233131122224112214222225212222122232422 -3211356356222122215133526332233222322311255422224221241321336132223233242237246223926142867353622623 -2331443223411422242214536224213122324724332231312222222234322331132333313232222232322442631342122212 -2221335223943374316123324235452224332232224324331562434433253432121353332529322122244445424445254222 -6573934424747346565665565666563655546652665666364255554665696265663763456632338556367633652946366667 -2121122324322222212122232125111223322232124363222232311432332233211222312223313321232212213421322232 -5255884695277765342363572543544553876324623533752442343727423412433746382453326451584533733454633395 -3638831234162153683163343733723333358337317391373322323532733343162133633642433523433237486722337372 -1223333523332243233132232332232223335335322323525322321334253333332323332533333517335353454323533223 -4341437444333434323332333383423324432334353314128323534343344343334432154544343354162334333334354223 -3226222346642252223631222337433121222224221622216145222252232446252342322122222234222322222325222341 -2322154512252221221222213714342421221422226227211322247212222252224232222312312223421222234221532221 -4277666476564646666636626617632542654642124484356434552454644676322636365366654435524567623648665645 -4326224251324511325445265235322123123134324131225323445323442349342222222355534412243223435424754223 -2322222132112221222122212212222522252222722242222224214422222223264222222222252222233222222221112222 -2324232122242332222222242221332221213324334323232222412222222222222222224223222142222212222212321212 -5311236232323322323422313262214232324232532322334323342351243423323223336232323332331123223222222212 -3266355733331546543725353338633394673355295863352513444433679544569528558382293953841353213138855383 -5221322222122222722222362222222112747121221212222222331224721222422242221825322222252212222222517222 -1225242246213315532223222232331732223421223323116522132322122232231532233133121222822222462132133232 -2221326812226423812362221223211116525411823421279171513527321224217226242124244542225824262212224351 -4453425564443325353335233324434534363336223333422622636323343533343244433436456533432334323233334362 -3224232512141532361423211324223522252221342256222223212234123221322422322242321222232222247422253222 -6125122313322332232213332221223133535333332422313523321243243222232215243223221535432223335333234523 -1351678243754931425378943558344359229876853933447853352374345385533544635655973754647345363157934433 -4244122244422342343123435242374137343342123432243334242222123211312232244453344324374231231324554252 -2322353332422513334235125325633252242233252413323412222522323325155334324223233211523224223352123324 -5313436256323342326122534332142462233522466423222235523454546145825561325814532466226535435225486422 -5434443545444364645323442442456213744146245265734444415252259444643332333464442244443545345639431334 diff --git a/day3/test_input b/day3/test_input deleted file mode 100644 index a7353bc..0000000 --- a/day3/test_input +++ /dev/null @@ -1,4 +0,0 @@ -818181911112111 -987654321111111 -811111111111119 -234234234234278 \ No newline at end of file diff --git a/day4/CMakeLists.txt b/day4/CMakeLists.txt deleted file mode 100644 index bfeffed..0000000 --- a/day4/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ - # Use top-level helper to add the target and copy input files - aoc_add_day(day4 "${CMAKE_CURRENT_SOURCE_DIR}" main.cpp) \ No newline at end of file diff --git a/day4/main.cpp b/day4/main.cpp deleted file mode 100644 index 572cb64..0000000 --- a/day4/main.cpp +++ /dev/null @@ -1,166 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -struct Diagram { - std::vector data; - size_t width; - size_t height; - - using GridView = std::mdspan>; - - auto grid() { return GridView(data.data(), height, width); } -}; - -namespace { -auto printMap(Diagram &diagram) { - auto grid = diagram.grid(); - for (auto row = 0UZ; row != grid.extent(0); row++) { - for (auto col = 0UZ; col != grid.extent(1); col++) { - std::print("{}", grid[row, col]); - } - std::println(); - } - // std::println("Map: {}", diagram.data); - std::println("Width: {}", diagram.width); - std::println("Height: {}", diagram.height); -} -auto parseMap(const std::string &filename) -> std::expected { - std::ifstream inputF{filename}; - - if (!inputF) { - return std::unexpected{"Some file open error.\n"}; - } - Diagram diagram{}; - - std::string puzzleLine{}; - while (std::getline(inputF, puzzleLine)) { - // std::println("{:3}: {}", diagram.height, puzzleLine); - diagram.data.push_back(0); - diagram.data.append_range(puzzleLine | std::views::transform([](char c) -> int { return c == '.' ? 0 : 1; })); - diagram.data.push_back(0); - diagram.height++; - - // ugly - diagram.width = puzzleLine.length() + 2; - } - - // also ugly, bound it with 0s - diagram.data.append_range(std::vector(diagram.width, 0)); - diagram.data.insert_range(diagram.data.begin(), std::vector(diagram.width, 0)); - diagram.height += 2; - - // printMap(diagram); - // auto ms2 = std::mdspan(diagram.data.data(), diagram.width, diagram.height); - return std::move(diagram); -} - -auto countMovablePaper(Diagram &diagram) -> long { - long nMovablePaper{}; - auto grid = diagram.grid(); - for (auto row = 1UZ; row != grid.extent(0) - 1; row++) { - for (auto col = 1UZ; col != grid.extent(1) - 1; col++) { - - if (grid[row, col] == 1) { - // std::print("checking [{},{}]:", row, col); - // shitty kernel - int upLeft = grid[row - 1, col - 1]; - int up = grid[row - 1, col]; - int upRight = grid[row - 1, col + 1]; - - int left = grid[row, col - 1]; - int right = grid[row, col + 1]; - - int downLeft = grid[row + 1, col - 1]; - int down = grid[row + 1, col]; - int downRight = grid[row + 1, col + 1]; - - // caveman shit - if ((upLeft + up + upRight + left + right + downLeft + down + downRight) < 4) { - - // std::println("Found"); - nMovablePaper++; - } - } - // std::println(); - } - } - return nMovablePaper; -} - -auto moveMoveablePaper(Diagram &diagram) -> long { - long totalPaperRemoved{}; - - auto grid = diagram.grid(); - constexpr std::array, 8> offsets = { - {{-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1}}}; - - while (true) { - long currentPaperRemoved = 0; - for (auto row = 1UZ; row != grid.extent(0) - 1; row++) { - for (auto col = 1UZ; col != grid.extent(1) - 1; col++) { - if (grid[row, col] != 1) { - continue; - } - // std::print("checking [{},{}]:", row, col); - - // shitty kernal - int neighbors{0}; - for (auto [dr, dc] : offsets) { - // mdspan allows [x, y] indexing natively - neighbors += grid[row + dr, col + dc]; - } - - if (neighbors < 4) { - grid[row, col] = 0; - // std::println("Found"); - currentPaperRemoved++; - } - } - // std::println(); - } - - if (currentPaperRemoved == 0) { - std::println("Didn't remove any more paper this iteration! Stopping."); - break; - } - totalPaperRemoved += currentPaperRemoved; - // printMap(diagram); - } - - return totalPaperRemoved; -} -} // namespace -auto main() -> int { - auto testCase = parseMap("test_input"); - if (testCase) { - - // auto testResult = countMovablePaper(*testCase); - // std::println("P1 Testcase result: {}", testResult); - - auto testResultP2 = moveMoveablePaper(*testCase); - std::println("P2 Testcase result: {}", testResultP2); - } else { - std::print("{}\n", testCase.error()); - } - - auto realPuzzle = parseMap("puzzle_input"); - if (realPuzzle) { - // auto realResult = countMovablePaper(*realPuzzle); - // std::println("P1 Real result: {}", realResult); - - auto realResultP2 = moveMoveablePaper(*realPuzzle); - std::println("P2 Real result: {}", realResultP2); - } else { - std::print("{}\n", realPuzzle.error()); - } - - return 0; -} diff --git a/day4/puzzle_input b/day4/puzzle_input deleted file mode 100644 index 37b8d1c..0000000 --- a/day4/puzzle_input +++ /dev/null @@ -1,137 +0,0 @@ -.@@@.@@@@@.@@.@@@@.@@@@.@@@@..@@@@.@@@...@@@@.@.@@.@@@.@@@@@@@@@...@.@@@@@@..@..@@@.@@@.@@.@@@@@@.@@@@.@..@@@@@.@@@....@@@@@@..@.@@.@.@@@ -@@.@@@@.@.@@.@@...@.@..@@.@.@.@....@.@@@.@@.@.......@@..@.@..@@@@@.@@.@..@@....@@@.@@@.@@@@...@.@.@@.@@@.@@@@@@@@@@..@.@@.@@.@.@@..@@@... -@..@..@@@@@@@.@@@@.@.@@.@@..@@.@@@@@@@@@@@@@@@@@@@.@.@@...@.@..@@@@.@@.@..@@@@@.@@@@..@@.@@@@@@@..@.@@@@@@@@@@@..@@@@.@@@.@@.@@@...@@.@@@ -@@@.@@@@@@..@@@@.@@@@@@...@..@@@@.@..@.@@..@@@@..@@@.@@@..@.@@@@....@.@@@..@@.@.@.@@..@@@@@@.@@...@..@@@@@@@@@@.@@@@@...@..@@@.@@..@@@.@. -.@@@@@@.@@.@..@.@@.@@@@@@@@@@@@@@@@@@@@@.@@@@@@@.@@.@..@@@@@...@@@.@@@@.@..@@@...@..@@.@@@@@@..@@@@@.@...@@.@.@@......@..@@@@.@..@.@@@.@. -@@@@.@@@@.@@@.@@..@.@.@@..@@.@@@@....@.@@.@@.@@@@@.@@@.@@@@@@@.@.@..@@@@@@@@@.@@@@@@@@..@.@@@@@..@.@@.@.@.@...@@@.@@@@@..@....@@@@.@.@@@@ -@@@@@@@@..@@@..@@@@@@@.@@@@..@@@.@..@@@.@...@..@..@@.@.@@@.@.@@...@@...@.@.@..@@@@...@@..@@.@@.@...@@@..@@@@.@@.@..@@@.@@@.@..@..@@.@...@ -.@@.@@@@@@@@..@@@@@@.@@.@..@.@.@@@.@@@@.@@.@@...@@@.@@.@@..@@..@.@.@@@..@@.@@@@....@.@..@@@@.@@@@@.@@@..@@..@..@.@.@@.@@@@..@@...@@@.@@@@ -@@@@@@.@.@@@@@@@...@@@@@@.@@.@@@@@.@..@@@@..@@@@@@.@@@@..@@.@@.@@@..@@@.@@@@@@@...@@@@@.@.@.@.@@@@@@.@@@@@@@@@.@..@@@@@@@@.@.@@.@@.@.@@@. -@...@@@@@@@@@@@@.@@@......@@@.@.@.@.@@.@@..@@@@@.@@@@@.@@.@....@@@.@.@@@@@@@@@...@@@@.@@@..@@@.@@..@@@@...@.@..@@@...@.@@..@..@.@@@@@..@. -@@.@@@....@@@.@@@@@.@@@.@@@@.@@@@.@@@@@.@@@.@@.@..@.@@@@..@...@.@@@@@...@@.@@..@..@@.@.@@.@@@@.@@.@.@.@@.@@@.@@@@@@@@@@@@@@..@..@@@..@@@. -@..@.@@.@@@@.@@.@@@@..@@@@..@@.@@.@..@.@@@@@.@..@.@..@@@.@@.@@@..@@.@.@@@@@@@@.@@@.@@@.@@@.@@@@.@@...@@@.@.@@.@@..@@..@.@.@@.@@@...@@@@@@ -@@@.@@@@.@@.@@@.@@@@.@@@.@@@.@@@@.@@@@@@....@@@...@@.@.@.@.@@@.@.@@@....@.@@@@@..@@@@@@@.@..@@@.@..@@@@.@@@.@@@@@@.@.@..@@@@@@@@@@..@@@@. -.@@.@..@.@.@@@.@@@@.@@@@@.@@@.@@@@@@...@@@@..@@@.@@@.@@.@@.@@..@.@@..@@@@.@@@@.@@@@@@.@..@.@.@@@....@@..@@@@@.....@@@.@.@@.@@@.@.@@..@@.. -.@@@@.@@@@....@.@@.@@..@@@.@@..@.@..@@.@@@.@.@@@..@...@.@..@@.@@@@.@.@.@@@..@@@.@@@@.@@@@.@.@@@@@@@@.@.@@..@.@@@@.@.@@.@.@.@...@.@@@@@... -@@@@..@@.@@@..@...@@..@@@@.@@.@.@..@.@.@@@@@.@.@@.@@@@..@@@..@.@@@@@@...@.@.@@@@..@@...@..@@@.@..@@@@@@@.@@@@.@@@@..@...@@@.....@@....@.@ -@@.@@.@@@@@@@.@.@.@.@..@@@@.@@@@...@...@@.@..@..@@.@.@.@.@.@@@@@@@@..@@.@@@@@@@@..@@@@.@@@...@.....@@.@.@.@.@@@@.@@@@..@..@.....@@@@.@@@@ -@@@@@@@@.@@@@..@@@@@@@@@.@@@..@@.@@@@@@.@@@.@@.@@@@@@@@..@@.@@.@.@@.@@@.@@.@@....@@.@.@.@@@.@@.@..@@@@.@.@@@@@..@@@.@@@@@@@@@@@...@@...@@ -.@@..@@@@@.@@@@@.@@.@..@@@..@@@@@@@@..@@....@@.@.@@@@@.@@@.@@@@..@..@@...@.@@@.@@@.@@..@@@@.@.@@@@...@.@.@@.@@..@@@@@@@@@.@@..@.@@@.@@@@@ -@.@@.@@.@..@.@@@@.@@@@.@@..@@.@.@...@@@@@@@@@..@@@@.@@@@@.@@.@@@@.@@@@@.@@.@.@@@.@...@@.@..@@@...@@@...@@@@@.@.@@@.@@@@..@@@@..@@@.@@@@@. -@@@..@@.@@@@@@@@@.@@@.@@@@@.@.@@@@.@.@.@@@@.@.@.@@.@.@@..@@@..@@@..@.@@.@@..@.@.@@@@..@..@.@@@@@@@@@@@...@.@@....@.@..@@..@@.@..@.@@@@@.. -@.@.@@@@@@@.@.@.@@@.@@.@@@@@@@@@@@.@@@@@.@..@@@@@@@..@@@@@.@.@@@..@@@@@.@..@@..@.@@@@@@@.@@@..@.@@@.@@@@.@@.@@.@@@@@@..@@@.@@.@..@@@@.@@. -.@.@@@@@@...@@@.@@@@.@@@@@@@@@@@.@@@@.@@@@.@@.@@...@@...@@@@.@..@@@@.@@...@.@..@@@@@@.@@@@.@.@@...@@@.@.@..@.@.@@@@.@@@....@@@@.@@.@.@@.. -@..@@@...@....@@@@@@@.@@.@@@@@@@.@@@@@@.@@@.@@@.@..@@.@@@.@.@@.@.@@@@@@@@@@.@@@@.@@@@@.@@.@..@@@@.@@..@..@...@@@..@.@...@..@@@@.@@@.@@@@@ -.@@..@..@...@@@@..@.@.@@...@.@@@@@.@@@@@.@@@...@.@..@@@..@.@..@....@@.@@.@@@@@@@.@.@@@.@@@@@.@@@.@@@.@.@@@@.@@@@@@@.@@@@@@@..@...@@.@.@@@ -@@@@@@.@@@@...@.@@@...@@@.@@.@@@..@@@.@.@@...@@@.....@@@.@@@@.@@@@.@.@@@.@@@@@...@@.@@.@@@.@@@@@@.@@@@.@@.@@@@@@@@@@@..@.@@.@@@@@.@@.@@@@ -.@.@@@@.@@@@@@@.@@..@@@@@@@@....@@@...@@..@.@@@.@@.@.@.@@@@..@@...@.@@@@.@...@..@@..@@@.@@@@.@.@@@....@..@@.@@@@@@...@@@@@@@..@@@..@.@@.@ -@@.@.@@@@@...@@@@@.@.@@@@@@.@@@@.@@..@@......@.@@@..@..@@@@@@.@@@@@@@.@..@@@@@@@@@@.@@@@@..@@@@...@.@@@.@@@@@.@..@@@@.@@@@@@.@@@@.@@@@... -@@.@.@..@.@@@@@@@.@.@@.@..@@@@@@...@@@@.@@@@@@@@.@@@@@@@.@@.@@@@@.@@@@.@@.@@@@...@.@.@@.@.@..@@@@@.@.@@.@@@@@@@.@..@@..@@.@@..@..@.@@@.@. -@@.@@@@@@...@@@@@@@..@.@@@.@..@...@@@.@@..@@@.@.@@.@@@@@........@@.@@.@.@.@.@@@@@@@@@@@.@.@@.@@@@@@@.@.@@@.@@@.@@@@@.@@.@@..@@..@@.@@@@.@ -..@.@@.@@..@.@@..@@@@@.@@.@@@@..@.@.@@@@@@.@@@.@@@@@@..@.@@@@@@.@.@@@@@@.@.@.@@@@@@.@@..@.@.@@@@.@.@@@.@..@@@.@@@@.@@.....@.@.@.....@@@@. -.@@@@.@@@@@.@@.@@@@@@.@@@.@@@...@@.@.@@.@@@@@@....@@@@.@@.@@.@@.@@@@.@@.@@@@@...@@@@@.@@@@@..@..@@@@....@@@@..@.@@@@@.@.@@..@..@..@@@@@@. -@@@@@@.@.@@@..@..@@@.@@@.@..@.@@@@@@@@@@@.@.@@@@@..@@@.@..@@.@@....@@@.@@.@....@@@@@@@.@@.@@@@.@.@.@@..@.@@@@@...@.@@@@@@...@@..@.@@@@@.. -@.@@@@@@.@.@.@.@@@..@@@@@.@@@.@@@@@..@.@.@@.@@.@@@.@@@@@@@@.@.@@@@@@.@@@@.@@.@@.@@.@.@@@@@@@@.@@.@@.@@.@@@@@@@@..@@@@..@@@......@@..@.@@@ -.@@@@@.@@@@.@@@@@@.@@.@@@@.@@.@@@@.@.@@.@.@@@@@...@.@.@@@.@@@@@@.@@..@@@@@@@@@@@.@@@@.@@@..@@@@@@..@.@@@@.@@@.@.@@.@@.@@@@@@..@.@..@.@... -.@@....@.@.@.@@@.@@.@@@@@@@..@..@@..@@@....@....@@....@.@@.@.@@.@@@@@@@@@@@@..@.@@@@@.@.@@@@..@.@.@@.@@@@@..@@@@@@@@@.@.@@..@@@@..@@@..@@ -@..@@@@@@.@@@@.@@@.@..@.@@@@.@@.@@@@@.@@.@.@@@@@@@..@..@.@@.@.@@..@@..@@@@@.@@@.@@@..@@@@@@@.@@@@@.@@.@@@@@@@@@@.@@@.@.@@@@@.@@@@@.@@..@@ -@@.@..@.@@@@@.....@@.@@@@@@.@@@.@..@@@.@@@@.@@@..@.@@..@.@...@@@@@@@@.@@.@@..@@@@@.@@@@.@@.@..@@@.@@@@@@@@@...@@@@.@@@@@@@@@@.@@@@..@@@.@ -@..@@@@.@.@@...@@@@..@@@.@@@@.@..@.@...@@@@@..@@@.@@@.@..@@..@@@@@@@.@@...@@.@@@@@.@.....@@@..@@...@.@....@@....@@@@@@@@@@@..@@@@@.@@@.@@ -..@.....@@.@@@@@.@.@@@@@@.@@..@..@@..@@.@@@.@@.@.@@.@@@@@@.@@.@@@.@@@@...@.@.@.@@.@.@@..@@.@@@@..@@@@@.@.@.@@@@@.@@@@@@@.@@@@@@.@@@@.@@.. -.@..@@@@@@@@@@.@.@.@.@@@.@@.@@@@@@@@@@.@@@.@.@...@.@@.@@@.@...@@.@@@@@@@.@@@.@@@...@@@.@@.@@@.@@@@@@@..@@....@.@.@@.@@@@.@.@.@@@.@@@@..@@ -@.@....@@@@.@@.@.@@@@..@@@.@@.@@@@..@@@@@@..@@.@...@...@@@@@.@@@@@.@.@.@.@.@@.@@.@.@.@@..@.@@@.@@@.@...@@@.@.@@..@@@..@@...@@@@@@@@@@@.@. -@@@@.@.@@..@@.@..@@@@@@..@@....@..@@@@@@.@@...@@@@.@@@@.....@.@@.@.@@@@@@..@@.@...@..@@.@@@@@@.@@.@@@..@@@@@.@@@@@..@@.@@@.@@@@@@@..@@@@@ -..@.@@@@@@.@.@.@@@.@@.@@@@@@..@.@.@.@@.@@@.@@@@...@@.@@.@.@@@..@@.@.@.@@@.@@@..@@@@@@@@@@@@.@@@@@@@@@@..@.@.@.@@@@@@@@@@@@.@@.@@.@.@.@@@@ -.@..@@@@@.@..@@@.@@@@@@@..@@.@@...@@.@@@@@@@@@@..@.@@.@@.@@@@@@@...@@@.@.@@@.@@@@.@@@@@.@.@@.@.@@@@..@@@..@..@@@.@@@.@@.@.@@@@@@.@@@@@.@. -...@@.@@@..@@@@.@@@.@..@@@@@.@@@.@.@@.@@.@.@@@@....@@.@@..@@@.@@@..@.@@....@@.@@@@@@@@@@.@@@@.@@..@..@@@..@.....@..@..@@@@@@@.@@@@@@@.@@@ -@@@@.@..@@@.@..@.@.@...@@@..@@@.@.@..@@.@@@..@@@@@@..@.@.....@.@@@@@.@@.@@@@.@@@@@@@@.@@@@@@@@@@...@.@@@.@.@@@@.@..@@.@@.@@@@.@@@@..@@.@. -@..@....@@@..@@@@@@@@@..@@@@@@@@.@.@@@@@@@@@@.@.@@@@...@@.@@@@@@...@.@.@@@....@@...@@@@@.@..@@.@.@@.@@.@.@.@@@.@@@@@@@.@@.@@@.@@@.@.@@@@. -@.@.@@@@.@...@@.@@@@.@@@..@@@.@@.@.@.@@.@@@.@@.@@....@@@@.@@@@.@.@.@.@@@@..@@.@@....@@@@@.@@@@@.@..@@@@.@.@@..@.@@@@.....@.@.@@@@@@.@@@@@ -.@.@@@@.@...@@@.@@@.@@.@..@@@@.@@.@@@..@@@@..@.@@@@.@@..@@@@.@.@@.@@@.@@@..@@@@@.@@@@@@@@@.@@@.@@@..@.@.@.@@@.@..@@@..@...@..@...@.@...@@ -@@@@@@@.@@.@.@.@@@.@@.@@@.@....@@.@@.@.@@@.@.@@.@.@@.@@@.@@@@@@@@@...@@.@.@@.@@..@.@@@..@..@.@..@@@@@@..@.@.@@@@@@.@@@...@@@@.@@.@@@@.@@. -@.@@@@..@.@.@.@.@@.@.@@@.@@@@..@@.@.@@@.@@@.@@@@@@@@.@.@@@@..@....@@..@@.@@..@@@@.@@.@@@@..@@@@...@@.@@@@@.@.@@@@.@@..@@@@@.@@@..@@@@.@@@ -@@..@@.@@@.@..@..@@@.@@...@@@@@@@@@@.@..@.@.@@@@@.@@@@.@@@@@@.@@...@.....@@@@.@@@@@@@@@.......@@@.@@.@@..@@@@.@@@@..@@@@@@..@@..@@@@@@.@@ -..@@@@@.@.@@@@@@@@@....@@.@.@.@.@@@....@@.....@.@@@@@@@@.@.@.@@@..@@@.@@.@@.@@@...@@@..@@..@@@.@@@@@@@.@@@@.@@....@@@@@..@..@@@.@.@...@@@ -@@@@@@..@...@.@..@@@....@.@@@@@@@@.@.@@@.@@@@@@@@@.@@@.@@.@@..@.@@.@...@.@@@@.@@@@@@.@@@@@.@.@@.@@.@@@.@.@@@@.@@@@.@@.@@.@.@@.@..@@.@@@@@ -@..@@.@.@@@@@.@....@@..@@@@@@@@.@@@@@@..@@@..@...@.@@@..@.@.@@.@@.....@.@...@@@@.@@.@.@@.@.@@@@.@@.@@.@@@.@@.@..@@@.@.@@@@..@@..@@.@@.... -.@@.@.@@@@@@@@@..@.@@@.@@@@@.@@@.@.@@@@@..@@@@.@@@@@.@@@@@@@@@@.@.@@@@.@@.@.@@@@.@@@@@@@@..@@@..@@.@@.@@@.@.@.@@..@@@.@.@@@@.@@@.@@@.@@@. -@@@..@.@@.@@@..@@...@..@@@@@@@@@@@.....@.@@..@@.@.@..@@@@.@@.@...@@@.@@@@..@@@@..@.@@@.@@@@@@@.@.@@..@@@@@@@@@@@@.@.@@...@@@@@.@@@......@ -@@@@.@@@@@@.@@.@...@@@...@@@@...@.@.@@.@.@@..@@..@@@.@@.@@.@@@.....@@@@@.@..@@@...@.....@@@@@.@@.@@.@@.@.@.@@@@@@@@.@.@.@.@@@@@@@.@@..@@. -@@.@@@..@@..@@..@@@@@@@@@@@..@.@@...@..@@@@@.@@.@...@@@@..@@@.@@@@.@@@..@@.@@....@@..@@@@.@@@@.@@..@@@@.@@@.@..@@@@..@....@@...@@@@@@@@.. -.@.@.@@@..@..@@.@.@@@@@@..@@@@.@@@@....@@@@@@.@@.@@@.@.@@....@.@@.@@@.@.@@.@@.@@.@..@@@.@@@.@.@.@@@.@@@@@@.@..@@@..@.@..@@@@@@@@@@@@@@@@@ -..@@.@.@@.@@@@@.@@@@@@..@@@@@@.@.@.@@@..@@@@@@.@@@@@@@@...@@..@@@@@@@@@@..@@.@.@@.@@@@@..@.@@@@.@@@.@@@@@@@@.@@.@@@@.@..@@..@.@@..@@@@@@. -@..@.@@@@@@.@@@..@@..@@..@@..@@@@.@.@@.@@@@@.@..@@@@..@..@@.@@@@.@@@...@...@.@.@@.@@..@@.@@@@.@.@.@@@@.@.@..@@@.@@.@.@@.@@..@@@@@@@..@@@@ -@@.@@@@@.@@@.@@@..@@.@@..@.@@..@@@@.@@@..@..@@@@@@.@@@@.@.@@@@@@@.@..@@.@...@@...@@@@@...@@@@@@@.@@@@.@@.@@@@@@.@@@@@@@.@@.@..@@.@@@@@.@@ -@@@@@.@@....@@@.@@@.@.@.@.@@@@@@@@@@@@@.@@@@@@.@..@@@@@.@.@@.@.@@@@..@@@@.@@..@@..@.@@...@@.@.@@.@@@@@.@@.@@@@@@.@@.@.@...@..@..@@@@@@@@. -.@@@..@.@..@@@@@@.@@..@.@@@.@@@..@.@.@.@@@.@.@..@@@@@@.@@@@@.@@@.@@@@..@.@@.@@@@@@@...@@@.@@....@@.@@@..@.@.@@@@.@@@..@@@.@.@@..@..@@.@@@ -@@@.@@@@@@.@@@.@@@.@.@@@@.@@.@.@...@@.@.@.@@@...@@@.@..@@@@@@.@.@.@@@@@@@@@@@@..@@@@@.@@.@.@.@@@@..@@@@.@@..@..@....@.@@@.@..@@@@@..@@@@@ -@@.@..@@@..@@.@@@@@@@.@@.@..@@@.....@@@@.@@@.@.@@.@@..@@.@@@.@@.@@..@@@.@@@@.@@@@..@.@@.@.@@@@@@@.@@@..@.@.@@@@..@@..@@@@@@.@@.@@@@.@@@@. -@..@@@.@..@@.@@.@@.@.@.@@@.@..@@@@@.@@.@@......@@@.@@.@...@@@.......@@..@@...@@@@@.@@@@@@@...@@@@..@@..@.@@.@@@@@.@.@..@@@@@.@@@@@.@..@.@ -@@@.@.@.@@@@@.@.@@...@@@.@.@@@.@@@@@@.@@.@@.@@.@@@.@.@@.@@...@@@@@@@@@....@@@.@.@@.@..@@.@@@.@.@.@.@@@@@..@@@..@.@@.@.@@@@@.@.@@..@.@.@@@ -@.@@@@.@.@@@@@@.@.@.@@@@@@...@@@@..@@@.@..@.@@@@@@.@@@....@@@@.@.@@@@@.@@@.@@@@.@@@@@..@.@..@..@.@@@..@@..@..@.@@..@@..@..@@.@@@@......@@ -@.@@.@@@.@@@@@.@@@@@@.@@@@.@@@@@.@.@@.@.@@@.@.@....@.@@..@@@@@@.@.@..@..@@.@@@.@@@@....@@@.@@.@...@.@@@@.@@@@..@@@.@.@@@..@.@....@.@@@..@ -@...@..@..@@.@.@@@....@@@.@@@@@@@@@.@@.@@@@..@@.@.@@..@@..@@@@@...@@...@@@.@..@@.@@@@.@.....@.@.@@.@@@@@@.@.@@@@@@..@@.@.@@@..@.@...@@@@@ -.@@@@@...@.@@..@..@.@@@@@@....@@@@@@@@@@@@@@@@.@@@...@..@@.@..@@@@...@.@.@@@@..@.@@.@@.@.@@.@.@@.@.@.@@@@@@.@@@.@@..@.@@@@@..@@@@..@@@@.. -.@@@@@@@@.@.@@@@@@.@.@.@@@@.@@.@@.@.@@@.@@@..@.@@..@....@..@.@@...@@@@@@@@@@.@.@.@@@..@@@@@@.@@@@@.@@....@@@@@@@@@@.@.@..@@....@@@@@@@@.@ -@.@@@..@@@@.@.@@.@...@.@@..@.@@@@@@@.@@@.@@.@@.@..@@.@@@.@....@@@@..@.@.@..@@@@@@..@@@@@@@.@.@@@@@.@.@.@.@@.@....@@@..@@..@@@@.@@@.@@.... -.@.@.@@@.@@@@@@@@.@@@.@@.@@@.@@@@@@.@@..@.@@@@@@@@@@.....@@.@@@.@@@@@..@@@@.@@.@@.@@@@@@@.@@.....@..@@@@@@@@@@@@.@.@@@@@@.@@.@.@@@.@.@@.@ -@....@..@.@..@....@@.@@@.@@..@@.@@@@@.@@@@@@..@@@..@@.@...@....@.@..@.@@@@@@@...@@@@.@@@@@@@@@.@.@@..@@@@@@@@@.@..@.@@.@@@@@@@.@@@@..@@@. -@@@@@@.@.@@@@@@.@@..@@..@.@.@@.@.@.@@..@.@@..@@@.@@@@@@@@...@....@.@.@@@.@..@.@.@.@@.@...@@..@....@@.@.@@@@.@..@..@.@@.@@@@@@...@@@@@@@@. -@@..@@@.@@@@@@.@@@@.@@@@@...@@...@@..@@@@@..@@@.@@@.@.@@..@@..@@@@.@.@.@@@.@@@@.@@.@..@@...@.@@..@@.@.@@@@...@.@@@@@@@@..@@@@.@.@@@...@.@ -.@@@@..@.@@...@.@.@@@@@@@@..@@@.@@@@.@@..@..@..@.@@@.@.@.@@.@....@@.@..@@.@.@@..@.@@.@@@@.@@@@..@...@@@@.@@@@@.@@@.@@..@@@.@@@.@@@@@@@@@. -@@@@@@..@.@.@@@@@.@@@@@@..@@@@@.@@@@.@..@@@.@@@..@@....@.@@.@@@@@..@@.@.@@@@@.@.....@@@.@@@@.@..@@@.@@@@.@.@@.@@@@.@@@@..@@.@@.@@..@@@@@@ -@@@..@@.@....@@.@@....@@...@.@..@..@@@@@.@...@@...@.@@@@.@@..@@.@@@@@@@.@@@@@@.@@@@@..@@@@@@..@..@....@...@.@.@...@@@.@@@@.@@....@@..@@.. -@.@..@@.@@.@@@..@@@.@..@@..@..@@.@.@@@.@@@@@@@@.@..@.@@@...@@@@.@@@@@@...@.@@@@@@.@@@@@.@@@@@@@..@@@.@.@@@@@@@@@.@@@@...@.@@@@@.@@@@.@@.@ -@@.@@@..@.@@@@@@@@.@..@.@.@.@@@.@@.@@.@@@@...@@.@@@@@.@@@...@..@@..@@@.@@..@@@@@.@..@@@@@@@...@@.@.@@@@@@.@@@@@.@@@@.@.@@@@@@.@.@@@.@..@@ -.@.@.@@@..@.@.@.@@..@@@@@.@@@@@@@...@@@.@@@@@@.@@.@@.@@@@@.@.@@@.@...@.@@.@.@...@......@@@@@@@@@..@@...@@@@@.@@.@@@@..@@@@@@.@..@@@@@@@@@ -.@@@.@.@..@@@@.@@@@@.@@@.@@...@@@@..@@@@@.@@.@@@.@@@..@@@.@@@@..@.@.@@@@@@.@@@.@.@@@@@@.@@@.@@@.@@@.@@@..@..@.@@@@@@@@@..@@.@@@@.@@.@@@.. -.@..@..@.@@.@@.@@@@@@.@.@@@@.@..@.@..@.@..@@.@@..@@@.@.@.@.@..@..@.@@....@.@.@@@.@@@@@..@@@.@@.@@@@@@@@@@@@.@@@.@.@.@..@@@@@.@@@@@@@@@@@. -.@@.@@@@@@@.@...@@.@@@@....@....@@@.@.@.@@..@@....@.@@@.@...@.@@...@@..@@@.@..@@..@.@@.@@.@@.@@.@..@@@..@@.@.@@@@.@.@@@@@@.@@@@@@@@@@@.@@ -@@@.@@.@@@.@.@@@@@@@..@@@@@@@@..@@@.@@@@@.@@@@.@@@.@@@...@.@.@@@.@.@.@@@@@.@.@@.@@..@@@@.@@@@@@.@@..@@@@@@@@@@.@@@.@..@.@@@@@@@.@@@@@@@@. -@.@.@@@.@@@@@......@@@.@@.@.@@@@@.@@.@@..@.@@.@@....@@@@@@.@.@@.@...@@.@@@@.@@@@@@@@@@@@@@@@@.@...@@@@.@@@@@@@.@.@@@.@@.@@@...@.@@..@.@@@ -@..@@@@@@@@.@.@.@@@..@@@@@.@@..@.@@.@@@@@@@@@@.@@..@.@@..@.@@@@.@@.@@@.@@.@@@@@@.@@@..@.@@@@@@@@@..@.@@@.@@..@@@@@@@@.@@@@.@@@@@@.@..@@@@ -.@@@@.....@.@..@@@..@@.@@@@...@.@@@@@.@....@@@@@.@...@.@..@....@.@@@@.@@@@@@@..@@..@.@@@@@@.@.@@@@@..@.....@.@.@@@@@@@@@.@..@@.@..@..@.@@ -@@@.@@@.@..@@@@.@@..@@@@@.@@..@...@.@...@@@@....@@@.@@.@@@@..@@@@@.@@@@@@..@@@.@@@.@.@@@@@@@@.@@.@@.@.@.@@@.@.@@..@@@@..@@@@.@@.@@@.@@.@@ -..@@.@.@.@@@@@.@@@@.@.@.@....@@.@@.@@@.@@.@@.@@.@.@..@@@@...@..@.@@@.@.@..@@.@@@@.@@@.@@.@@@.@@.@@..@...@@..@..@@@..@.@@.@...@@@@@.@.@@.. -@@@@@.@@@@@@@@@@..@@.@@@....@@.@@@.@..@..@.@...@@@@@.@@.@@@.@.@.@@.@@.@..@@..@@@@@@@@.@..@@@.@.@@..@@@@@@@@.....@@.@@@.@@@@@..@......@@@@ -@@.....@....@@@@.@..@@@@.@@@.@@@@@@@@@...@@.@@..@..@.@.@@..@@@..@@@@@@@.@.@@@.@.@@@@.@.@.@@@.@@@@@.@@@.@..@..@@.@@@@@@@@@...@@@@.@.@.@@@@ -.@@@@..@.@@@.@.@.@@@@.@.@..@@.@@@@.@@@@@@@@@@@@@@@@.@.@@..@....@..@@@.@@@@@@@@.@@@@@.@@@@@.@.@@....@..@@@.@@..@....@@@@@@.@@@@....@@..@@@ -@@@.@.@@@@......@@...@.@.@@.@@@..@@@.@.@.@.@@@@@@.@@@.@@..@@@.@@@@....@@@@.@@@@..@@.@@@.@@@@.@@@@@@@.@@@..@@.@.@@.@.@@@@@..@@..@@..@.@@.@ -@..@@@@..@..@.@@@.@@@..@@@@@..@@.@@@.@.@..@..@@.@.@@@@@@@@@@.@@.@@..@..@@@.@@@.@@@@@....@@@..@@.@.@@@.@@.@@@.@@...@@..@.......@.@@@@@@.@. -@@.@@@@.@..@..@.@@@..@.@@@@@@.@.@..@..@.....@@@..@@@..@..@.@@.@@@.@.@@.@.@@.@....@@..@@@@@@@@@@@@...@@.@@@..@@.@@@@.@.@@..@@@@@@@.@@@.@@@ -@@@@@..@.@@@@@@...@.@@@@@.@@@.@@.@.@@@.@.@@.@@@@.@...@@@.@..@@.@@.@..@@@@.@.@@.@@@@..@@@@@@@.@@@@.@.@@@@...@.@@@@@@...@..@.@@@.@@....@.@@ -.@@.....@@@@@.@.....@@.@.@.@..@@.@..@@.@..@@.@.@.@@@@.@.@@@@@.@@@@@@.@..@.@.@@@@@@@@...@@@@.@@.@@@@@@@@@@@@.@@...@...@@.@@...@@.@.@@.@@@. -@....@@@@@.@..@..@..@@.....@@@@..@@.@..@@@@@@.@.@@@@@.@@@.@@..@@@.@...@@..@.@@@.@.@@..@....@.@@@..@@@@.@@@..@@..@@@@...@@@@.@...@@@.@@@@@ -@@.@..@..@.@..@@@..@@@@.@@@@..@@......@@@.@.@@@...@@.@@@@@@@@@@.@.@@..@@..@@..@@@@@@@@@@@@@.@...@.@.@@@@.@@.@.@@...@..@.@.@...@@@@@.@@@@@ -@@@@...@@@@..@@@..@...@@.@@@.@@@@@..@@@@.@..@.@@@@@......@@.@@...@@.@@@@.@@.@..@.@@@.@@@@@.@@@.@@..@@@..@@@@..@.@.@@.@@@@@...@.@...@...@. -@.@@@..@@.@.@@@@@..@..@.@@.@@@@.@@.@.@@..@@@@@@@@..@.@@..@..@.@@..@..@@..@@..@@@@.@.@.@.@.@@.@@@..@.@@@.@....@.@@@@@...@.@@.@...@@...@@.. -.@@.@@@...@@@..@@.@@..@@.@.@@..@@@......@@.@@@....@@@@@.@@@@..@@.@....@@@..@@@@@.@@@...@@@.@@.@@@.@.@@@@@.@.@.@@@@@@.@.@@@@@..@@..@@...@@ -@@@@@@@@...@@...@@@@@@@.@.@@.@@@.@.@.@@..@.@@..@.@.@.@@@@@@..@@@@.@@@@@...@@....@@@@.@@.@@.@..@.@@.@@..@@@@.@@@@.@@.@.@@...@@@.@@@..@@@.. -@...@..@@@@@..@@...@.@@@@.@.@.@@@@@@.@@.@.@@...@.@..@@@@@.@.@.@@.@.@.@@@.@@.@@@@@@@@.@@@.@..@.@@@.@@@@@@.@@.@@.@@..@@.@@.@@@..@.@@.@@@@@. -.@@@.@@....@@@@@@.@@@@@@@@@@@.@.@.@@@.@@@@@@@@..@@@@@.@@@@@.@@.@@@.@@@.@..@.@@...@@...@@.....@.@@@@.@@.@@.@@@.@.@..@.@@@..@..@@@.@.@@.@.@ -@.@@.@@@@.@.@.@@..@..@@@@..@@.@@@@@.@@@..@..@@@@.@@.@@@...@@@@@@@@@.@@@@@@...@@@.@..@@@@.....@.@@@@@..@.@..@@@..@.@@@.@@@.@@@@@..@.@@@... -.@.@@@.@.@...@.@@@.@.@@@@@@@@@@.@@...@..@@@.@.@@@.@.@@@@@..@@@@@@@@@@@.@@@@..@.@@@@@@@@..@@..@@@@@@@@..@@...@@@@@@@@.@.@@@@@..@@@.@.@@@@@ -..@@.@..@@.@@@.@@@@.@.@.@@..@@.@@...@.@.@@@@@.@...@@@@...@@@..@...@@@....@@@@@.@@@@.@@@@@@.@.@@@@.@.@@@.@@@.@@.@.@@.@@.....@@@...@.@@@@@@ -@@@@.@@@@@.@@.@.@.@@@@@@@@@..@@@@@@@@@..@.@@@.@@@.@@@@@.@@@@@.@.@@@@.....@.@.@@@@@@.....@@.@.@@.@..@@@@@.@..@.@..@...@@@.@..@.@@@@.@.@@@@ -@@@@.@@@..@@@.@@@@@@@@@.@@@@@@@..@.@@.@@@@.@@@..@.@..@@.@@...@@@@@.@.@@...@..@@@..@@.@.@@@@.@@@@@@@@@@@....@@.@@.@@@...@.@.@@@@.@@@.@@@.@ -@@@.@..@@@@@.@@.@@..@.@@@..@@@@@@@.@@@.@@@@@@.@@.@...@@@.@@..@@@@@.@@..@@@@@@@@.@@....@@....@@@@@@@@.@.@.@@@.@@.@.@@@@@.@.@@.@@@.@@@@.@.@ -.@@.@@@@..@@@.@.@.@@@@@@@@@@@..@..@@@@@@@@@@@..@@@.....@@@@.@@@@@@@..@@..@@@..@@@@@@..@@.@@@@@..@@@@.@.@@@@..@@@@@...@.@@@.@@@@@@.@@@.@@@ -@@..@.@.@@@@@.@@@.@@@@@@.@...@.@@.@@@..@..@.@@@@.@@.@@@@@@@..@.@@@@@@@@.@..@.@@@...@@@.@@.@@@@@@.@@@@@@..@...@@@@.@@.@@.@.@.@@.@@.@@.@.@@ -@.@@..@@...@@@@@.@@.@..@@@@@@.@@@.@.@@.@@@@@@@..@@@@@@.@@@@.....@@.@@@@..@@@...@@..@..@@@@.@@@@@@@@@..@.@@@@@..@@@.@@.@@@.@..@@@@@@.@@@@@ -@@@@@@@@@@..@.@.@@@@@..@@@@..@@.@@@@@..@@@@.@.@@@@@@@.@@@@@.@@@@.@.@@@@@@@@@@@@@@@..@@@@@@.@@@@@.@@@@@....@.@@.@@.@...@@@@@@@@.@.@@.@..@@ -..@..@@@@@.@@@@@.@@@@@@@.@@..@.@@.@@@@.@@@@@..@.@.@.@@.@@...@@@@@@@@...@..@..@..@.@@@...@@...@@.@@..@@@@.@....@@@@@.@@@@.@@@@@.@@.@@@@@.@ -@@@.@.@@...@@......@.@..@@@.@@@.@.@@.@@@..@@@@.@.@@@@.@@.@.@.@@@@.@@@@@@.@@@@@@.@@@..@@......@@@@@@@.@@@@@@@@.@@@@@@@..@.@@@..@.@..@@@.@@ -@@@@.@@...@@..@@@@@@@.@@@...@.@@.@.@@@@@@@@@@@@@@@.@@.@@.@@@..@..@..@@.@.@.@@@@@@@....@@.@@@@.@.@@@.@@@@@@..@.@@.@@@...@.@@@.@@@..@@@@..@ -.@@.@.@@@.@....@@.@@@@..@@@@..@@@.@@@...@@..@@@@..@.@.@@@@@@@.@@@@.@.@@.@@....@@.@@@@.@@@@.@.@.@@....@.@@@...@.@...@...@..@.@@@@@..@@@.@. -..@@@@@@@.@@.@..@@@..@.@....@@..@@@@@.@@@..@@@.@@@..@@.@@@.@@@@@@@.@.@@..@@@@.@.@@@......@@..@@@.@@@@...@@..@@@@@.@.@@@@@..@.@@..@..@@@@@ -.@@@.@.@.@.@.@@@@.@.@.@@..@@.@@@.@.@@@@@.@.@..@@@@@.@.@@.@@@@@@@@..@@..@@@@@@.@.@@@@.@@...@@@.@@...@@@@@@@@@.@@.@@@.@@.@@.@@...@@.@@.@.@. -@.@@@@.@@@.@@@..@..@..@@@@@.@.@.@@@@@@@.@..@@@.@.@.@@.@@@@...@@@.@.@@@@..@.@@....@@@@.@@@@.@.@.@@@@@@@.@@.@@@@..@.@@@.@@@@@@.@@@@@@@@.@.@ -.@@@@@.@@@@..@@.@.@@@.@.@@@@@@@..@@.@@.@@.@.@.@.@@@@@@@@@...@.@@@@@@@..@@@.@.@.@.@@@@.@@@.@.@@@@@@@@@@@@@@@@.@@.@@@@@.@.@..@@..@@.@@@@.@. -.@@.@@@@@@..@@.@.@@@......@@@@..@@@.@@@.@@..@@@@@.@@..@.@@@.@@.@@@@@..@@@@.@.@@..@.@.@@.@@@.@@@@@@@..@@.@.@...@@@.@..@.@@.@@@@.@..@@@@@.. -@.@@@@..@.@.@@@@@@@@@...@@@@..@.@@@..@@@@@..@..@.@@.@@.@@.@@@@.@@.@.@@@@@.@@@...@.@@..@.@@.@@@@@@@@@@@@@.@@@@@.@@.@@@..@@@@.@@@@..@@@@@@@ -@@@@@@...@..@.@@@..@@.@@@@.@@..@@@.@.@@@.@@@@@@@.@@@@..@@@@@.@.@.@@@@@@.@@.@@@..@.@.@.@...@@@..@@@@@....@@@@@@@@@@...@@@.@.@.@@@.@.@@@..@ -@.@.@@@.@@@.@.@.@@@@.@..@.@....@@..@@@@.@..@..@@@@@@@.@@@@@.@@@@@..@@.@...@@..@@.@@@@@@@@@.@.@@@@@@@.....@@@@@@@.@@@.@..@@.@@.@.@@.@@.@.. -..@@..@.@@@.@@@@.@@.@@..@@.@.@@.@....@@@@@@...@.@..@@@@@@@...@...@..@....@@@.@..@@@@@@.....@@@@@.@@@..@.@@@@@@.@@@@.@@@.@@.@@@..@@@@@..@@ -@..@.@@.@@@.@@@..@@@...@..@.@@@@@@.@.@@...@.@@..@..@@.@@....@....@@@.@@@@@.@.@@@.@.@.@@@@.@.@.@...@@@@@@@@...@@@@@@..@@@@@@@.@@@.@.@@@.@. -@@.@.@.@.@@.@.@@@@..@@@@@@@.@@..@@.@@@@@@@@.@.@@.@.@.@...@@.@.@@.@.@@@@@@@@@@@@@@.@..@.@.@@.@.@@@@.@@@@@@@@..@..@...@.@@@..@@@@.@.@@@@@@. -.@.@@@@@@.@..@@...@@@.@@@.@@@@@@.@@@.@@@@@..@@.@.@.@@@..@@@.@@..@.@.@@@@@.@..@@.@@..@@@@@@@.@..@@@@@@.@@.@@@@@.@.@@.@.@.@.@@@@@@@...@.@@. diff --git a/day4/test_input b/day4/test_input deleted file mode 100644 index 9ad769d..0000000 --- a/day4/test_input +++ /dev/null @@ -1,10 +0,0 @@ -..@@.@@@@. -@@@.@.@.@@ -@@@@@.@.@@ -@.@@@@..@. -@@.@@@@.@@ -.@@@@@@@.@ -.@.@.@.@@@ -@.@@@.@@@@ -.@@@@@@@@. -@.@.@@@.@. \ No newline at end of file