day 2
This commit is contained in:
parent
af90d44169
commit
a65d4fb1e8
4 changed files with 92 additions and 2 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
@ -1,3 +1,8 @@
|
|||
testing/
|
||||
input.txt
|
||||
.idea/
|
||||
bin/
|
||||
obj/
|
||||
.vscode/
|
||||
*.sln
|
||||
*.csproj
|
|
@ -14,7 +14,7 @@ AOC but one programming language per day
|
|||
- [ ] Dart
|
||||
- [ ] SQL
|
||||
- [ ] C
|
||||
- [ ] C#
|
||||
- [x] 2: C# (i get its meant to be used with visual studio but why make sooooo many meta files)
|
||||
- [x] 1: Kotlin (holy shit its actually a good lang)
|
||||
- [ ] PHP
|
||||
- [ ] JavaScript
|
||||
|
|
79
2024/day2/Program.cs
Normal file
79
2024/day2/Program.cs
Normal file
|
@ -0,0 +1,79 @@
|
|||
const int EXAMPLE_VALUE_1 = 2;
|
||||
const int EXAMPLE_VALUE_2 = 4;
|
||||
|
||||
StreamReader inputFile;
|
||||
string input;
|
||||
|
||||
Console.Write("Use (p)rod or (e)xample? > ");
|
||||
if (Console.ReadKey().Key == ConsoleKey.E) {
|
||||
Console.WriteLine($"\nUsing example data, value should be of {EXAMPLE_VALUE_1} and {EXAMPLE_VALUE_2}");
|
||||
inputFile = File.OpenText("example.txt");
|
||||
} else {
|
||||
Console.WriteLine("\nUsing production data");
|
||||
inputFile = File.OpenText("input.txt");
|
||||
}
|
||||
input = inputFile.ReadToEnd();
|
||||
|
||||
string[] reports = input.Split("\n");
|
||||
List<string> invalidReports = [];
|
||||
Console.WriteLine($"{reports.Length} reports will be processed");
|
||||
|
||||
int validReports = 0;
|
||||
|
||||
static bool validateReport(List<int> levels) {
|
||||
bool shouldBeIncreasing = levels[0] < levels[1];
|
||||
bool hasIgnoredZeroIndex = false;
|
||||
|
||||
int lastNumber = levels[0];
|
||||
foreach(var level in levels) {
|
||||
if (levels.IndexOf(level) == 0 && !hasIgnoredZeroIndex) {
|
||||
hasIgnoredZeroIndex = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (lastNumber >= level && shouldBeIncreasing || lastNumber <= level && !shouldBeIncreasing) return false;
|
||||
if (Math.Abs(lastNumber - level) > 3) return false;
|
||||
|
||||
lastNumber = level;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Part 1
|
||||
foreach(var report in reports) {
|
||||
string[] levelsAsString = report.Split(" ");
|
||||
List <int> levels = [];
|
||||
|
||||
foreach(var levelAsString in levelsAsString) {
|
||||
levels.Add(int.Parse(levelAsString));
|
||||
}
|
||||
if (validateReport(levels)) validReports++;
|
||||
else {
|
||||
invalidReports.Add(report);
|
||||
}
|
||||
}
|
||||
|
||||
Console.WriteLine($"Part 1: {validReports} valid reports!");
|
||||
|
||||
// Part 2
|
||||
foreach(var report in invalidReports) {
|
||||
string[] levelsAsString = report.Split(" ");
|
||||
List <int> levels = [];
|
||||
|
||||
foreach(var levelAsString in levelsAsString) {
|
||||
levels.Add(int.Parse(levelAsString));
|
||||
}
|
||||
|
||||
for(var i = 0; i < levels.ToArray().Length; i++) {
|
||||
List<int> manipulatedLevels = new(levels);
|
||||
manipulatedLevels.RemoveAt(i);
|
||||
|
||||
if(validateReport(manipulatedLevels)) {
|
||||
validReports++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Console.WriteLine($"Part 2: {validReports} valid reports!");
|
6
2024/day2/example.txt
Normal file
6
2024/day2/example.txt
Normal file
|
@ -0,0 +1,6 @@
|
|||
7 6 4 2 1
|
||||
1 2 7 8 9
|
||||
9 7 6 2 1
|
||||
1 3 2 4 5
|
||||
8 6 4 4 1
|
||||
1 3 6 7 9
|
Loading…
Reference in a new issue