1010// even when adding in jet index and rock type to the == comparator.
1111// 5 rows of the chamber is arbitrary, might be able to make do with less.
1212
13- // TODO: use bitset and optimize
13+ // TODO: use bitset instead of array<char>
14+ // though array<bool> might be faster than bitset
1415
1516struct Point {
1617 Point (const std::size_t row, const int col) : row (row), col(col) {}
@@ -78,9 +79,9 @@ void add_rock_to_chamber(
7879 const Rock& rock
7980) {
8081 for (const auto & ele : rock) {
82+ std::array<char , n_cols_in_chamber> temp;
83+ std::fill (std::begin (temp), std::end (temp), ' .' );
8184 while (chamber.size () <= ele.row ) {
82- std::array<char , n_cols_in_chamber> temp;
83- std::fill (std::begin (temp), std::end (temp), ' .' );
8485 chamber.push_back (temp);
8586 }
8687 }
@@ -90,6 +91,7 @@ void add_rock_to_chamber(
9091}
9192
9293void apply_jet (Rock& rock, const std::string& jets, const int jet_index, const std::vector<std::array<char , n_cols_in_chamber>>& chamber) {
94+ // Debug
9395 // for (int i = 0; i < jet_index; i++) {
9496 // std::cout << ' ';
9597 // }
@@ -125,7 +127,7 @@ void print(const Rock& rock) {
125127}
126128
127129void print_chamber (const Chamber& chamber) {
128- std::cout << chamber.size () << ' \n ' ;
130+ std::cout << " Chamber size: " << chamber.size () << ' \n ' ;
129131 for (std::size_t i = chamber.size ()-1 ; i > 0 ; i--) {
130132 std::cout << " |" ;
131133 for (const auto & ele : chamber[i]) {
@@ -149,7 +151,7 @@ std::tuple<bool, std::size_t, std::size_t> check_if_seen_else_add(
149151 return {true , it->second , it->first .highest };
150152 }
151153 history[memory] = iteration;
152- return {false , - 1 , - 1 };
154+ return {false , 0 , 0 };
153155}
154156
155157int main (int argc, char * argv[]) {
@@ -179,14 +181,15 @@ int main(int argc, char * argv[]) {
179181 int rock_count = 0 ;
180182 int jet_index = 0 ;
181183 std::vector<std::array<char , n_cols_in_chamber>> chamber;
184+ std::unordered_map<Memory, std::size_t , MemoryHash> history;
182185 std::array<char , n_cols_in_chamber> temp;
183186 std::fill (std::begin (temp), std::end (temp), ' #' );
184187 chamber.push_back (temp);
185- Chamber top_n;
188+
189+ Chamber top_n; // Mini chamber, top_n rows of chamber
186190 for (auto & row : top_n) {
187191 std::fill (std::begin (row), std::end (row), 0 );
188192 }
189- std::unordered_map<Memory, std::size_t , MemoryHash> history;
190193
191194 while (rock_count < 1000000000000 ) {
192195 auto rock = rocks[rock_count % 5 ];
0 commit comments