Day 1
This commit is contained in:
commit
4ea258eb1f
6 changed files with 1111 additions and 0 deletions
28
.clang-tidy
Normal file
28
.clang-tidy
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
Checks: "-*,clang-analyzer-*"
|
||||
ColumnLimit: 120
|
||||
HeaderFilterRegex: ".*"
|
||||
FormatStyle: file
|
||||
DeriveLineEnding: false
|
||||
IndentWidth: 2
|
||||
TabWidth: 2
|
||||
UseTab: Always
|
||||
SpacesBeforeTrailingComments: 1
|
||||
SpacesInParentheses: false
|
||||
SpacesInSquareBrackets: false
|
||||
SpacesInAngles: false
|
||||
BreakBeforeBraces: Allman
|
||||
BraceWrapping:
|
||||
AfterClass: true
|
||||
AfterControlStatement: true
|
||||
AfterEnum: true
|
||||
AfterFunction: true
|
||||
AfterNamespace: true
|
||||
AfterStruct: true
|
||||
AfterUnion: true
|
||||
BeforeCatch: true
|
||||
BeforeElse: true
|
||||
IndentBraces: false
|
||||
SplitEmptyFunction: true
|
||||
SplitEmptyRecord: true
|
||||
SplitEmptyNamespace: true
|
||||
AfterLambda: true
|
||||
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
/build
|
||||
/.vscode
|
||||
19
CMakeLists.txt
Normal file
19
CMakeLists.txt
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
cmake_minimum_required(VERSION 3.21)
|
||||
project(aoc23 LANGUAGES CXX)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 23)
|
||||
|
||||
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/build)
|
||||
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
|
||||
|
||||
set(executables d1)
|
||||
|
||||
foreach(executable ${executables})
|
||||
add_executable(${executable} "${executable}/main.cxx")
|
||||
endforeach()
|
||||
|
||||
set(CMAKE_CXX_CLANG_TIDY
|
||||
clang-tidy;
|
||||
-checks=*;
|
||||
-header-filter=.*;
|
||||
)
|
||||
10
README.md
Normal file
10
README.md
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
# AOC23
|
||||
|
||||
In c++
|
||||
|
||||
```bash
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ..
|
||||
make
|
||||
```
|
||||
1000
d1/input.txt
Normal file
1000
d1/input.txt
Normal file
File diff suppressed because it is too large
Load diff
52
d1/main.cxx
Normal file
52
d1/main.cxx
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
#include <numeric>
|
||||
#include <algorithm>
|
||||
#include <unordered_map>
|
||||
#include <map>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
int main()
|
||||
{
|
||||
std::ifstream file{"../d1/input.txt"};
|
||||
std::string line, value;
|
||||
std::vector<int> numbers;
|
||||
std::unordered_map<std::string, char> letterMap{{"one", '1'},
|
||||
{"two", '2'},
|
||||
{"three", '3'},
|
||||
{"four", '4'},
|
||||
{"five", '5'},
|
||||
{"six", '6'},
|
||||
{"seven", '7'},
|
||||
{"eight", '8'},
|
||||
{"nine", '9'}};
|
||||
|
||||
while (std::getline(file, line))
|
||||
{
|
||||
std::map<int, char> lineNumbers;
|
||||
for (const auto &entry : letterMap)
|
||||
{
|
||||
auto pos = line.find(entry.first);
|
||||
while (pos != std::string::npos)
|
||||
{
|
||||
lineNumbers[pos] = entry.second;
|
||||
pos = line.find(entry.first, pos + 1);
|
||||
}
|
||||
}
|
||||
auto fstItr = std::find_if(line.begin(), line.end(), [](char c)
|
||||
{ return isdigit(c); });
|
||||
auto sndItr = std::find_if(line.rbegin(), line.rend(), [](char c)
|
||||
{ return isdigit(c); });
|
||||
if (fstItr != line.end())
|
||||
{
|
||||
lineNumbers[std::distance(line.begin(), fstItr)] = *fstItr;
|
||||
lineNumbers[std::distance(line.rbegin(), sndItr)] = *sndItr;
|
||||
}
|
||||
numbers.emplace_back(std::stoi(std::string(1, lineNumbers.begin()->second) + lineNumbers.rbegin()->second));
|
||||
}
|
||||
std::cout << std::accumulate(numbers.begin(), numbers.end(), 0) << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue