diff --git a/Makefile b/Makefile index 12756d8..f41f124 100644 --- a/Makefile +++ b/Makefile @@ -17,8 +17,8 @@ ok-%: %_test.txt test-%: %_output.txt %_output.txt: %_test.txt - @test -f $@ || (echo $<:; cat $<) - @test -f $@ && (diff -u $@ $< && touch $@) + @test -f $@ || (echo $*:; cat $<) + @test -f $@ && (diff -u $@ $< && touch $@) || exit 0 -$(addsuffix _test.txt,$(progs)): %_test.txt: % +$(addsuffix _test.txt,$(progs)): %_test.txt: % %_input.txt ./$< < $*_input.txt > $@ diff --git a/d02.cc b/d02.cc new file mode 100644 index 0000000..65bdddc --- /dev/null +++ b/d02.cc @@ -0,0 +1,48 @@ +#include +#include +#include + +using namespace std; + +vector> parse() +{ + vector> input; + string line; + while (getline(cin, line)) { + if (line.size() < 3 || line[1] != ' ') abort(); + unsigned oppo = line[0] - 'A'; + unsigned user = line[2] - 'X'; + if (oppo >= 3 || user >= 3) abort(); + input.push_back({oppo, user}); + } + return input; +} + +unsigned p1(vector> &input) +{ + unsigned score = 0; + for (array i : input) { + unsigned shape = i[1]; + unsigned outcome = (i[1] - i[0] + 4) % 3; + score += shape + 1 + outcome * 3; + } + return score; +} + +unsigned p2(vector> &input) +{ + unsigned score = 0; + for (array i : input) { + unsigned shape = (i[1] + i[0] + 2) % 3; + unsigned outcome = i[1]; + score += shape + 1 + outcome * 3; + } + return score; +} + +int main() +{ + auto input = parse(); + cout << p1(input) << endl; + cout << p2(input) << endl; +} diff --git a/d02_input.txt b/d02_input.txt new file mode 100644 index 0000000..b024b7f --- /dev/null +++ b/d02_input.txt @@ -0,0 +1,2500 @@ +A Y +B X +C X +A Z +B Y +C X +C X +C X +C X +C X +A Z +B Y +C X +A Z +A Z +B Y +A Z +B X +C Z +C X +C X +B Y +C X +A X +B Y +B Z +A Z +B Y +C X +C X +C X +A Z +B Y +C X +A Z +C X +B Y +C X +C X +B Y +A Z +A Z +C X +C X +A Y +B X +C X +B X +C X +C X +A Z +C Z +C X +A Y +B Y +B Y +B X +C X +C X +C X +A Y +A Z +C X +A Z +C X +B Y +C X +C X +C X +C X +A Z +C X +A Z +C X +C X +B Y +C X +B Y +A X +A Y +C Y +A Z +C X +C X +A X +A Z +A X +C X +C X +A X +C X +B Y +A Z +A Y +A Z +B X +C X +B X +C X +C X +A Z +C X +C Z +C X +C X +C X +C X +C X +A Z +A X +C X +A Z +C X +C X +A Z +C X +A Z +A Y +C X +C X +A Z +A Z +C X +C X +A Z +A Z +C Z +C X +A Z +A Z +C X +B Y +C X +C X +A Y +A Z +A Z +A Z +A Y +B Y +A Z +C X +A Y +A Z +A Y +A Z +C X +C X +C X +B X +B Y +A Z +A Z +A Z +C X +A Z +A X +B X +C X +C X +C X +A Z +A Z +A Z +C X +C X +A X +A Z +C Y +A Z +C X +C X +C Z +C X +A Z +A X +C Y +A X +C X +C X +C X +A X +A X +C X +A Z +A Z +A Z +A Z +A Z +A Y +C X +A Z +A Z +A Z +B Y +C X +C X +A X +B X +A Z +C X +A Z +C X +A Z +C X +A Z +A Y +C X +C X +C X +A Y +C X +C Y +C Z +C X +C X +B Y +C X +A Z +C Z +A Z +C X +A Y +B Y +C X +C X +C X +B X +A Z +C X +C X +C X +B X +A Z +A Z +C X +C X +C X +A Z +A X +B Y +C Y +C X +A Z +A Z +A Z +B Y +B X +C X +A Z +A Y +B Z +C X +C X +A Z +A X +C X +A Z +B Y +A Z +C Z +B X +A Z +C X +C X +C X +A Y +C X +C X +A Z +A X +C Z +A Y +C X +C X +A Y +A X +B Y +C X +C X +C X +A Z +A X +C X +A X +A X +C X +C X +A Z +C X +A Z +A X +A Z +C X +B Y +A Z +C X +A Z +A X +B X +C X +B Y +A Y +A Y +C Z +B Z +C X +C X +C X +A Z +C Z +A Y +C X +A Y +C Z +A Y +B Y +C X +C X +A Z +B Y +C X +A Z +C X +C X +A Z +B Y +C X +B Y +C X +B Y +A Y +C X +A X +A X +B X +C X +A Z +C X +B Y +A Y +C X +B Y +B X +C X +C X +A Z +B X +A X +C X +C X +B Y +C Z +B X +C X +A Z +A Z +A X +C X +A Z +C X +A Z +C X +A Z +C X +A Z +A Y +A Y +C Z +C X +A X +C X +A Z +C X +B X +A Z +A Y +A Z +C X +A Z +C X +B Y +A X +C X +A Y +C X +C X +C X +A Z +A Y +C X +A X +C X +A Z +C X +C X +A Y +C X +C X +C X +A Z +A Z +C X +A Z +B X +A Z +C X +B Y +B X +C X +B Y +A Z +A X +C X +A Y +A X +A Z +B Y +A X +C X +C X +C X +C X +A Z +C X +C X +A X +A Z +A Z +B Y +A Z +A X +A Z +C X +B X +A Y +A X +A Y +C X +A Z +C X +A Z +B X +A Y +C X +C X +A Z +A Z +C X +C Y +A Z +A Z +A Z +A Y +C X +C X +A Z +A Z +A Z +B Y +C X +A Z +C X +A Y +A Z +A Z +A Z +C X +A X +A Z +A Z +B Y +B X +A Z +A X +C X +C X +A Z +A Z +C X +A X +A Z +C X +A X +C X +A Z +A Y +C X +B Y +B Y +C X +C X +C X +C X +C X +A X +A X +A Y +A Z +A X +C X +A X +A Z +B Y +A X +A X +C X +A Z +C X +C X +C X +A Z +A X +A X +C X +C X +C X +C X +C X +C X +A Z +C X +C X +C Z +C X +A Z +A Z +C X +C X +A Z +A Z +C X +A Z +A Z +A Z +A Z +C X +A X +C X +B Y +C X +A X +A X +A Y +C X +A Y +A Z +C X +C X +C Z +C X +C X +C X +B X +C X +C X +C X +A Y +C X +C X +A Z +C X +A Y +C X +C Z +C X +C X +B X +A Z +C X +C X +C X +C X +C X +B X +A Z +C X +A Z +B X +B Y +B Y +C X +C X +C Y +A Z +C X +C X +A X +A X +A X +A X +C X +C X +C X +C X +A Z +C X +A Z +A X +C X +C X +B Y +B Y +A Z +C X +A X +A Z +A Z +B Y +C X +C X +A Z +C X +A Z +C X +B X +C X +A Y +C X +C X +A X +B Y +B Y +C Z +C X +C X +B Y +A X +C X +C X +A X +A Z +C X +C X +A Z +B Y +A Z +C X +C X +A X +A X +C X +C Z +C X +A Z +B X +C X +B Y +A Y +B X +A Z +A Z +A X +A Z +A Y +A Z +A X +A Z +C X +C X +A Z +B Y +A Z +B X +B Y +A Z +C X +C Y +A Z +C X +C X +A X +A Z +A X +C X +C X +A Z +C X +C X +C X +C X +A X +B X +A Z +A Z +C X +A X +A X +C X +C X +A Z +A Z +C X +C X +A X +A Z +C X +A X +A Z +A Z +C X +A Z +A Z +C X +C X +A Z +C X +C X +A Z +C X +C X +A Z +A X +C X +C X +A Z +A Z +C X +C X +C X +A Y +C X +C X +B Y +C X +C X +C X +C X +A Z +A Z +A X +C X +A X +C X +A Z +B X +A Z +C X +C X +A Z +A Y +C X +C X +A Z +C X +B X +B X +B Y +A Y +A Y +A Z +A Z +A Z +C X +C X +A Z +C X +B Y +C X +B Z +A Z +C X +A Z +C X +C X +C X +C X +A Z +B X +A Y +C X +A X +A Z +B Y +A X +C X +C X +C X +C X +C X +A Z +A X +A Z +A X +A Z +A Z +C X +A X +C X +B X +C Z +A X +B X +A Y +C X +A Z +A Z +B X +B Y +B Y +C X +A Z +A X +C X +C X +B Z +B X +B Y +A Z +B Y +A Z +C X +A Z +A X +A Z +C X +C X +C X +A X +C X +A Z +C X +C X +C Y +B X +C X +A X +C X +A X +A Z +C Z +A Z +C X +A Y +C X +C X +B Y +C X +C X +A Z +C X +C X +C X +A Z +C Y +C X +A X +A Z +A X +C X +A Z +A Z +B Y +B X +A Z +C X +A Z +C X +A X +C X +C Y +A Z +A Y +C Z +C X +C Z +A Z +A Z +C X +C X +A Y +A X +B Y +C X +A Y +C X +A Y +C X +A Z +B X +A Y +C X +B X +A Z +C X +A Z +A Z +A Y +A Z +A X +B Y +C X +C X +C X +A Z +A X +C X +A Y +A Y +C X +A Z +C X +C Y +C X +C X +A X +A Z +A X +A X +C X +A X +A Z +C X +A Y +A Y +C X +B Y +A Y +C X +A Z +A Z +A X +C X +A Y +C X +C X +C X +C X +A Y +A Z +B Y +A X +A Y +C X +C X +C X +B X +A Z +C X +C X +B X +A Z +A X +C X +A X +C X +B Y +A Z +C X +C X +B X +A Z +A Z +A Z +C X +C X +C X +C Y +C X +C X +A Z +C X +A Z +C X +C X +B X +A X +A Z +C X +B Z +C X +C X +A X +A Y +C X +A Z +A Z +C X +C X +C X +C X +C X +C X +B Y +A Z +C X +A X +A Z +A Z +C X +C X +C X +A Z +C X +B Y +A Z +A Z +C X +C X +C X +C X +A Z +C X +A Z +A Y +A X +C X +A Z +C X +C X +A Z +A Z +A X +A Z +C X +A Z +A X +A Z +C X +C X +C Z +A X +C X +C X +A X +A X +C X +A Z +A Z +A Z +C X +C X +A Z +B Z +A Z +A Z +C X +A Z +C X +A Z +B X +C X +A Z +B Y +B Y +C X +A X +A Z +C X +C X +A Z +C Y +B Y +A Z +C X +C X +A Z +A Z +C Z +A Z +C X +C X +A Y +C X +A Y +B X +C Z +C X +A Y +C X +B Y +C X +C X +C Z +A Z +A Z +C X +C X +A Z +B Z +C X +A Z +C X +A Z +C X +C X +C Y +C X +B Y +A X +A Z +C X +B Y +A Z +B Y +C X +C Y +C Z +A X +A Z +A X +C X +C X +A Z +A Z +C X +C X +C X +C X +B Y +B Y +A Y +C X +C X +C X +A X +C X +B Y +A Z +B Y +C X +C X +B Y +C X +B Y +C X +C X +C X +A Z +A Z +C X +C X +B Z +A X +C X +C X +A Z +C X +C X +C X +C X +A Z +C X +A Y +A Z +C X +A Z +A Y +C X +A X +C Y +A Y +A Y +C X +C X +A X +A Y +C X +B Y +A Z +B Y +C X +B X +C X +C X +C X +B Z +A Y +C X +B Y +C X +A X +C X +C X +B X +A Z +C X +A Z +C X +C X +C X +C X +C X +C X +A X +A Z +A Z +C X +C X +C Z +B X +C Z +C X +B X +C X +A Z +B Y +A Z +C Z +C X +B X +A X +A Z +C X +C X +A Z +A Z +A Z +A X +C X +C X +A Y +A Z +C X +A Z +B Y +C X +C Z +A Z +C X +C X +C X +A X +A Z +A Z +C X +A Y +A Y +C X +C X +C X +C X +C X +A Z +C X +B X +C X +B X +B Y +A Z +C X +B Y +A Y +C Z +A Z +A X +C X +A Z +C X +A Z +C Z +C X +C X +A Z +C X +C X +C X +B Y +A Z +B X +A Z +A Z +B X +A X +A Z +C X +C X +A Y +C X +A Z +B Y +C Y +A Z +C Y +C X +A Z +C X +C X +A X +C X +A X +A Z +B Y +B Y +C X +B Y +C Z +C X +C X +B Y +A Z +C X +C X +C X +C X +C X +A X +A Z +B Y +A Y +C X +C X +C Z +C X +A X +C X +A Z +B Y +A Z +B X +C X +C X +A Z +C X +A Y +A Y +C X +B X +C X +B X +A Y +A Z +A Z +C X +A Z +A X +A Z +C X +C X +C X +A Z +B X +B X +A Z +C X +B Y +C X +C X +A Z +A X +C X +B Y +C X +C X +C X +A X +A X +B Y +A Y +A X +C X +A Z +B X +A Z +B Y +C X +B Y +A Y +C X +C X +C X +A Y +A Z +A Z +A X +A Z +A X +C X +A Z +A Y +A Z +A Z +A Z +A X +A Z +A Z +C X +C X +C X +A Z +C X +C X +B Y +C X +C X +C X +C Y +A Z +A Z +A Z +C X +A Z +B X +A X +A Z +A Y +C X +A Z +C X +A Z +A Y +B Y +C X +A X +A Z +A Z +C Y +A X +B Y +B Y +C X +A Z +A Z +A Z +A Z +A Z +A Z +A Z +C X +C X +B Y +C X +C X +A Y +C X +A Z +C X +A X +C X +A X +C X +C X +B X +C X +B X +C X +C X +A Y +A X +A Z +C X +A X +A Y +A Z +C X +C X +C X +B Y +A Z +A Y +A Z +C X +A Y +B X +C X +A X +A Y +A Y +A Z +A Z +A Z +C X +A Z +A X +A Z +C X +B X +A Z +C X +C X +A X +A Z +A Z +B Y +A Z +A X +A Z +A Z +A Z +A X +B Y +A X +A Z +C X +B X +A Z +A Z +A Y +B Y +A Y +B Y +C X +C X +A Z +B Y +A Z +A X +A Z +A Z +C X +C X +A Z +A X +C X +B Y +C X +C X +C X +C Z +A Y +C X +A Y +A Y +A Y +A Z +A X +A Z +A X +A Z +B Y +C X +A Z +A Y +C X +B Y +A Z +B Y +C X +B X +B Y +C X +A Z +B X +C X +B Y +B Y +C X +C X +A Z +B X +A X +A Z +C X +A Z +C X +C X +A Z +B X +A Z +C Y +C X +A Z +A X +B Y +B Y +C Y +B Y +A Y +C X +A X +C X +C X +C X +A Y +A Z +B Y +A Z +A Y +C X +A Y +A Y +A Y +C X +B X +B X +C X +B X +C X +C X +A X +A X +A X +C X +C X +C Y +A Y +A Z +C X +B Y +C X +A X +C X +A Z +C X +C X +C X +B X +C X +C Z +A Z +C Y +B Y +A Y +A Z +A Z +A X +A Y +C X +C Y +C X +C X +A X +A Y +A Z +C X +B X +B Y +B Y +C X +C X +C X +C X +A Z +C X +C X +B Y +C X +C X +A Z +A Z +A Z +A X +A Y +A Z +C Z +A Z +C X +C X +B Y +A X +C X +A Z +C X +A X +C X +A Z +C X +C X +A Z +A X +C X +C X +C X +A Y +C X +C X +A Z +C X +A Z +C X +A Z +C X +C X +C X +C X +A Z +C X +A Z +C X +A Z +A Z +B Z +A Z +A Y +C X +B X +C X +C X +C Z +C X +C X +C X +A X +A Z +A Z +A Z +C X +C X +C X +A Z +B Y +C X +C X +C X +A Z +C X +A Y +C X +B Y +A Z +C X +B X +C X +A X +C X +C X +C X +A Z +A Z +A Z +B Z +C X +A Z +A X +C X +B X +A X +A Y +B Y +B Y +A Z +C X +C X +C X +C X +A Z +A Z +C X +A X +B Y +B Y +A Z +A Z +C X +C X +A Z +A Y +C X +A Y +A Z +A Y +C X +A Z +C X +A Z +B Y +A X +A Z +C X +A X +C X +A Z +C X +C X +A Z +B X +B X +A Z +C X +A Y +A Z +C X +A X +A X +A Z +A Y +C X +A Z +B Z +C X +A Z +C X +A Z +A Z +C X +A Z +B X +A Z +C X +A Z +A Z +C X +C X +A X +A Z +A Z +C X +A Z +C X +A Z +C X +A X +A Z +A Z +C Z +C X +C X +B Y +B Y +C X +C X +C X +B X +A X +C X +A X +B Y +C X +B Y +A Z +A Z +A Y +A Z +B X +A X +C X +B Y +C X +A Z +C X +C X +A Z +A X +C X +C X +A Z +B Y +C X +A Z +B Y +A Z +A Z +A X +C X +A Z +C X +B Y +C X +C X +C X +A X +B Y +C X +A X +C X +A Z +C X +C X +B X +B X +C X +C X +A Z +B X +C X +A X +C X +B Y +A Y +C Z +C X +A Z +C Z +B Y +B Y +A Z +C Z +C X +C X +C X +A X +C X +A Z +B X +A Z +B Y +A Z +B X +A X +A Z +A Z +C X +B X +C X +A Z +B Y +A Z +C X +A Z +A Z +A X +A Z +A X +A X +C X +B X +C X +C X +B Y +C X +C X +A X +C X +C X +C X +C X +C X +A Z +C X +C X +A Z +A Z +B Y +C X +C Z +C X +B Y +C X +C X +C X +A Z +A Y +A X +C X +C X +B Y +C Z +C X +A Y +B Y +C X +C X +A Z +A Z +C X +C X +C X +B X +C X +C X +C X +C X +B Y +A X +C X +C X +A Z +C X +C X +C X +A Z +C X +C X +B Y +C X +A Y +C X +A Z +A Z +B Y +C X +C Y +A Y +C X +B Y +A Z +B X +C X +C X +A X +C X +C X +C X +C X +A X +A X +A Z +C X +B Z +C X +A Y +A Z +A Z +C X +C X +C X +A Z +A Z +A X +A Z +A Z +A Z +A Y +A X +A Z +C X +B Y +C X +A Z +C X +C Z +B X +C X +C X +A Z +A X +B X +C X +A Z +A Z +A Z +C Z +C X +B Y +C X +C X +C X +A Z +B Y +C X +C X +C X +C X +C X +C X +A X +C Z +B Y +A X +A X +B X +C X +C X +C X +A Z +A Z +B X +C X +C X +A Z +C X +A Z +C X +C X +C X +C X +A Z +C Y +C X +C X +A Z +A Z +A Z +A Y +A X +A X +C X +A Z +B X +A Z +C X +B X +C X +A Y +A X +C X +C X +C X +B X +B X +C X +A Z +A Z +C X +C X +A Z +B X +A Z +A Y +A X +A Y +C X +A Z +B Y +C X +A Z +C X +C X +A Z +A Z +A Y +B X +A Z +C X +A X +A Z +A Z +A Z +A X +C X +A Z +A Z +B X +A Y +C X +C X +C X +C X +B X +B Y +C X +A Z +C X +B Y +B Y +C X +B X +A Z +C X +C X +A Z +B Y +C X +A Z +C X +C X +A Z +C X +A Z +A X +C X +C X +A X +A Z +C X +A X +C X +C X +A X +C X +A X +A Y +A Z +A Y +A Z +C X +A Z +A Z +B Z +A Y +A Z +C X +A Z +C X +A X +C X +C Y +C X +C X +C X +A Z +B X +C X +C X +A Z +A Z +C Z +C X +A X +A Y +B Y +A Z +A X +B X +C X +C X +C X +A Y +C X +A Z +C X +C X +A Z +A X +C X +C Z +C X +C X +C X +A Z +A Y +C X +C X +A Z +C X +C Y +C X +C X +A Z +A X +C X +B X +A Z +A Z +C X +A Z +A Z +C X +A Y +C Y +A Z +A Z +B X +C X +A Z +A Z +C X +C X +C X +B Y +A Z +B Y +C X +B X +A X +C X +A Z +A Y +C X +A Z +C Z +A X +C X +A Z +C X +C X +A Z +C X +A Y +C X +C X +A Y +C X +B X +C X +C X +B Y +A X +C X +A Y +B Y +C X +A X +A Z +C Z +A X +C X +C X +B X +A Z +B Z +A Z +A X +A Y +C X +A X +B X +C X +C X +C X +C X +A Z +C X +A Z +A Z +C X +B X +C X +A Y +A Z +A X +A X +C X +A Y +C X +C X +A Y +C X +B X +A Z +C X +A Z +B X +A Z +B Y +C X +C X +C X +A Z +C X +C X +A X +C X +A Z +C X +C X +A Z +C X +A X +B Y +A Y +C X +C X +C X +A X +C X +A Z +C X +A X +C X +C X +A Y +C X +C X +C X +C X +A Z +C X +C X +A Y +A Z +C X +C X +C X +A Z +A Z +C Z +A Y +C X +C X +B Z +B Y +B Y +B Y +C Z +B Y +A Z +B X +C X +A Z +A Y +C X +B Y +C X +A X +B X +A Z +A Z +C X +C Y +A Z +B Y +A Z +A Z +C X +C X +B Y +C X +A Z +C Z +A X +C X +C X +C X +A Z +C X +B X +B Y +C X +A Z +A Z +C X +A Z +C Z +C X +B X +A X +B Z +A Z +C X +A X +C X +C X +C X +C X +A Z +C X +C X +C X +C X +A Z +A Z +C X +C X +A X +A Z +C X +A X +C X +C Y +C X +A Z +B X +A Y +A Z +C Y +A Z +C X +A Y +C X +A X +C X +A X +C X +A Z +C X +A X +A Z +A X +A Y +C Z +C X +A X +A Z +A Z +A Z +A Z +C X +C X +C Z +A X +A Z +B Y +A Z +A Z +B X +B Y +A X +A Y +A Z +C X +A Z +C X +A Z +B X +B X +C X +C X +C X +A X +C X +A Z +B X +A Y +B X +C X +A X +C X +A X +A Z +A Z +A Z +C X +B Y +C X +B Y +C X +A Z +A Z +A Z +C X +C X +B Y +A Y +C Y +A Z +C X +C X +A Z +C X +A Z +C Z +B X +C X +C X +A Z +B Y +A Y +C X +A X diff --git a/d02_output.txt b/d02_output.txt new file mode 100644 index 0000000..eafc6c1 --- /dev/null +++ b/d02_output.txt @@ -0,0 +1,2 @@ +13009 +10398