day6 part 1 done

This commit is contained in:
PoliEcho 2024-12-14 17:42:48 +01:00
parent 7a0f35cda1
commit 455b5b4c88
2 changed files with 120 additions and 0 deletions

4
.gitignore vendored
View File

@ -1 +1,5 @@
*
!*.*
!*/
.vscode
*.csv

116
day6/day.cpp Normal file
View File

@ -0,0 +1,116 @@
#include <fstream>
#include <iostream>
#include <vector>
bool AreWeInBounds(int x, int y, std::vector<std::vector<char>> &map) {
if (x < 0 || y < 0) {
return false;
}
if (x >= map.size() || y >= map[x].size()) {
return false;
}
return true;
}
int conditional_operation(int a, int b, char op) {
switch (op) {
case '+':
return a + b;
case '-':
return a - b;
default:
return a;
}
}
int main() {
std::ifstream inputfile("input");
std::string input;
int res = 0;
if (!inputfile.is_open()) {
std::cerr << "Could not open the file" << std::endl;
return ENOENT;
}
std::string line;
std::vector<std::vector<char>> map;
while (std::getline(inputfile, line)) {
map.push_back(std::vector<char>(line.begin(), line.end()));
}
int posX;
int posY;
int direction;
/*
0: up
1: right
2: down
3: left
*/
for (int i = 0; i < map.size(); i++) {
for (int j = 0; j < map[i].size(); j++) {
if (map[i][j] == '^') {
posX = i;
posY = j;
direction = 0;
}
}
}
char op_x;
char op_y;
while (true) {
map[posX][posY] = 'X';
switch (direction) {
case 0:
op_x = '-';
op_y = 'n';
break;
case 1:
op_x = 'n';
op_y = '+';
break;
case 2:
op_x = '+';
op_y = 'n';
break;
case 3:
op_x = 'n';
op_y = '-';
break;
default:
std::cerr << "How did we get here?" << std::endl;
exit(255);
break;
}
if (!AreWeInBounds(conditional_operation(posX, 1, op_x),
conditional_operation(posY, 1, op_y), map)) {
break;
}
switch (map[conditional_operation(posX, 1, op_x)]
[conditional_operation(posY, 1, op_y)]) {
case '#':
direction++;
if (direction > 3) {
direction = 0;
}
break;
default:
posX = conditional_operation(posX, 1, op_x);
posY = conditional_operation(posY, 1, op_y);
}
}
for (int i = 0; i < map.size(); i++) {
for (int j = 0; j < map[i].size(); j++) {
if (map[i][j] == 'X') {
res++;
}
std::cout << map[i][j];
}
std::cout << std::endl;
}
std::cout << "\nRes: " << res << std::endl;
}