Add day 5

This commit is contained in:
Dimitrios Kaltzidis
2024-12-05 09:58:10 +02:00
parent d3ab280be6
commit 2d14ac7819
4 changed files with 1475 additions and 0 deletions

View File

@@ -11,6 +11,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Day3", "Day3\Day3.csproj",
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Day4", "Day4\Day4.csproj", "{739F3568-EE18-464B-8A60-281606EC2A31}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Day5", "Day5\Day5.csproj", "{F6C4FEFC-795A-45A5-A227-3DCA06749BAD}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -33,6 +35,10 @@ Global
{739F3568-EE18-464B-8A60-281606EC2A31}.Debug|Any CPU.Build.0 = Debug|Any CPU
{739F3568-EE18-464B-8A60-281606EC2A31}.Release|Any CPU.ActiveCfg = Release|Any CPU
{739F3568-EE18-464B-8A60-281606EC2A31}.Release|Any CPU.Build.0 = Release|Any CPU
{F6C4FEFC-795A-45A5-A227-3DCA06749BAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F6C4FEFC-795A-45A5-A227-3DCA06749BAD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F6C4FEFC-795A-45A5-A227-3DCA06749BAD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F6C4FEFC-795A-45A5-A227-3DCA06749BAD}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

16
Day5/Day5.csproj Normal file
View File

@@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<None Update="input.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

86
Day5/Program.cs Normal file
View File

@@ -0,0 +1,86 @@
var lines = File.ReadAllLines("input.txt");
var pageOrderingRules = new List<(int, int)>();
var pageNumbersUpdates = new List<List<int>>();
var separatorIndex = lines.ToList().IndexOf(string.Empty);
for (var i = 0; i < separatorIndex; i++)
{
var parts = lines[i].Split('|');
pageOrderingRules.Add((int.Parse(parts[0]), int.Parse(parts[1])));
}
for (var i = separatorIndex + 1; i < lines.Length; i++)
{
var currentList = lines[i].Split(',')
.Select(int.Parse)
.ToList();
pageNumbersUpdates.Add(currentList);
}
var part1 = 0;
var part2 = 0;
foreach (var pageNumberUpdate in pageNumbersUpdates)
{
var isInRightOder = true;
for (var i = 0; i < pageNumberUpdate.Count; i++)
{
var rules = pageOrderingRules
.Where(rule => rule.Item1 == pageNumberUpdate[i])
.ToList();
if (!IsPageInRightOrder(i, rules, pageNumberUpdate))
{
isInRightOder = false;
break;
}
}
if (isInRightOder)
{
part1 += pageNumberUpdate[pageNumberUpdate.Count / 2];
}
else
{
var orderedPages = OrderPages(pageNumberUpdate, pageOrderingRules);
part2 += orderedPages[orderedPages.Count / 2];
}
}
Console.WriteLine($"Part1: {part1}\nPart2: {part2}");
List<int> OrderPages( List<int> pageNumberUpdate, List<(int, int)> rules)
{
var orderedPages = new List<int>(pageNumberUpdate);
bool changesMade;
do
{
changesMade = false;
foreach (var rule in rules)
{
if (!orderedPages.Contains(rule.Item1) || !orderedPages.Contains(rule.Item2)) continue;
var index1 = orderedPages.IndexOf(rule.Item1);
var index2 = orderedPages.IndexOf(rule.Item2);
if (index1 <= index2) continue;
orderedPages.RemoveAt(index1);
orderedPages.Insert(index2, rule.Item1);
changesMade = true;
break;
}
}
while (changesMade);
return orderedPages;
}
bool IsPageInRightOrder(int pageIndex, List<(int, int)> rules, List<int> pageNumberUpdate)
{
return rules.Select(rule => pageNumberUpdate.IndexOf(rule.Item2)).Where(indexOfRuleSecondPart => indexOfRuleSecondPart != -1).All(indexOfRuleSecondPart => pageIndex < indexOfRuleSecondPart);
}

1367
Day5/input.txt Normal file

File diff suppressed because it is too large Load Diff