This commit is contained in:
zv0n 2022-12-17 15:10:05 +01:00
parent 30af58efcf
commit bbb8000456
3 changed files with 282 additions and 0 deletions

16
2022/14/Makefile Normal file
View File

@ -0,0 +1,16 @@
CXX ?= c++
CXXFLAGS ?= -std=c++11 -Wall -Wextra -pedantic -g #-O2
PROJECT = sand
all: ${PROJECT}
${PROJECT}: main.cpp
${CXX} ${CXXFLAGS} -o $@ $^
test: ${PROJECT}
./${PROJECT}
clean:
${RM} *.o ${PROJECT}
.PHONY: all clean test

155
2022/14/input Normal file
View File

@ -0,0 +1,155 @@
529,71 -> 529,72 -> 539,72 -> 539,71
484,168 -> 489,168
493,23 -> 493,13 -> 493,23 -> 495,23 -> 495,19 -> 495,23 -> 497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,14 -> 499,23 -> 501,23 -> 501,14 -> 501,23 -> 503,23 -> 503,21 -> 503,23 -> 505,23 -> 505,18 -> 505,23
502,165 -> 507,165
481,165 -> 486,165
527,96 -> 527,98 -> 525,98 -> 525,106 -> 536,106 -> 536,98 -> 530,98 -> 530,96
528,68 -> 528,59 -> 528,68 -> 530,68 -> 530,63 -> 530,68 -> 532,68 -> 532,64 -> 532,68 -> 534,68 -> 534,66 -> 534,68 -> 536,68 -> 536,60 -> 536,68
493,23 -> 493,13 -> 493,23 -> 495,23 -> 495,19 -> 495,23 -> 497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,14 -> 499,23 -> 501,23 -> 501,14 -> 501,23 -> 503,23 -> 503,21 -> 503,23 -> 505,23 -> 505,18 -> 505,23
500,176 -> 505,176
513,124 -> 513,126 -> 510,126 -> 510,134 -> 524,134 -> 524,126 -> 518,126 -> 518,124
498,140 -> 498,142 -> 497,142 -> 497,150 -> 507,150 -> 507,142 -> 502,142 -> 502,140
493,23 -> 493,13 -> 493,23 -> 495,23 -> 495,19 -> 495,23 -> 497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,14 -> 499,23 -> 501,23 -> 501,14 -> 501,23 -> 503,23 -> 503,21 -> 503,23 -> 505,23 -> 505,18 -> 505,23
527,96 -> 527,98 -> 525,98 -> 525,106 -> 536,106 -> 536,98 -> 530,98 -> 530,96
506,42 -> 510,42
524,55 -> 524,46 -> 524,55 -> 526,55 -> 526,45 -> 526,55 -> 528,55 -> 528,47 -> 528,55 -> 530,55 -> 530,46 -> 530,55 -> 532,55 -> 532,48 -> 532,55
490,156 -> 495,156
496,174 -> 501,174
503,40 -> 507,40
501,136 -> 501,137 -> 514,137 -> 514,136
493,23 -> 493,13 -> 493,23 -> 495,23 -> 495,19 -> 495,23 -> 497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,14 -> 499,23 -> 501,23 -> 501,14 -> 501,23 -> 503,23 -> 503,21 -> 503,23 -> 505,23 -> 505,18 -> 505,23
493,23 -> 493,13 -> 493,23 -> 495,23 -> 495,19 -> 495,23 -> 497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,14 -> 499,23 -> 501,23 -> 501,14 -> 501,23 -> 503,23 -> 503,21 -> 503,23 -> 505,23 -> 505,18 -> 505,23
524,55 -> 524,46 -> 524,55 -> 526,55 -> 526,45 -> 526,55 -> 528,55 -> 528,47 -> 528,55 -> 530,55 -> 530,46 -> 530,55 -> 532,55 -> 532,48 -> 532,55
495,165 -> 500,165
537,85 -> 537,77 -> 537,85 -> 539,85 -> 539,76 -> 539,85 -> 541,85 -> 541,75 -> 541,85
527,96 -> 527,98 -> 525,98 -> 525,106 -> 536,106 -> 536,98 -> 530,98 -> 530,96
524,55 -> 524,46 -> 524,55 -> 526,55 -> 526,45 -> 526,55 -> 528,55 -> 528,47 -> 528,55 -> 530,55 -> 530,46 -> 530,55 -> 532,55 -> 532,48 -> 532,55
529,71 -> 529,72 -> 539,72 -> 539,71
488,165 -> 493,165
528,68 -> 528,59 -> 528,68 -> 530,68 -> 530,63 -> 530,68 -> 532,68 -> 532,64 -> 532,68 -> 534,68 -> 534,66 -> 534,68 -> 536,68 -> 536,60 -> 536,68
524,42 -> 528,42
537,85 -> 537,77 -> 537,85 -> 539,85 -> 539,76 -> 539,85 -> 541,85 -> 541,75 -> 541,85
533,118 -> 538,118
537,85 -> 537,77 -> 537,85 -> 539,85 -> 539,76 -> 539,85 -> 541,85 -> 541,75 -> 541,85
500,42 -> 504,42
528,68 -> 528,59 -> 528,68 -> 530,68 -> 530,63 -> 530,68 -> 532,68 -> 532,64 -> 532,68 -> 534,68 -> 534,66 -> 534,68 -> 536,68 -> 536,60 -> 536,68
493,153 -> 498,153
472,176 -> 477,176
491,162 -> 496,162
528,68 -> 528,59 -> 528,68 -> 530,68 -> 530,63 -> 530,68 -> 532,68 -> 532,64 -> 532,68 -> 534,68 -> 534,66 -> 534,68 -> 536,68 -> 536,60 -> 536,68
487,159 -> 492,159
521,40 -> 525,40
501,136 -> 501,137 -> 514,137 -> 514,136
475,174 -> 480,174
528,68 -> 528,59 -> 528,68 -> 530,68 -> 530,63 -> 530,68 -> 532,68 -> 532,64 -> 532,68 -> 534,68 -> 534,66 -> 534,68 -> 536,68 -> 536,60 -> 536,68
484,162 -> 489,162
515,40 -> 519,40
528,68 -> 528,59 -> 528,68 -> 530,68 -> 530,63 -> 530,68 -> 532,68 -> 532,64 -> 532,68 -> 534,68 -> 534,66 -> 534,68 -> 536,68 -> 536,60 -> 536,68
485,172 -> 490,172
512,34 -> 516,34
537,85 -> 537,77 -> 537,85 -> 539,85 -> 539,76 -> 539,85 -> 541,85 -> 541,75 -> 541,85
492,172 -> 497,172
501,136 -> 501,137 -> 514,137 -> 514,136
493,23 -> 493,13 -> 493,23 -> 495,23 -> 495,19 -> 495,23 -> 497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,14 -> 499,23 -> 501,23 -> 501,14 -> 501,23 -> 503,23 -> 503,21 -> 503,23 -> 505,23 -> 505,18 -> 505,23
489,174 -> 494,174
516,121 -> 521,121
512,118 -> 517,118
529,115 -> 534,115
519,118 -> 524,118
493,23 -> 493,13 -> 493,23 -> 495,23 -> 495,19 -> 495,23 -> 497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,14 -> 499,23 -> 501,23 -> 501,14 -> 501,23 -> 503,23 -> 503,21 -> 503,23 -> 505,23 -> 505,18 -> 505,23
513,124 -> 513,126 -> 510,126 -> 510,134 -> 524,134 -> 524,126 -> 518,126 -> 518,124
505,26 -> 505,28 -> 500,28 -> 500,31 -> 513,31 -> 513,28 -> 509,28 -> 509,26
528,68 -> 528,59 -> 528,68 -> 530,68 -> 530,63 -> 530,68 -> 532,68 -> 532,64 -> 532,68 -> 534,68 -> 534,66 -> 534,68 -> 536,68 -> 536,60 -> 536,68
524,55 -> 524,46 -> 524,55 -> 526,55 -> 526,45 -> 526,55 -> 528,55 -> 528,47 -> 528,55 -> 530,55 -> 530,46 -> 530,55 -> 532,55 -> 532,48 -> 532,55
505,26 -> 505,28 -> 500,28 -> 500,31 -> 513,31 -> 513,28 -> 509,28 -> 509,26
498,140 -> 498,142 -> 497,142 -> 497,150 -> 507,150 -> 507,142 -> 502,142 -> 502,140
509,40 -> 513,40
493,23 -> 493,13 -> 493,23 -> 495,23 -> 495,19 -> 495,23 -> 497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,14 -> 499,23 -> 501,23 -> 501,14 -> 501,23 -> 503,23 -> 503,21 -> 503,23 -> 505,23 -> 505,18 -> 505,23
528,68 -> 528,59 -> 528,68 -> 530,68 -> 530,63 -> 530,68 -> 532,68 -> 532,64 -> 532,68 -> 534,68 -> 534,66 -> 534,68 -> 536,68 -> 536,60 -> 536,68
524,55 -> 524,46 -> 524,55 -> 526,55 -> 526,45 -> 526,55 -> 528,55 -> 528,47 -> 528,55 -> 530,55 -> 530,46 -> 530,55 -> 532,55 -> 532,48 -> 532,55
493,23 -> 493,13 -> 493,23 -> 495,23 -> 495,19 -> 495,23 -> 497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,14 -> 499,23 -> 501,23 -> 501,14 -> 501,23 -> 503,23 -> 503,21 -> 503,23 -> 505,23 -> 505,18 -> 505,23
525,112 -> 530,112
527,96 -> 527,98 -> 525,98 -> 525,106 -> 536,106 -> 536,98 -> 530,98 -> 530,96
524,55 -> 524,46 -> 524,55 -> 526,55 -> 526,45 -> 526,55 -> 528,55 -> 528,47 -> 528,55 -> 530,55 -> 530,46 -> 530,55 -> 532,55 -> 532,48 -> 532,55
537,121 -> 542,121
494,159 -> 499,159
513,124 -> 513,126 -> 510,126 -> 510,134 -> 524,134 -> 524,126 -> 518,126 -> 518,124
509,121 -> 514,121
493,23 -> 493,13 -> 493,23 -> 495,23 -> 495,19 -> 495,23 -> 497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,14 -> 499,23 -> 501,23 -> 501,14 -> 501,23 -> 503,23 -> 503,21 -> 503,23 -> 505,23 -> 505,18 -> 505,23
528,68 -> 528,59 -> 528,68 -> 530,68 -> 530,63 -> 530,68 -> 532,68 -> 532,64 -> 532,68 -> 534,68 -> 534,66 -> 534,68 -> 536,68 -> 536,60 -> 536,68
493,23 -> 493,13 -> 493,23 -> 495,23 -> 495,19 -> 495,23 -> 497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,14 -> 499,23 -> 501,23 -> 501,14 -> 501,23 -> 503,23 -> 503,21 -> 503,23 -> 505,23 -> 505,18 -> 505,23
537,85 -> 537,77 -> 537,85 -> 539,85 -> 539,76 -> 539,85 -> 541,85 -> 541,75 -> 541,85
528,88 -> 528,89 -> 542,89 -> 542,88
498,140 -> 498,142 -> 497,142 -> 497,150 -> 507,150 -> 507,142 -> 502,142 -> 502,140
524,55 -> 524,46 -> 524,55 -> 526,55 -> 526,45 -> 526,55 -> 528,55 -> 528,47 -> 528,55 -> 530,55 -> 530,46 -> 530,55 -> 532,55 -> 532,48 -> 532,55
524,55 -> 524,46 -> 524,55 -> 526,55 -> 526,45 -> 526,55 -> 528,55 -> 528,47 -> 528,55 -> 530,55 -> 530,46 -> 530,55 -> 532,55 -> 532,48 -> 532,55
513,124 -> 513,126 -> 510,126 -> 510,134 -> 524,134 -> 524,126 -> 518,126 -> 518,124
529,71 -> 529,72 -> 539,72 -> 539,71
524,55 -> 524,46 -> 524,55 -> 526,55 -> 526,45 -> 526,55 -> 528,55 -> 528,47 -> 528,55 -> 530,55 -> 530,46 -> 530,55 -> 532,55 -> 532,48 -> 532,55
505,26 -> 505,28 -> 500,28 -> 500,31 -> 513,31 -> 513,28 -> 509,28 -> 509,26
505,162 -> 510,162
523,121 -> 528,121
493,176 -> 498,176
493,23 -> 493,13 -> 493,23 -> 495,23 -> 495,19 -> 495,23 -> 497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,14 -> 499,23 -> 501,23 -> 501,14 -> 501,23 -> 503,23 -> 503,21 -> 503,23 -> 505,23 -> 505,18 -> 505,23
501,159 -> 506,159
478,172 -> 483,172
524,55 -> 524,46 -> 524,55 -> 526,55 -> 526,45 -> 526,55 -> 528,55 -> 528,47 -> 528,55 -> 530,55 -> 530,46 -> 530,55 -> 532,55 -> 532,48 -> 532,55
524,55 -> 524,46 -> 524,55 -> 526,55 -> 526,45 -> 526,55 -> 528,55 -> 528,47 -> 528,55 -> 530,55 -> 530,46 -> 530,55 -> 532,55 -> 532,48 -> 532,55
527,96 -> 527,98 -> 525,98 -> 525,106 -> 536,106 -> 536,98 -> 530,98 -> 530,96
498,140 -> 498,142 -> 497,142 -> 497,150 -> 507,150 -> 507,142 -> 502,142 -> 502,140
497,156 -> 502,156
521,109 -> 526,109
518,112 -> 523,112
518,42 -> 522,42
505,26 -> 505,28 -> 500,28 -> 500,31 -> 513,31 -> 513,28 -> 509,28 -> 509,26
519,92 -> 519,93 -> 528,93
522,115 -> 527,115
505,26 -> 505,28 -> 500,28 -> 500,31 -> 513,31 -> 513,28 -> 509,28 -> 509,26
493,23 -> 493,13 -> 493,23 -> 495,23 -> 495,19 -> 495,23 -> 497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,14 -> 499,23 -> 501,23 -> 501,14 -> 501,23 -> 503,23 -> 503,21 -> 503,23 -> 505,23 -> 505,18 -> 505,23
512,42 -> 516,42
537,85 -> 537,77 -> 537,85 -> 539,85 -> 539,76 -> 539,85 -> 541,85 -> 541,75 -> 541,85
513,124 -> 513,126 -> 510,126 -> 510,134 -> 524,134 -> 524,126 -> 518,126 -> 518,124
493,23 -> 493,13 -> 493,23 -> 495,23 -> 495,19 -> 495,23 -> 497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,14 -> 499,23 -> 501,23 -> 501,14 -> 501,23 -> 503,23 -> 503,21 -> 503,23 -> 505,23 -> 505,18 -> 505,23
498,140 -> 498,142 -> 497,142 -> 497,150 -> 507,150 -> 507,142 -> 502,142 -> 502,140
482,174 -> 487,174
493,23 -> 493,13 -> 493,23 -> 495,23 -> 495,19 -> 495,23 -> 497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,14 -> 499,23 -> 501,23 -> 501,14 -> 501,23 -> 503,23 -> 503,21 -> 503,23 -> 505,23 -> 505,18 -> 505,23
537,85 -> 537,77 -> 537,85 -> 539,85 -> 539,76 -> 539,85 -> 541,85 -> 541,75 -> 541,85
493,23 -> 493,13 -> 493,23 -> 495,23 -> 495,19 -> 495,23 -> 497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,14 -> 499,23 -> 501,23 -> 501,14 -> 501,23 -> 503,23 -> 503,21 -> 503,23 -> 505,23 -> 505,18 -> 505,23
479,176 -> 484,176
486,176 -> 491,176
498,140 -> 498,142 -> 497,142 -> 497,150 -> 507,150 -> 507,142 -> 502,142 -> 502,140
481,170 -> 486,170
513,124 -> 513,126 -> 510,126 -> 510,134 -> 524,134 -> 524,126 -> 518,126 -> 518,124
493,23 -> 493,13 -> 493,23 -> 495,23 -> 495,19 -> 495,23 -> 497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,14 -> 499,23 -> 501,23 -> 501,14 -> 501,23 -> 503,23 -> 503,21 -> 503,23 -> 505,23 -> 505,18 -> 505,23
515,36 -> 519,36
512,38 -> 516,38
498,140 -> 498,142 -> 497,142 -> 497,150 -> 507,150 -> 507,142 -> 502,142 -> 502,140
528,88 -> 528,89 -> 542,89 -> 542,88
537,85 -> 537,77 -> 537,85 -> 539,85 -> 539,76 -> 539,85 -> 541,85 -> 541,75 -> 541,85
498,162 -> 503,162
524,55 -> 524,46 -> 524,55 -> 526,55 -> 526,45 -> 526,55 -> 528,55 -> 528,47 -> 528,55 -> 530,55 -> 530,46 -> 530,55 -> 532,55 -> 532,48 -> 532,55
513,124 -> 513,126 -> 510,126 -> 510,134 -> 524,134 -> 524,126 -> 518,126 -> 518,124
505,26 -> 505,28 -> 500,28 -> 500,31 -> 513,31 -> 513,28 -> 509,28 -> 509,26
515,115 -> 520,115
509,165 -> 514,165
528,68 -> 528,59 -> 528,68 -> 530,68 -> 530,63 -> 530,68 -> 532,68 -> 532,64 -> 532,68 -> 534,68 -> 534,66 -> 534,68 -> 536,68 -> 536,60 -> 536,68
528,68 -> 528,59 -> 528,68 -> 530,68 -> 530,63 -> 530,68 -> 532,68 -> 532,64 -> 532,68 -> 534,68 -> 534,66 -> 534,68 -> 536,68 -> 536,60 -> 536,68
518,38 -> 522,38
509,36 -> 513,36
528,88 -> 528,89 -> 542,89 -> 542,88
528,68 -> 528,59 -> 528,68 -> 530,68 -> 530,63 -> 530,68 -> 532,68 -> 532,64 -> 532,68 -> 534,68 -> 534,66 -> 534,68 -> 536,68 -> 536,60 -> 536,68
524,55 -> 524,46 -> 524,55 -> 526,55 -> 526,45 -> 526,55 -> 528,55 -> 528,47 -> 528,55 -> 530,55 -> 530,46 -> 530,55 -> 532,55 -> 532,48 -> 532,55
506,38 -> 510,38
526,118 -> 531,118
519,92 -> 519,93 -> 528,93
527,96 -> 527,98 -> 525,98 -> 525,106 -> 536,106 -> 536,98 -> 530,98 -> 530,96
505,26 -> 505,28 -> 500,28 -> 500,31 -> 513,31 -> 513,28 -> 509,28 -> 509,26
488,170 -> 493,170
530,121 -> 535,121
528,68 -> 528,59 -> 528,68 -> 530,68 -> 530,63 -> 530,68 -> 532,68 -> 532,64 -> 532,68 -> 534,68 -> 534,66 -> 534,68 -> 536,68 -> 536,60 -> 536,68
493,23 -> 493,13 -> 493,23 -> 495,23 -> 495,19 -> 495,23 -> 497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,14 -> 499,23 -> 501,23 -> 501,14 -> 501,23 -> 503,23 -> 503,21 -> 503,23 -> 505,23 -> 505,18 -> 505,23
493,23 -> 493,13 -> 493,23 -> 495,23 -> 495,19 -> 495,23 -> 497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,14 -> 499,23 -> 501,23 -> 501,14 -> 501,23 -> 503,23 -> 503,21 -> 503,23 -> 505,23 -> 505,18 -> 505,23
528,68 -> 528,59 -> 528,68 -> 530,68 -> 530,63 -> 530,68 -> 532,68 -> 532,64 -> 532,68 -> 534,68 -> 534,66 -> 534,68 -> 536,68 -> 536,60 -> 536,68
524,55 -> 524,46 -> 524,55 -> 526,55 -> 526,45 -> 526,55 -> 528,55 -> 528,47 -> 528,55 -> 530,55 -> 530,46 -> 530,55 -> 532,55 -> 532,48 -> 532,55
493,23 -> 493,13 -> 493,23 -> 495,23 -> 495,19 -> 495,23 -> 497,23 -> 497,15 -> 497,23 -> 499,23 -> 499,14 -> 499,23 -> 501,23 -> 501,14 -> 501,23 -> 503,23 -> 503,21 -> 503,23 -> 505,23 -> 505,18 -> 505,23
527,96 -> 527,98 -> 525,98 -> 525,106 -> 536,106 -> 536,98 -> 530,98 -> 530,96

111
2022/14/main.cpp Normal file
View File

@ -0,0 +1,111 @@
#include <fstream>
#include <iostream>
#include <sstream>
#include <vector>
std::vector<std::vector<bool>> getMap( std::ifstream &file ) {
std::vector<std::vector<bool>> ret{};
std::vector<std::vector<std::pair<int,int>>> rocks{};
int max_y = 0;
std::string str;
char tmp_c;
while ( std::getline( file, str ) ) {
rocks.emplace_back();
int x = 0;
int y = 0;
std::stringstream ss( str );
while(ss >> x) {
ss >> tmp_c;
ss >> y;
if(y > max_y) {
max_y = y;
}
rocks.back().push_back({x,y});
ss >> tmp_c;
ss >> tmp_c;
}
}
// std::cout << "Resizing: " << max_y << std::endl;
ret.resize(max_y+1);
for(int i = 0; i <= max_y; i++) {
ret[i].resize(1000, false);
}
for(auto &rock_line : rocks) {
for(size_t i = 0; i < rock_line.size() - 1; i++) {
// std::cout << "i: " << i << std::endl;
// std::cout << "X: " << rock_line[i].first << "->" << rock_line[i+1].first << std::endl;
// std::cout << "Y: " << rock_line[i].second << "->" << rock_line[i+1].second << std::endl;
int x_diff = rock_line[i+1].first - rock_line[i].first;
x_diff /= abs(x_diff);
int y_diff = rock_line[i+1].second - rock_line[i].second;
y_diff /= abs(y_diff);
int x = rock_line[i].first;
int y = rock_line[i].second;
while(x != rock_line[i+1].first || y != rock_line[i+1].second) {
// std::cout << "X: " << x << ", Y: " << y << std::endl;
ret[y][x] = true;
x += x_diff;
y += y_diff;
}
ret[y][x] = true;
}
}
return ret;
}
bool willRest(std::vector<std::vector<bool>> &map, size_t x_source, size_t y_source) {
size_t x = x_source;
size_t y = y_source;
while(y < map.size() - 1) {
// std::cout << "CHECKING " << "{" << x << ", " << y << "}" << std::endl;
if(!map[y+1][x]) {
y++;
} else if(!map[y+1][x-1]) {
y++;
x--;
} else if(!map[y+1][x+1]) {
y++;
x++;
} else {
map[y][x] = true;
if(x == x_source && y == y_source) {
return false;
}
// std::cout << "TRUE" << std::endl;
return true;
}
}
return false;
}
size_t part1(const std::vector<std::vector<bool>> &map_in) {
auto map = map_in;
size_t result = 0;
while(willRest(map, 500, 0)) {
result++;
}
return result;
}
size_t part2(const std::vector<std::vector<bool>> &map_in) {
auto map = map_in;
map.resize(map.size()+2);
map[map.size()-2].resize(1000, false);
map.back().resize(1000, true);
size_t result = 0;
while(willRest(map, 500, 0)) {
result++;
}
result++; // the source position sand
return result;
}
int main() {
std::ifstream input_file( "input" );
auto map = getMap( input_file );
std::cout << "There will be \033[91;1m" << part1(map)
<< "\033[0m grains of sand before it starts falling into the abyss." << std::endl;
std::cout << "There will be \033[91;1m" << part2(map)
<< "\033[0m grains of sand before it stabilizes." << std::endl;
}