“Debido a nuevos protocolos de seguridad, la contraseña está bloqueada en la caja fuerte de abajo. Por favor, revisa el documento adjunto para ver la nueva combinación.”
Traducción de la publicación original en inglés.
Github: GCaggianese/AoC-2025/D2
Puzzle Dia 1 - Advent of Code
- El dial va de 00 a 99 (NN) y hace un click al llegar a cada número.
- Esto significa que hay 100 valores posibles antes de volver a empezar.
Estructura de entrada
-
Secuencia de rotaciones (1 por línea)
L-> rotación hacia números menoresR-> rotación hacia números mayores
-
Hay que envolver con
%; en C++ uso aritmética modular (Gauss) con convención de división hacia abajo. -
NN-> número de rotaciones. -
Se empieza desde 50.
Solución usando C++ STD 20
- Meson está ahí sólo porque lo estaba aprendiendo justo antes de AoC. También se puede usar
g++ src/main.cpp -o aoc-2020-d1o lo que uno prefiera. -
En realidad lo resolví usando
org-babbel. - Github link: GCaggianese/AoC-2025
- Codeberg link: GCaggianese/AoC-2025
...
R31
Dial position: 86
R25
Dial position: 11
Clicks: 1129
Respuesta correcta~! 🌟+1
int dial = 50;
int clicker = 0;
template <typename T> T floor_mod(T a, T b) {
return a - b * std::floor(static_cast<double>(a) / static_cast<double>(b));
}
void fright(int r) { dial = floor_mod((dial + r), 100); }
void fleft(int l) { dial = floor_mod((dial - l), 100); }
void click() {
if (dial == 0) {
clicker += 1;
}
}
void parse_file(std::string_view filepath) {
std::ifstream file(filepath.data());
for (std::string line; std::getline(file, line);) {
if (line.empty())
continue;
char direction = line[0];
int value = 0;
auto [ptr, ec] =
std::from_chars(line.data() + 1, line.data() + line.size(), value);
if (ec == std::errc{}) { // Success
std::cout << line << '\n';
if (direction == 'L') {
fleft(value);
click();
std::cout << "Dial position: " << dial << "\n";
} else if (direction == 'R') {
fright(value);
click();
std::cout << "Dial position: " << dial << "\n";
}
}
if (ec != std::errc{}) { // Fail
std::cerr << "Parse error on line: " << line << '\n';
continue;
}
}
}
int main(){
std::cout << "Hey AoC 2025!\n\n";
parse_file("input_test.txt");
std::cout << "Clicks: " << clicker << "\n";
return 0;
}