#include <iostream>
using namespace std;
const int SIZE = 8;
void gridDefaultify(char[][SIZE], int);
void gridDisplay(char[][SIZE], int);
void nextTurn(char[][SIZE], char[][SIZE], int&);
int countInfected(char[][SIZE], int);
int main(){
int currentDay = 0;
char gridCurrent[SIZE][SIZE];
char gridUpdate[SIZE][SIZE];
int xToInfect;
int yToInfect;
gridDefaultify(gridCurrent, SIZE);
gridDefaultify(gridUpdate, SIZE);
cout << "Please enter a location to infect: ";
while(true){
cin >> xToInfect >> yToInfect;
xToInfect--;
yToInfect--;
if(xToInfect < 0 || yToInfect < 0 || xToInfect >= SIZE || yToInfect >= SIZE){
cout << "Those coordinates are outside the bounds of this region." << endl;
cout << "Please enter another location to infect: ";
continue;
} else {
gridCurrent[xToInfect][yToInfect] = 'i';
break;
}
}
gridDisplay(gridCurrent, currentDay);
while(true){
nextTurn(gridCurrent, gridUpdate, currentDay);
gridDisplay(gridCurrent, currentDay);
if(countInfected(gridCurrent, SIZE) == 0) break;
}
cout << "It took " << currentDay + 1 << " days for the outbreak to end";
cout << endl;
return 0;
}
void gridDefaultify(char arr[][SIZE], int arrSize){
for(int x = 0; x < arrSize; x++){
for(int y = 0; y < arrSize; y++){
arr[x][y] = 's';
}
}
return;
}
void gridDisplay(char arr[][SIZE], int day){
cout << "Day " << day << endl;
for(int x = 0; x < SIZE; x++){
for(int y = 0; y < SIZE; y++){
cout << arr[x][y] <<" ";
}
cout << endl;
}
cout << endl;
return;
}
void nextTurn(char today[][SIZE], char update[][SIZE], int& day){
day++;
int xCheck;
int yCheck;
for(int x = 0; x < SIZE; x++){
for(int y = 0; y < SIZE; y++){
if(today[x][y] == 'i' || today[x][y] == 'r'){
update[x][y] = 'r';
}
if(today[x][y] == 's'){
for(int xCheck = x-1; xCheck <= x+1; xCheck++){
for(int yCheck = y-1; yCheck <= y+1; yCheck++){
if(xCheck == x && yCheck == y){
} else {
if(xCheck >= 0 && yCheck >= 0 && xCheck < SIZE && yCheck < SIZE){
if(today[xCheck][yCheck] == 'i'){
update[x][y] = 'i';
}
}
}
}
}
}
}
}
for(int x = 0; x < SIZE; x++){
for(int y = 0; y < SIZE; y++){
today[x][y] = update[x][y];
}
}
}
int countInfected(char arr[][SIZE], int arrSize){
int count = 0;
for(int x = 0; x < arrSize; x++){
for(int y = 0; y < arrSize; y++){
if(arr[x][y] == 'i') count++;
}
}
return count;
}