78 lines
2.1 KiB
C#
78 lines
2.1 KiB
C#
// Define a 2D array to hold the light values.
|
|
bool[,] lights = new bool[1000,1000];
|
|
int[,] brightness = new int[1000,1000];
|
|
|
|
// Parse the instructions.
|
|
foreach(string line in File.ReadLines("input.txt")){
|
|
string[] words = line.Split(' ');
|
|
string action = string.Empty;
|
|
string start = string.Empty;
|
|
string end = string.Empty;
|
|
|
|
switch(words[0]){
|
|
case "turn":
|
|
action = words[1];
|
|
start = words[2];
|
|
end = words[4];
|
|
break;
|
|
case "toggle":
|
|
action = words[0];
|
|
start = words[1];
|
|
end = words[3];
|
|
break;
|
|
}
|
|
|
|
int startX = Int32.Parse(start.Split(',')[0]);
|
|
int startY = Int32.Parse(start.Split(',')[1]);
|
|
int endX = Int32.Parse(end.Split(',')[0]);
|
|
int endY = Int32.Parse(end.Split(',')[1]);
|
|
|
|
// Iterate through the x numbers.
|
|
for(int x = startX; x <= endX; x++){
|
|
// Iterate through the y values for this row.
|
|
for(int y = startY; y <= endY; y++){
|
|
switch(action){
|
|
case "on":
|
|
lights[x,y] = true;
|
|
brightness[x,y]++;
|
|
break;
|
|
case "off":
|
|
lights[x,y] = false;
|
|
if(brightness[x,y] > 0){
|
|
brightness[x,y]--;
|
|
}
|
|
break;
|
|
case "toggle":
|
|
brightness[x,y] += 2;
|
|
switch(lights[x,y]){
|
|
case true:
|
|
lights[x,y] = false;
|
|
break;
|
|
case false:
|
|
lights[x,y] = true;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Count up how many lights are on.
|
|
int lightsOn = 0;
|
|
foreach(bool light in lights){
|
|
if(light == true){
|
|
lightsOn++;
|
|
}
|
|
}
|
|
|
|
// Count up the total brightness.
|
|
int totalBrightness = 0;
|
|
foreach(int level in brightness){
|
|
totalBrightness += level;
|
|
}
|
|
|
|
// Print totals.
|
|
Console.WriteLine("Part 1: " + lightsOn);
|
|
Console.WriteLine("Part 2: " + totalBrightness);
|