1
0
Fork 0
This commit is contained in:
Marcus Penate 2022-12-08 16:48:06 -05:00
parent 8fe274116c
commit e12db36a20
2 changed files with 176 additions and 0 deletions

93
Day8/part1.cpp Normal file
View File

@ -0,0 +1,93 @@
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
string line;
getline(cin, line);
int length = line.size();
int* forest = new int[length*length];
int in_y = 0;
do
{
for(int i = 0; i < length; i++)
{
forest[i+in_y*length] = line[i]-'0';
}
++in_y;
} while(getline(cin, line));
bool* visible = new bool[length*length];
for(int i = 0; i < length*length; i++)
{
visible[i] = false;
}
for(int x = 0; x < length; x++)
{
//top down
int vis_height = -1;
for(int y = 0; y < length; y++)
{
if (forest[x+y*length] > vis_height)
{
vis_height = forest[x+y*length];
visible[x+y*length] = true;
}
}
//bottom up
vis_height = -1;
for(int y = length-1; y >= 0; y--)
{
if (forest[x+y*length] > vis_height)
{
vis_height = forest[x+y*length];
visible[x+y*length] = true;
}
}
}
for(int y = 0; y < length; y++)
{
//Left right
int vis_height = -1;
for(int x = 0; x < length; x++)
{
if (forest[x+y*length] > vis_height)
{
vis_height = forest[x+y*length];
visible[x+y*length] = true;
}
}
//Right left
vis_height = -1;
for(int x = length-1; x >= 0; x--)
{
if (forest[x+y*length] > vis_height)
{
vis_height = forest[x+y*length];
visible[x+y*length] = true;
}
}
}
int total_vis = 0;
for(int i = 0; i < length*length; i++)
{
if(visible[i])
{
++total_vis;
}
}
cout << total_vis << endl;
delete[] visible;
delete[] forest;
}

83
Day8/part2.cpp Normal file
View File

@ -0,0 +1,83 @@
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
string line;
getline(cin, line);
int length = line.size();
int* forest = new int[length*length];
int in_y = 0;
do
{
for(int i = 0; i < length; i++)
{
forest[i+in_y*length] = line[i]-'0';
}
++in_y;
} while(getline(cin, line));
int best_vis = 0;
for(int y = 0; y < length; y++)
{
for(int x = 0; x < length; x++)
{
int north_vis = 0;
int south_vis = 0;
int west_vis = 0;
int east_vis = 0;
int cur_vis = forest[x+y*length];;
for(int j = y-1; j >= 0; j--)
{
north_vis++;
if (forest[x+j*length] >= cur_vis)
{
break;
}
}
for(int j = y+1; j < length; j++)
{
south_vis++;
if (forest[x+j*length] >= cur_vis)
{
break;
}
}
for(int i = x-1; i >= 0; i--)
{
west_vis++;
if (forest[i+y*length] >= cur_vis)
{
break;
}
}
for(int i = x+1; i<length; i++)
{
east_vis++;
if(forest[i+y*length] >= cur_vis)
{
break;
}
}
int total_vis = north_vis*south_vis*east_vis*west_vis;
if (total_vis > best_vis)
{
best_vis = total_vis;
}
}
}
cout << best_vis << endl;
delete[] forest;
}