From 5689b827318c7eb3398dbb2ecd2d26c33326dad9 Mon Sep 17 00:00:00 2001 From: Marcus Penate Date: Sat, 4 Dec 2021 15:30:14 -0500 Subject: [PATCH] Day 4 submission --- Day 4/Marcus/cpp/part1.cpp | 91 +++++++++++++++++++++++++++++++++ Day 4/Marcus/cpp/part2.cpp | 100 +++++++++++++++++++++++++++++++++++++ 2 files changed, 191 insertions(+) create mode 100644 Day 4/Marcus/cpp/part1.cpp create mode 100644 Day 4/Marcus/cpp/part2.cpp diff --git a/Day 4/Marcus/cpp/part1.cpp b/Day 4/Marcus/cpp/part1.cpp new file mode 100644 index 0000000..0b5bd0d --- /dev/null +++ b/Day 4/Marcus/cpp/part1.cpp @@ -0,0 +1,91 @@ +#include +#include +#include + +using namespace std; + +struct board +{ + int nums[25]; + + friend istream &operator>>( istream &input, board &b ) { + for(int i = 0; i < 25; i++) input >> b.nums[i]; + return input; + } + + bool marked[25]; +}; + +bool is_winning(board b); +int board_score(board b, int last_drawn); + +int main() +{ + int drawing[100]; + + vector boards; + board next_board; + + for(int i = 0; i < 100; i++) cin >> drawing[i]; + + while (cin >> next_board) + { + memset(next_board.marked, false, 25); + boards.push_back(next_board); + } + + for(int i = 0; i < 100; i++) + { + for(int j = 0; j < boards.size(); j++) + { + for(int k = 0; k < 25; k++) + { + if (drawing[i] == boards[j].nums[k]) + { + boards[j].marked[k] = true; + if (is_winning(boards[j])) + { + cout << board_score(boards[j], drawing[i]) << endl; + return 0; + } + } + } + } + } + + return 0; +} + +bool is_winning(board b) +{ + for(int i = 0; i < 5; i++) + { + if (b.marked[5*i] && b.marked[5*i+1] && b.marked[5*i+2] && b.marked[5*i+3] && b.marked[5*i+4]) + { + return true; + } + } + + for(int i = 0; i < 5; i++) + { + if (b.marked[i] && b.marked[i+5] && b.marked[i+10] && b.marked[i+15] && b.marked[i+20]) + { + return true; + } + } + + return false; +} + +int board_score(board b, int last_drawn) +{ + int sum = 0; + for(int i = 0; i < 25; i++) + { + if (!b.marked[i]) + { + sum += b.nums[i]; + } + } + return last_drawn*sum; +} diff --git a/Day 4/Marcus/cpp/part2.cpp b/Day 4/Marcus/cpp/part2.cpp new file mode 100644 index 0000000..3408425 --- /dev/null +++ b/Day 4/Marcus/cpp/part2.cpp @@ -0,0 +1,100 @@ +#include +#include +#include + +using namespace std; + +struct board +{ + int nums[25]; + + friend istream &operator>>( istream &input, board &b ) { + for(int i = 0; i < 25; i++) input >> b.nums[i]; + return input; + } + + bool marked[25]; +}; + +bool is_winning(board b); +int board_score(board b, int last_drawn); + +int main() +{ + int drawing[100]; + + vector boards; + board next_board; + + for(int i = 0; i < 100; i++) cin >> drawing[i]; + + while (cin >> next_board) + { + memset(next_board.marked, false, 25); + boards.push_back(next_board); + } + + for(int i = 0; i < 100; i++) + { + for(int j = 0; j < boards.size(); j++) + { + for(int k = 0; k < 25; k++) + { + if (drawing[i] == boards[j].nums[k]) + { + boards[j].marked[k] = true; + if (is_winning(boards[j])) + { + if (1 == boards.size()) + { + cout << board_score(boards[j], drawing[i]) << endl; + return 0; + } + else + { + boards.erase(boards.begin() + j); + j--; + break; + } + } + } + } + } + } + + return 0; +} + +bool is_winning(board b) +{ + for(int i = 0; i < 5; i++) + { + if (b.marked[5*i] && b.marked[5*i+1] && b.marked[5*i+2] && b.marked[5*i+3] && b.marked[5*i+4]) + { + return true; + } + } + + for(int i = 0; i < 5; i++) + { + if (b.marked[i] && b.marked[i+5] && b.marked[i+10] && b.marked[i+15] && b.marked[i+20]) + { + return true; + } + } + + return false; +} + +int board_score(board b, int last_drawn) +{ + int sum = 0; + for(int i = 0; i < 25; i++) + { + if (!b.marked[i]) + { + sum += b.nums[i]; + } + } + return last_drawn*sum; +} \ No newline at end of file