Added 2022 (cpp)
This commit is contained in:
33
2022/cpp/05/Makefile
Normal file
33
2022/cpp/05/Makefile
Normal file
@ -0,0 +1,33 @@
|
||||
PART := 1
|
||||
CXXFLAGS := -Wall -O3 -DPART=$(PART)
|
||||
OBJ_DIR = build
|
||||
OBJ = answer.o
|
||||
|
||||
.PHONY = clean asdf sample1 sample2
|
||||
|
||||
asdf: result
|
||||
@echo "------- RESULT -------"
|
||||
@./result "input" | xclip -selection c
|
||||
@xclip -selection c -o
|
||||
|
||||
check: test
|
||||
./test
|
||||
|
||||
test: $(OBJ_DIR)/$(OBJ)
|
||||
|
||||
verbose: clean
|
||||
$(eval CXXFLAGS += -DVERBOSE)
|
||||
|
||||
$(OBJ_DIR)/$(OBJ): $(OBJ_DIR)/%.o: %.hpp
|
||||
|
||||
$(OBJ_DIR)/%.o: %.cpp
|
||||
@echo "Compiling $<..."
|
||||
@mkdir -p $(@D)
|
||||
gcc $(CXXFLAGS) -c -o $@ $<
|
||||
|
||||
result: $(OBJ_DIR)/$(OBJ)
|
||||
|
||||
clean:
|
||||
-rm -f *.o
|
||||
-rm -rf $(OBJ_DIR)/
|
||||
|
91
2022/cpp/05/answer.cpp
Normal file
91
2022/cpp/05/answer.cpp
Normal file
@ -0,0 +1,91 @@
|
||||
// AOC - 2022 - 05
|
||||
#include "answer.hpp"
|
||||
#include <algorithm>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
|
||||
#define STACK_WIDTH 4
|
||||
|
||||
stacks_t get_stacks(std::vector<std::string> stack_lines, uint n_stacks) {
|
||||
// reverse so that stack_lines[0] is the bottom of the stacks
|
||||
std::reverse(stack_lines.begin(), stack_lines.end());
|
||||
|
||||
std::vector<std::vector<char>> stacks(n_stacks);
|
||||
uint max_height = stack_lines.size();
|
||||
|
||||
for (uint h = 0; h < max_height; h++) {
|
||||
for (uint i = 0; i < n_stacks; i++) {
|
||||
char item = stack_lines[h][i * STACK_WIDTH + 1];
|
||||
if (item != ' ')
|
||||
stacks[i].push_back(item);
|
||||
}
|
||||
}
|
||||
return stacks;
|
||||
}
|
||||
|
||||
Move get_move(std::string line) {
|
||||
std::stringstream ss(line);
|
||||
std::string _;
|
||||
uint item, from, to;
|
||||
ss >> _; // move
|
||||
ss >> item;
|
||||
ss >> _; // from
|
||||
ss >> from;
|
||||
ss >> _; // to
|
||||
ss >> to;
|
||||
return {--item, --from, --to};
|
||||
}
|
||||
|
||||
Input get_input(const char * filename) {
|
||||
std::ifstream stream(filename);
|
||||
std::string str;
|
||||
Input ret;
|
||||
|
||||
std::vector<std::string> stack_lines;
|
||||
stacks_t stacks;
|
||||
|
||||
while (getline(stream, str) && !std::isdigit(str[1])) {
|
||||
stack_lines.push_back(str);
|
||||
}
|
||||
std::reverse(str.begin(), str.end() - 1);
|
||||
std::stringstream ss(str);
|
||||
uint n_stacks;
|
||||
ss >> n_stacks;
|
||||
stacks = get_stacks(stack_lines, n_stacks);
|
||||
|
||||
getline(stream, str); // get rid of the empty line between the stacks and
|
||||
// the move instructions
|
||||
|
||||
std::vector<Move> moves;
|
||||
while (getline(stream, str))
|
||||
moves.push_back(get_move(str));
|
||||
|
||||
return {stacks, moves};
|
||||
}
|
||||
|
||||
template <class T> std::vector<T> pop(std::vector<T> & v, uint i) {
|
||||
std::vector<T> ret(v.begin() + i, v.end());
|
||||
v.erase(v.begin() + i, v.end());
|
||||
return ret;
|
||||
}
|
||||
|
||||
std::string get_result(Input input) {
|
||||
std::string ret;
|
||||
stacks_t stacks = input.stacks;
|
||||
std::cout << stacks << std::endl;
|
||||
for (auto & move : input.moves) {
|
||||
std::cout << move << std::endl;
|
||||
std::vector<char> tbi = pop(stacks[move.from], stacks[move.from].size() - 1 - move.item);
|
||||
#if PART == 1
|
||||
std::reverse(tbi.begin(), tbi.end());
|
||||
#endif
|
||||
stacks[move.to].insert(stacks[move.to].end(),
|
||||
tbi.begin(), tbi.end());
|
||||
std::cout << stacks << std::endl << std::endl;
|
||||
}
|
||||
|
||||
for (auto & stack : stacks)
|
||||
ret += stack.back();
|
||||
return ret;
|
||||
}
|
61
2022/cpp/05/answer.hpp
Normal file
61
2022/cpp/05/answer.hpp
Normal file
@ -0,0 +1,61 @@
|
||||
#include <stack>
|
||||
#include <string>
|
||||
#include "lib.hpp"
|
||||
|
||||
#ifndef VERBOSE
|
||||
#define VERBOSE 0
|
||||
#endif
|
||||
|
||||
#ifndef PART
|
||||
#define PART 2
|
||||
#endif
|
||||
|
||||
struct Move{
|
||||
uint item, from, to;
|
||||
|
||||
bool operator ==(const Move & rhs) const{
|
||||
return this->item == rhs.item && this->from == rhs.from && this->to == rhs.to;
|
||||
}
|
||||
};
|
||||
|
||||
typedef std::vector<std::vector<char>> stacks_t;
|
||||
|
||||
struct Input{
|
||||
stacks_t stacks;
|
||||
std::vector<Move> moves;
|
||||
bool operator ==(const Input & rhs) const{
|
||||
return this->moves == rhs.moves && this->stacks == rhs.stacks;
|
||||
}
|
||||
};
|
||||
|
||||
inline std::ostream& operator<<(std::ostream &os, stacks_t & stacks){
|
||||
uint i = 0;
|
||||
for (auto & stack: stacks){
|
||||
os << i++ << " ";
|
||||
for (auto & item : stack)
|
||||
os << item << " ";
|
||||
os << std::endl;
|
||||
}
|
||||
return os;
|
||||
}
|
||||
|
||||
inline std::ostream& operator<<(std::ostream &os, Move & move){
|
||||
os << "move " << move.item << " from " << move.from << " to " << move.to;
|
||||
return os;
|
||||
}
|
||||
|
||||
inline std::ostream& operator<<(std::ostream &os, Input & inp){
|
||||
os << "---------------------------------" << std::endl;
|
||||
os << inp.stacks << std::endl;
|
||||
for (auto & move: inp.moves)
|
||||
os << move << std::endl;
|
||||
os << "---------------------------------" << std::endl;
|
||||
return os;
|
||||
}
|
||||
|
||||
|
||||
Input get_input(const char *);
|
||||
|
||||
std::string get_result(Input);
|
||||
|
||||
|
BIN
2022/cpp/05/build/answer.o
Normal file
BIN
2022/cpp/05/build/answer.o
Normal file
Binary file not shown.
512
2022/cpp/05/input
Normal file
512
2022/cpp/05/input
Normal file
@ -0,0 +1,512 @@
|
||||
[F] [L] [M]
|
||||
[T] [H] [V] [G] [V]
|
||||
[N] [T] [D] [R] [N] [D]
|
||||
[Z] [B] [C] [P] [B] [R] [Z]
|
||||
[M] [J] [N] [M] [F] [M] [V] [H]
|
||||
[G] [J] [L] [J] [S] [C] [G] [M] [F]
|
||||
[H] [W] [V] [P] [W] [H] [H] [N] [N]
|
||||
[J] [V] [G] [B] [F] [G] [D] [H] [G]
|
||||
1 2 3 4 5 6 7 8 9
|
||||
|
||||
move 6 from 4 to 3
|
||||
move 5 from 8 to 9
|
||||
move 1 from 4 to 5
|
||||
move 1 from 4 to 5
|
||||
move 2 from 2 to 7
|
||||
move 2 from 1 to 6
|
||||
move 9 from 6 to 1
|
||||
move 12 from 3 to 5
|
||||
move 1 from 8 to 4
|
||||
move 3 from 1 to 5
|
||||
move 1 from 6 to 7
|
||||
move 10 from 5 to 2
|
||||
move 14 from 5 to 1
|
||||
move 8 from 7 to 9
|
||||
move 11 from 2 to 9
|
||||
move 1 from 3 to 9
|
||||
move 11 from 1 to 5
|
||||
move 2 from 1 to 9
|
||||
move 1 from 4 to 8
|
||||
move 6 from 1 to 5
|
||||
move 1 from 8 to 3
|
||||
move 16 from 5 to 1
|
||||
move 4 from 1 to 3
|
||||
move 1 from 5 to 6
|
||||
move 4 from 3 to 4
|
||||
move 1 from 6 to 7
|
||||
move 21 from 9 to 6
|
||||
move 2 from 1 to 9
|
||||
move 2 from 4 to 9
|
||||
move 5 from 9 to 4
|
||||
move 9 from 1 to 6
|
||||
move 6 from 4 to 6
|
||||
move 1 from 6 to 2
|
||||
move 1 from 7 to 6
|
||||
move 1 from 3 to 2
|
||||
move 8 from 6 to 9
|
||||
move 3 from 1 to 8
|
||||
move 1 from 2 to 1
|
||||
move 13 from 6 to 3
|
||||
move 1 from 1 to 9
|
||||
move 2 from 1 to 6
|
||||
move 3 from 8 to 4
|
||||
move 4 from 4 to 9
|
||||
move 3 from 1 to 3
|
||||
move 22 from 9 to 8
|
||||
move 1 from 2 to 9
|
||||
move 6 from 8 to 9
|
||||
move 15 from 6 to 5
|
||||
move 5 from 8 to 9
|
||||
move 11 from 9 to 8
|
||||
move 13 from 5 to 1
|
||||
move 1 from 6 to 5
|
||||
move 1 from 9 to 3
|
||||
move 21 from 8 to 3
|
||||
move 3 from 5 to 3
|
||||
move 11 from 1 to 2
|
||||
move 25 from 3 to 1
|
||||
move 5 from 1 to 7
|
||||
move 20 from 1 to 7
|
||||
move 1 from 6 to 7
|
||||
move 16 from 3 to 9
|
||||
move 8 from 9 to 6
|
||||
move 1 from 1 to 5
|
||||
move 5 from 9 to 4
|
||||
move 2 from 2 to 1
|
||||
move 2 from 9 to 4
|
||||
move 1 from 9 to 4
|
||||
move 1 from 8 to 4
|
||||
move 1 from 5 to 2
|
||||
move 3 from 4 to 6
|
||||
move 1 from 4 to 7
|
||||
move 9 from 7 to 6
|
||||
move 5 from 4 to 6
|
||||
move 7 from 7 to 2
|
||||
move 1 from 1 to 6
|
||||
move 11 from 2 to 5
|
||||
move 10 from 5 to 1
|
||||
move 1 from 6 to 8
|
||||
move 1 from 5 to 7
|
||||
move 24 from 6 to 1
|
||||
move 12 from 1 to 4
|
||||
move 12 from 4 to 8
|
||||
move 2 from 2 to 7
|
||||
move 3 from 7 to 2
|
||||
move 5 from 2 to 8
|
||||
move 9 from 8 to 9
|
||||
move 9 from 8 to 5
|
||||
move 1 from 9 to 1
|
||||
move 14 from 1 to 8
|
||||
move 11 from 7 to 9
|
||||
move 4 from 1 to 3
|
||||
move 7 from 1 to 2
|
||||
move 3 from 3 to 7
|
||||
move 12 from 9 to 7
|
||||
move 8 from 7 to 2
|
||||
move 4 from 9 to 2
|
||||
move 1 from 3 to 6
|
||||
move 5 from 5 to 9
|
||||
move 14 from 2 to 1
|
||||
move 8 from 9 to 4
|
||||
move 6 from 4 to 5
|
||||
move 5 from 5 to 7
|
||||
move 1 from 8 to 2
|
||||
move 2 from 4 to 6
|
||||
move 4 from 7 to 3
|
||||
move 10 from 8 to 4
|
||||
move 2 from 3 to 6
|
||||
move 7 from 7 to 6
|
||||
move 10 from 4 to 8
|
||||
move 5 from 1 to 6
|
||||
move 8 from 2 to 1
|
||||
move 7 from 6 to 8
|
||||
move 9 from 6 to 5
|
||||
move 16 from 1 to 6
|
||||
move 2 from 3 to 9
|
||||
move 1 from 7 to 4
|
||||
move 2 from 9 to 1
|
||||
move 14 from 6 to 7
|
||||
move 1 from 6 to 3
|
||||
move 2 from 6 to 3
|
||||
move 9 from 5 to 7
|
||||
move 3 from 1 to 6
|
||||
move 3 from 3 to 7
|
||||
move 5 from 5 to 9
|
||||
move 3 from 6 to 2
|
||||
move 1 from 6 to 2
|
||||
move 12 from 8 to 2
|
||||
move 5 from 2 to 1
|
||||
move 2 from 1 to 3
|
||||
move 25 from 7 to 1
|
||||
move 1 from 4 to 6
|
||||
move 2 from 3 to 9
|
||||
move 26 from 1 to 9
|
||||
move 2 from 1 to 8
|
||||
move 1 from 6 to 8
|
||||
move 1 from 7 to 1
|
||||
move 7 from 8 to 1
|
||||
move 7 from 1 to 5
|
||||
move 1 from 1 to 2
|
||||
move 2 from 8 to 6
|
||||
move 32 from 9 to 8
|
||||
move 1 from 6 to 5
|
||||
move 5 from 2 to 9
|
||||
move 1 from 9 to 7
|
||||
move 24 from 8 to 3
|
||||
move 1 from 6 to 9
|
||||
move 3 from 2 to 5
|
||||
move 1 from 7 to 9
|
||||
move 4 from 9 to 3
|
||||
move 8 from 8 to 7
|
||||
move 18 from 3 to 7
|
||||
move 20 from 7 to 8
|
||||
move 6 from 8 to 9
|
||||
move 6 from 5 to 1
|
||||
move 8 from 9 to 4
|
||||
move 3 from 5 to 4
|
||||
move 8 from 8 to 4
|
||||
move 2 from 5 to 2
|
||||
move 3 from 1 to 5
|
||||
move 4 from 3 to 7
|
||||
move 6 from 2 to 9
|
||||
move 3 from 3 to 6
|
||||
move 6 from 4 to 5
|
||||
move 2 from 6 to 3
|
||||
move 1 from 3 to 1
|
||||
move 4 from 3 to 8
|
||||
move 8 from 4 to 3
|
||||
move 4 from 3 to 7
|
||||
move 4 from 4 to 5
|
||||
move 4 from 9 to 5
|
||||
move 3 from 3 to 4
|
||||
move 3 from 4 to 9
|
||||
move 1 from 1 to 4
|
||||
move 2 from 1 to 5
|
||||
move 7 from 7 to 8
|
||||
move 4 from 7 to 4
|
||||
move 1 from 6 to 7
|
||||
move 1 from 1 to 5
|
||||
move 1 from 3 to 8
|
||||
move 11 from 5 to 9
|
||||
move 17 from 9 to 8
|
||||
move 13 from 8 to 4
|
||||
move 1 from 4 to 8
|
||||
move 4 from 7 to 1
|
||||
move 4 from 8 to 3
|
||||
move 6 from 5 to 4
|
||||
move 3 from 3 to 6
|
||||
move 2 from 1 to 9
|
||||
move 1 from 9 to 5
|
||||
move 1 from 3 to 5
|
||||
move 5 from 5 to 9
|
||||
move 2 from 1 to 8
|
||||
move 21 from 8 to 6
|
||||
move 2 from 8 to 4
|
||||
move 4 from 9 to 6
|
||||
move 1 from 9 to 7
|
||||
move 19 from 4 to 1
|
||||
move 28 from 6 to 5
|
||||
move 7 from 4 to 2
|
||||
move 28 from 5 to 3
|
||||
move 1 from 9 to 4
|
||||
move 1 from 4 to 2
|
||||
move 1 from 7 to 8
|
||||
move 1 from 8 to 9
|
||||
move 13 from 1 to 3
|
||||
move 8 from 2 to 8
|
||||
move 3 from 1 to 2
|
||||
move 5 from 8 to 5
|
||||
move 1 from 2 to 7
|
||||
move 1 from 9 to 7
|
||||
move 1 from 2 to 3
|
||||
move 2 from 7 to 9
|
||||
move 1 from 2 to 6
|
||||
move 1 from 9 to 1
|
||||
move 9 from 3 to 9
|
||||
move 3 from 9 to 1
|
||||
move 1 from 6 to 8
|
||||
move 21 from 3 to 7
|
||||
move 7 from 9 to 4
|
||||
move 2 from 4 to 2
|
||||
move 1 from 8 to 6
|
||||
move 7 from 1 to 4
|
||||
move 7 from 7 to 8
|
||||
move 4 from 5 to 9
|
||||
move 10 from 7 to 1
|
||||
move 7 from 3 to 9
|
||||
move 1 from 7 to 9
|
||||
move 1 from 5 to 3
|
||||
move 3 from 3 to 5
|
||||
move 10 from 4 to 2
|
||||
move 1 from 3 to 7
|
||||
move 2 from 4 to 9
|
||||
move 3 from 9 to 1
|
||||
move 3 from 7 to 1
|
||||
move 1 from 6 to 4
|
||||
move 1 from 1 to 2
|
||||
move 1 from 3 to 4
|
||||
move 2 from 4 to 3
|
||||
move 1 from 7 to 4
|
||||
move 4 from 8 to 9
|
||||
move 1 from 4 to 9
|
||||
move 3 from 1 to 9
|
||||
move 12 from 1 to 7
|
||||
move 2 from 9 to 5
|
||||
move 12 from 9 to 7
|
||||
move 5 from 5 to 1
|
||||
move 1 from 8 to 5
|
||||
move 4 from 1 to 4
|
||||
move 1 from 9 to 6
|
||||
move 1 from 3 to 4
|
||||
move 3 from 8 to 3
|
||||
move 1 from 1 to 7
|
||||
move 8 from 2 to 5
|
||||
move 2 from 8 to 1
|
||||
move 10 from 7 to 1
|
||||
move 4 from 9 to 5
|
||||
move 2 from 5 to 8
|
||||
move 11 from 5 to 4
|
||||
move 6 from 7 to 2
|
||||
move 2 from 2 to 1
|
||||
move 1 from 7 to 5
|
||||
move 1 from 5 to 1
|
||||
move 2 from 4 to 8
|
||||
move 1 from 6 to 9
|
||||
move 8 from 4 to 3
|
||||
move 8 from 1 to 7
|
||||
move 7 from 1 to 2
|
||||
move 4 from 3 to 9
|
||||
move 1 from 9 to 6
|
||||
move 7 from 2 to 1
|
||||
move 5 from 2 to 3
|
||||
move 2 from 7 to 8
|
||||
move 5 from 8 to 4
|
||||
move 2 from 9 to 3
|
||||
move 1 from 8 to 1
|
||||
move 6 from 3 to 5
|
||||
move 10 from 3 to 1
|
||||
move 3 from 5 to 3
|
||||
move 3 from 2 to 1
|
||||
move 1 from 5 to 4
|
||||
move 6 from 4 to 5
|
||||
move 1 from 6 to 2
|
||||
move 3 from 4 to 7
|
||||
move 1 from 9 to 4
|
||||
move 2 from 3 to 1
|
||||
move 1 from 9 to 8
|
||||
move 1 from 3 to 7
|
||||
move 4 from 4 to 8
|
||||
move 2 from 7 to 4
|
||||
move 8 from 5 to 9
|
||||
move 2 from 8 to 6
|
||||
move 2 from 4 to 3
|
||||
move 2 from 3 to 4
|
||||
move 4 from 9 to 7
|
||||
move 1 from 8 to 7
|
||||
move 2 from 6 to 9
|
||||
move 2 from 8 to 9
|
||||
move 1 from 2 to 9
|
||||
move 1 from 7 to 8
|
||||
move 1 from 2 to 7
|
||||
move 19 from 7 to 6
|
||||
move 1 from 8 to 1
|
||||
move 2 from 4 to 8
|
||||
move 5 from 6 to 1
|
||||
move 2 from 7 to 2
|
||||
move 2 from 2 to 8
|
||||
move 2 from 1 to 8
|
||||
move 4 from 8 to 2
|
||||
move 3 from 2 to 8
|
||||
move 6 from 9 to 5
|
||||
move 8 from 6 to 3
|
||||
move 26 from 1 to 6
|
||||
move 1 from 5 to 3
|
||||
move 1 from 1 to 5
|
||||
move 8 from 3 to 1
|
||||
move 1 from 3 to 7
|
||||
move 3 from 9 to 2
|
||||
move 4 from 2 to 6
|
||||
move 26 from 6 to 1
|
||||
move 1 from 7 to 5
|
||||
move 3 from 8 to 4
|
||||
move 2 from 8 to 2
|
||||
move 7 from 1 to 2
|
||||
move 1 from 5 to 9
|
||||
move 2 from 4 to 6
|
||||
move 9 from 6 to 2
|
||||
move 18 from 1 to 7
|
||||
move 6 from 7 to 1
|
||||
move 6 from 5 to 6
|
||||
move 1 from 1 to 2
|
||||
move 19 from 2 to 7
|
||||
move 1 from 4 to 2
|
||||
move 9 from 7 to 1
|
||||
move 3 from 6 to 7
|
||||
move 1 from 9 to 4
|
||||
move 1 from 2 to 3
|
||||
move 8 from 7 to 8
|
||||
move 4 from 6 to 5
|
||||
move 2 from 6 to 3
|
||||
move 1 from 4 to 2
|
||||
move 4 from 5 to 1
|
||||
move 8 from 8 to 7
|
||||
move 17 from 7 to 8
|
||||
move 3 from 3 to 1
|
||||
move 1 from 2 to 8
|
||||
move 8 from 8 to 4
|
||||
move 8 from 8 to 7
|
||||
move 1 from 8 to 2
|
||||
move 7 from 7 to 6
|
||||
move 1 from 2 to 7
|
||||
move 5 from 7 to 8
|
||||
move 7 from 1 to 6
|
||||
move 10 from 6 to 1
|
||||
move 4 from 7 to 9
|
||||
move 3 from 9 to 7
|
||||
move 1 from 7 to 2
|
||||
move 6 from 4 to 2
|
||||
move 7 from 1 to 5
|
||||
move 4 from 2 to 5
|
||||
move 16 from 1 to 9
|
||||
move 3 from 2 to 7
|
||||
move 2 from 4 to 9
|
||||
move 4 from 1 to 6
|
||||
move 5 from 7 to 4
|
||||
move 4 from 6 to 3
|
||||
move 1 from 7 to 4
|
||||
move 1 from 6 to 9
|
||||
move 1 from 8 to 5
|
||||
move 4 from 3 to 2
|
||||
move 2 from 5 to 3
|
||||
move 3 from 6 to 2
|
||||
move 3 from 2 to 1
|
||||
move 9 from 5 to 8
|
||||
move 1 from 3 to 1
|
||||
move 10 from 8 to 1
|
||||
move 1 from 8 to 5
|
||||
move 16 from 9 to 2
|
||||
move 1 from 3 to 2
|
||||
move 12 from 1 to 9
|
||||
move 1 from 9 to 2
|
||||
move 3 from 1 to 6
|
||||
move 2 from 1 to 9
|
||||
move 3 from 6 to 8
|
||||
move 20 from 2 to 7
|
||||
move 16 from 9 to 7
|
||||
move 1 from 7 to 5
|
||||
move 2 from 5 to 9
|
||||
move 2 from 2 to 3
|
||||
move 2 from 8 to 5
|
||||
move 3 from 9 to 7
|
||||
move 2 from 5 to 2
|
||||
move 1 from 4 to 6
|
||||
move 2 from 1 to 4
|
||||
move 23 from 7 to 5
|
||||
move 4 from 8 to 5
|
||||
move 7 from 7 to 1
|
||||
move 16 from 5 to 7
|
||||
move 1 from 6 to 5
|
||||
move 1 from 2 to 4
|
||||
move 2 from 3 to 9
|
||||
move 1 from 2 to 3
|
||||
move 13 from 5 to 1
|
||||
move 1 from 3 to 8
|
||||
move 1 from 9 to 4
|
||||
move 19 from 1 to 9
|
||||
move 2 from 1 to 9
|
||||
move 22 from 9 to 8
|
||||
move 14 from 8 to 5
|
||||
move 12 from 5 to 3
|
||||
move 21 from 7 to 9
|
||||
move 14 from 9 to 7
|
||||
move 1 from 8 to 6
|
||||
move 9 from 3 to 7
|
||||
move 1 from 3 to 2
|
||||
move 4 from 4 to 1
|
||||
move 1 from 2 to 4
|
||||
move 1 from 3 to 9
|
||||
move 6 from 8 to 9
|
||||
move 4 from 1 to 7
|
||||
move 2 from 5 to 9
|
||||
move 6 from 4 to 5
|
||||
move 4 from 7 to 4
|
||||
move 1 from 5 to 3
|
||||
move 5 from 9 to 7
|
||||
move 2 from 3 to 1
|
||||
move 6 from 9 to 6
|
||||
move 1 from 1 to 6
|
||||
move 2 from 4 to 2
|
||||
move 8 from 7 to 5
|
||||
move 20 from 7 to 5
|
||||
move 2 from 5 to 6
|
||||
move 4 from 9 to 5
|
||||
move 1 from 1 to 3
|
||||
move 1 from 3 to 4
|
||||
move 1 from 2 to 7
|
||||
move 1 from 4 to 9
|
||||
move 9 from 6 to 3
|
||||
move 2 from 4 to 3
|
||||
move 28 from 5 to 3
|
||||
move 1 from 8 to 3
|
||||
move 1 from 8 to 1
|
||||
move 1 from 2 to 8
|
||||
move 1 from 6 to 2
|
||||
move 1 from 8 to 1
|
||||
move 6 from 5 to 7
|
||||
move 1 from 5 to 1
|
||||
move 1 from 9 to 2
|
||||
move 1 from 1 to 3
|
||||
move 1 from 9 to 7
|
||||
move 2 from 1 to 2
|
||||
move 11 from 3 to 8
|
||||
move 3 from 8 to 6
|
||||
move 3 from 6 to 9
|
||||
move 25 from 3 to 7
|
||||
move 4 from 3 to 8
|
||||
move 4 from 2 to 3
|
||||
move 9 from 8 to 9
|
||||
move 2 from 3 to 7
|
||||
move 3 from 8 to 2
|
||||
move 11 from 9 to 7
|
||||
move 1 from 9 to 1
|
||||
move 4 from 7 to 3
|
||||
move 1 from 1 to 5
|
||||
move 23 from 7 to 2
|
||||
move 12 from 2 to 3
|
||||
move 2 from 3 to 9
|
||||
move 12 from 2 to 1
|
||||
move 2 from 3 to 9
|
||||
move 1 from 5 to 4
|
||||
move 1 from 2 to 5
|
||||
move 1 from 9 to 4
|
||||
move 1 from 5 to 9
|
||||
move 2 from 4 to 2
|
||||
move 3 from 1 to 4
|
||||
move 1 from 2 to 1
|
||||
move 10 from 3 to 2
|
||||
move 7 from 7 to 3
|
||||
move 11 from 7 to 9
|
||||
move 5 from 3 to 1
|
||||
move 1 from 4 to 5
|
||||
move 11 from 2 to 3
|
||||
move 9 from 9 to 3
|
||||
move 3 from 9 to 4
|
||||
move 2 from 4 to 8
|
||||
move 1 from 5 to 6
|
||||
move 13 from 1 to 5
|
||||
move 3 from 3 to 8
|
||||
move 3 from 7 to 2
|
||||
move 1 from 7 to 4
|
||||
move 3 from 8 to 3
|
||||
move 8 from 3 to 8
|
||||
move 4 from 4 to 5
|
||||
move 2 from 8 to 2
|
||||
move 8 from 8 to 3
|
||||
move 1 from 6 to 3
|
||||
move 2 from 2 to 8
|
||||
move 6 from 5 to 2
|
||||
move 3 from 2 to 8
|
||||
move 1 from 1 to 7
|
||||
move 2 from 9 to 3
|
||||
move 3 from 5 to 4
|
||||
move 2 from 8 to 6
|
24
2022/cpp/05/lib.hpp
Normal file
24
2022/cpp/05/lib.hpp
Normal file
@ -0,0 +1,24 @@
|
||||
#include <iostream>
|
||||
#include <ostream>
|
||||
#include <vector>
|
||||
|
||||
template<class T>
|
||||
std::ostream &operator<<(std::ostream &os, const std::vector<T> &list) {
|
||||
unsigned long i = 0;
|
||||
os << "[";
|
||||
for (auto el : list) {
|
||||
os << el;
|
||||
if (i < list.size() - 1) {
|
||||
os << ", ";
|
||||
}
|
||||
i++;
|
||||
}
|
||||
os << "]";
|
||||
|
||||
return os;
|
||||
}
|
||||
|
||||
inline void error(const char * msg){
|
||||
std::cerr << msg << std::endl;
|
||||
exit(1);
|
||||
}
|
BIN
2022/cpp/05/result
Executable file
BIN
2022/cpp/05/result
Executable file
Binary file not shown.
23
2022/cpp/05/result.cpp
Normal file
23
2022/cpp/05/result.cpp
Normal file
@ -0,0 +1,23 @@
|
||||
#include "answer.hpp"
|
||||
#include <iostream>
|
||||
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc < 2)
|
||||
error("Please specify the input file as first argument.");
|
||||
|
||||
#if !VERBOSE
|
||||
std::cout.setstate(std::ios_base::failbit);
|
||||
#endif
|
||||
|
||||
Input input = get_input(argv[1]);
|
||||
std::string result = get_result(input);
|
||||
|
||||
#if !VERBOSE
|
||||
std::cout.clear();
|
||||
#endif
|
||||
|
||||
std::cout << result << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
9
2022/cpp/05/sample1
Normal file
9
2022/cpp/05/sample1
Normal file
@ -0,0 +1,9 @@
|
||||
[D]
|
||||
[N] [C]
|
||||
[Z] [M] [P]
|
||||
1 2 3
|
||||
|
||||
move 1 from 2 to 1
|
||||
move 3 from 1 to 3
|
||||
move 2 from 2 to 1
|
||||
move 1 from 1 to 2
|
9
2022/cpp/05/sample2
Normal file
9
2022/cpp/05/sample2
Normal file
@ -0,0 +1,9 @@
|
||||
[D]
|
||||
[N] [C]
|
||||
[Z] [M] [P]
|
||||
1 2 3
|
||||
|
||||
move 1 from 2 to 1
|
||||
move 3 from 1 to 3
|
||||
move 2 from 2 to 1
|
||||
move 1 from 1 to 2
|
BIN
2022/cpp/05/test
Executable file
BIN
2022/cpp/05/test
Executable file
Binary file not shown.
40
2022/cpp/05/test.cpp
Normal file
40
2022/cpp/05/test.cpp
Normal file
@ -0,0 +1,40 @@
|
||||
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
|
||||
#include "../doctest/doctest/doctest.h"
|
||||
#include "answer.hpp"
|
||||
|
||||
#if PART == 1
|
||||
TEST_CASE("Part 1") {
|
||||
Input expected_input{.stacks =
|
||||
{
|
||||
{'Z', 'N'},
|
||||
{'M', 'C', 'D'},
|
||||
{'P'},
|
||||
},
|
||||
.moves = {
|
||||
{0, 1, 0},
|
||||
{2, 0, 2},
|
||||
{1, 1, 0},
|
||||
{0, 0, 1},
|
||||
}};
|
||||
|
||||
Input actual_input = get_input("sample1");
|
||||
std::cout << expected_input << std::endl;
|
||||
std::cout << actual_input << std::endl;
|
||||
|
||||
SUBCASE("Testing input is parsed correctly") { CHECK(actual_input == expected_input); }
|
||||
|
||||
SUBCASE("Testing output is the one expected from AOC") {
|
||||
CHECK(get_result(actual_input) == "CMZ");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if PART == 2
|
||||
TEST_CASE("Part 2") {
|
||||
Input actual_input = get_input("sample2");
|
||||
|
||||
SUBCASE("Testing output is the one expected from AOC") {
|
||||
CHECK(get_result(actual_input) == "MCD");
|
||||
}
|
||||
}
|
||||
#endif
|
Reference in New Issue
Block a user