mirror of
https://github.com/bertptrs/adventofcode.git
synced 2025-12-25 21:00:31 +01:00
Brute-force solution to day 22 part 1.
This commit is contained in:
@@ -1,31 +1,48 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <numeric>
|
||||||
#include "days.hpp"
|
#include "days.hpp"
|
||||||
#include "utils.hpp"
|
#include "utils.hpp"
|
||||||
|
|
||||||
void aoc2019::day22_part1(std::istream &input, std::ostream &output) {
|
void aoc2019::day22_part1(std::istream &input, std::ostream &output) {
|
||||||
std::int64_t increment = 1;
|
constexpr int DECK_SIZE = 10007;
|
||||||
std::int64_t offset = 0;
|
|
||||||
|
|
||||||
constexpr std::int64_t DECK_SIZE = 10007;
|
std::vector<int> deck(DECK_SIZE);
|
||||||
|
std::iota(deck.begin(), deck.end(), 0);
|
||||||
|
|
||||||
|
auto copy = deck;
|
||||||
|
|
||||||
std::string buffer;
|
std::string buffer;
|
||||||
while (std::getline(input, buffer)) {
|
while (std::getline(input, buffer)) {
|
||||||
std::string_view line = buffer;
|
std::string_view line = buffer;
|
||||||
if (!line.find("deal into new stack")) {
|
if (!line.find("deal into new stack")) {
|
||||||
increment *= -1;
|
std::reverse(deck.begin(), deck.end());
|
||||||
} else if (!line.find("deal with increment ")) {
|
} else if (!line.find("deal with increment ")) {
|
||||||
std::int64_t new_increment;
|
int new_increment;
|
||||||
from_chars(line.substr(20), new_increment);
|
from_chars(line.substr(20), new_increment);
|
||||||
increment *= new_increment;
|
int pos = 0;
|
||||||
increment %= DECK_SIZE;
|
for (auto value : deck) {
|
||||||
|
copy[pos] = value;
|
||||||
|
pos = (pos + new_increment) % DECK_SIZE;
|
||||||
|
}
|
||||||
|
std::swap(deck, copy);
|
||||||
} else {
|
} else {
|
||||||
std::int64_t new_offset;
|
// cut
|
||||||
from_chars(line, new_offset);
|
int new_offset;
|
||||||
offset += increment * new_offset;
|
from_chars(line.substr(4), new_offset);
|
||||||
offset %= DECK_SIZE;
|
if (new_offset < 0) {
|
||||||
|
new_offset = DECK_SIZE + new_offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto it = std::copy(deck.begin() + new_offset, deck.end(), copy.begin());
|
||||||
|
std::copy(deck.begin(), deck.begin() + new_offset, it);
|
||||||
|
|
||||||
|
std::swap(deck, copy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
output << "Not implemented\n";
|
|
||||||
|
auto location = std::find(deck.begin(), deck.end(), 2019);
|
||||||
|
|
||||||
|
output << std::distance(deck.begin(), location) << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void aoc2019::day22_part2(std::istream &input, std::ostream &output) {
|
void aoc2019::day22_part2(std::istream &input, std::ostream &output) {
|
||||||
|
|||||||
Reference in New Issue
Block a user