Initial Commit

This commit is contained in:
Jose Caban
2025-11-30 20:28:10 -05:00
commit e9ac699e67
209 changed files with 39737 additions and 0 deletions

View File

@@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,35 @@
namespace AdventCommon
{
public class PuzzleInput
{
public PuzzleInput(string fileName, bool ignoreEmptyLines = true)
{
using (StreamReader reader = System.IO.File.OpenText(fileName))
{
while (!reader.EndOfStream)
{
string? line = reader.ReadLine();
if (line == null) { throw new InvalidDataException(); }
if (ignoreEmptyLines && String.IsNullOrWhiteSpace(line)) continue;
Lines.Add(line);
}
}
}
public List<string> Lines { get; private set; } = new List<string>();
public void Print()
{
for (int j = 0; j < Lines.Count; j++)
{
for (int i = 0; i < Lines[j].Length; i++)
{
Console.Write(Lines[j][i]);
}
Console.WriteLine();
}
}
}
}

55
2023/AdventOfCode.sln Normal file
View File

@@ -0,0 +1,55 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.6.33829.357
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Day01CSharp", "Day01CSharp\Day01CSharp.csproj", "{40E10A11-46AE-459F-8D01-BD2AE2261B4A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AdventCommon", "AdventCommon\AdventCommon.csproj", "{15399021-F5A7-4A4E-81EB-0DFB8A328D83}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Day02CSharp", "Day02CSharp\Day02CSharp.csproj", "{8226DC9A-0D25-4A8D-82F6-B6F7768E9488}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Day03CSharp", "Day03CSharp\Day03CSharp.csproj", "{ACB7DB81-82F3-4884-9C01-F14BF6A001C5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Day04CSharp", "Day04CSharp\Day04CSharp.csproj", "{046F51E9-3275-4857-8589-9D692BACEEBA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Day05CSharp", "Day05CSharp\Day05CSharp.csproj", "{A1500F47-F5FE-46B7-985C-FBE0D1950D9D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{40E10A11-46AE-459F-8D01-BD2AE2261B4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{40E10A11-46AE-459F-8D01-BD2AE2261B4A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{40E10A11-46AE-459F-8D01-BD2AE2261B4A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{40E10A11-46AE-459F-8D01-BD2AE2261B4A}.Release|Any CPU.Build.0 = Release|Any CPU
{15399021-F5A7-4A4E-81EB-0DFB8A328D83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{15399021-F5A7-4A4E-81EB-0DFB8A328D83}.Debug|Any CPU.Build.0 = Debug|Any CPU
{15399021-F5A7-4A4E-81EB-0DFB8A328D83}.Release|Any CPU.ActiveCfg = Release|Any CPU
{15399021-F5A7-4A4E-81EB-0DFB8A328D83}.Release|Any CPU.Build.0 = Release|Any CPU
{8226DC9A-0D25-4A8D-82F6-B6F7768E9488}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8226DC9A-0D25-4A8D-82F6-B6F7768E9488}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8226DC9A-0D25-4A8D-82F6-B6F7768E9488}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8226DC9A-0D25-4A8D-82F6-B6F7768E9488}.Release|Any CPU.Build.0 = Release|Any CPU
{ACB7DB81-82F3-4884-9C01-F14BF6A001C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ACB7DB81-82F3-4884-9C01-F14BF6A001C5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ACB7DB81-82F3-4884-9C01-F14BF6A001C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ACB7DB81-82F3-4884-9C01-F14BF6A001C5}.Release|Any CPU.Build.0 = Release|Any CPU
{046F51E9-3275-4857-8589-9D692BACEEBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{046F51E9-3275-4857-8589-9D692BACEEBA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{046F51E9-3275-4857-8589-9D692BACEEBA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{046F51E9-3275-4857-8589-9D692BACEEBA}.Release|Any CPU.Build.0 = Release|Any CPU
{A1500F47-F5FE-46B7-985C-FBE0D1950D9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A1500F47-F5FE-46B7-985C-FBE0D1950D9D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A1500F47-F5FE-46B7-985C-FBE0D1950D9D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A1500F47-F5FE-46B7-985C-FBE0D1950D9D}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {BABBCA3F-69A8-428C-BBD9-2621712E38E4}
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\AdventCommon\AdventCommon.csproj" />
</ItemGroup>
</Project>

129
2023/Day01CSharp/Program.cs Normal file
View File

@@ -0,0 +1,129 @@
// See https://aka.ms/new-console-template for more information
using AdventCommon;
/** P1 **/
var p1exampleSln = Part01(new AdventCommon.PuzzleInput("example-input.txt"));
var p1puzzleSln = Part01(new AdventCommon.PuzzleInput("puzzle-input.txt"));
Console.WriteLine("Part01 Example Sum: " + p1exampleSln);
Console.WriteLine("Part01 Puzzle Sum: " + p1puzzleSln);
/** P2 **/
var p2exampleSln = Part02(new AdventCommon.PuzzleInput("example-input-2.txt"));
var p2puzzleSln = Part02(new AdventCommon.PuzzleInput("puzzle-input.txt"));
Console.WriteLine("Part02 Example Sum: " + p2exampleSln);
Console.WriteLine("Part02 Puzzle Sum: " + p2puzzleSln);
int Part01(PuzzleInput input)
{
int sum = 0;
foreach (var line in input.Lines)
{
int num = 0;
// Left digit
for (int i = 0; i < line.Length; i++)
{
if (Char.IsDigit(line[i]))
{
num += 10 * (line[i] - '0');
break;
}
}
// Right digit
for (int i = line.Length-1; i >= 0; i--)
{
if (Char.IsDigit(line[i]))
{
num += line[i] - '0';
break;
}
}
sum += num;
}
return sum;
}
int Part02(PuzzleInput input)
{
int sum = 0;
foreach (var line in input.Lines)
{
int num = 0;
// Left digit
for (int i = 0; i < line.Length; i++)
{
var val = ReadInteger(line, i);
if (val != -1)
{
num += 10 * val;
break;
}
}
// Right digit
for (int i = line.Length - 1; i >= 0; i--)
{
var val = ReadInteger(line, i);
if (val != -1)
{
num += val;
break;
}
}
sum += num;
}
return sum;
}
int ReadInteger(string line, int index)
{
// If its a digit, we done
if (Char.IsDigit(line[index]))
{
return line[index] - '0';
}
else
{
// Ok read string
int number_index = 1;
var number = new string[] { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
foreach (var num in number)
{
if (index + num.Length <= line.Length)
{
bool found = true;
for (int i = 0; i < num.Length && (index + i) < line.Length; i++)
{
if (num[i] != line[index + i])
{
found = false;
break;
}
}
if (found)
{
return number_index;
}
}
number_index++;
}
}
return -1;
}

View File

@@ -0,0 +1,8 @@
{
"profiles": {
"Day01CSharp": {
"commandName": "Project",
"workingDirectory": "C:\\dev\\DevSandbox\\AdventOfCode\\2023\\Day01CSharp"
}
}
}

View File

@@ -0,0 +1,7 @@
two1nine
eightwothree
abcone2threexyz
xtwone3four
4nineeightseven2
zoneight234
7pqrstsixteen

View File

@@ -0,0 +1,4 @@
1abc2
pqr3stu8vwx
a1b2c3d4e5f
treb7uchet

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\AdventCommon\AdventCommon.csproj" />
</ItemGroup>
</Project>

147
2023/Day02CSharp/Program.cs Normal file
View File

@@ -0,0 +1,147 @@
// See https://aka.ms/new-console-template for more information
using AdventCommon;
var p1exampleSln = Part01("example-input.txt");
var p1puzzleSln = Part01("puzzle-input.txt");
Console.WriteLine("Part01 Example Sum: " + p1exampleSln);
Console.WriteLine("Part01 Puzzle Sum: " + p1puzzleSln);
var p2exampleSln = Part02("example-input.txt");
var p2puzzleSln = Part02("puzzle-input.txt");
Console.WriteLine("Part02 Example Sum: " + p2exampleSln);
Console.WriteLine("Part02 Puzzle Sum: " + p2puzzleSln);
int Part01(string fileName)
{
var input = new PuzzleInput(fileName);
var trueBag = new Dictionary<string, int>() { { "red", 12 },
{ "green", 13 },
{ "blue", 14 }
};
var bag = new BagOfCubes(trueBag);
int sum = 0;
for (int i = 0; i < input.Lines.Count; i++)
{
var game = BagOfCubes.ParseLine(input.Lines[i]);
bool possible = true;
foreach (var item in game)
{
if (bag.IsPossible(item.Key, item.Value))
{
continue;
}
possible = false;
break;
}
if (possible)
{
sum += i + 1;
}
}
return sum;
}
int Part02(string fileName)
{
int sum = 0;
var input = new PuzzleInput(fileName);
foreach (var item in input.Lines)
{
var result = BagOfCubes.ParseLine(item);
int power = 1;
foreach (var item2 in result)
{
power *= item2.Value;
}
sum += power;
}
return sum;
}
class BagOfCubes
{
public BagOfCubes(PuzzleInput input)
{
foreach (var line in input.Lines)
{
var result = ParseLine(line);
foreach (var item in result)
{
if (!Cubes.ContainsKey(item.Key))
{
Cubes.Add(item.Key, item.Value);
}
else
{
Cubes[item.Key] = Math.Max(item.Value, Cubes[item.Key]);
}
}
}
}
public BagOfCubes(Dictionary<string, int> cubes)
{
Cubes = cubes;
}
public static Dictionary<string, int> ParseLine(string line)
{
Dictionary<string, int> toRet = new Dictionary<string, int>();
var plays = line.Split(':')[1].Split(';', StringSplitOptions.TrimEntries);
foreach (var play in plays)
{
var p = play.Split(',', StringSplitOptions.TrimEntries);
foreach (var split in p)
{
var cubeCount = Int32.Parse(split.Split(' ')[0]);
var cubeColor = split.Split(' ', StringSplitOptions.TrimEntries)[1];
if (!toRet.ContainsKey(cubeColor))
{
toRet.Add(cubeColor, cubeCount);
}
else
{
toRet[cubeColor] = Math.Max(cubeCount, toRet[cubeColor]);
}
}
}
return toRet;
}
public int GetCubeCount(string color)
{
if (Cubes.ContainsKey(color))
{
return Cubes[color];
}
return -1;
}
public bool IsPossible(string color, int count)
{
return GetCubeCount(color) >= count;
}
public Dictionary<string, int> Cubes { get; private set; } = new Dictionary<string, int>();
}

View File

@@ -0,0 +1,8 @@
{
"profiles": {
"Day02CSharp": {
"commandName": "Project",
"workingDirectory": "C:\\dev\\DevSandbox\\AdventOfCode\\2023\\Day02CSharp"
}
}
}

View File

@@ -0,0 +1,5 @@
Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green

View File

@@ -0,0 +1,100 @@
Game 1: 1 red, 5 blue, 1 green; 16 blue, 3 red; 6 blue, 5 red; 4 red, 7 blue, 1 green
Game 2: 4 blue; 4 red, 3 blue, 1 green; 4 red, 9 blue, 2 green; 5 blue, 7 green, 4 red
Game 3: 10 blue; 7 blue, 1 green; 19 blue, 1 green, 9 red
Game 4: 2 green; 14 blue, 14 red, 4 green; 12 red, 11 green, 13 blue; 5 green, 9 red, 4 blue; 9 red, 7 green, 12 blue; 2 green, 3 blue, 8 red
Game 5: 3 blue, 4 red; 12 red, 2 green, 15 blue; 1 red, 10 blue, 1 green
Game 6: 1 blue, 7 red; 3 green, 5 red, 1 blue; 1 green, 7 red; 6 red, 1 blue, 4 green; 1 green, 8 red, 1 blue; 2 green, 4 red, 1 blue
Game 7: 11 green, 10 blue, 2 red; 1 green, 12 blue, 2 red; 9 green, 14 blue; 1 red, 19 blue, 15 green
Game 8: 4 green, 2 red, 14 blue; 9 green, 1 red, 15 blue; 2 green, 9 red, 8 blue; 11 green, 7 red, 8 blue; 9 red, 7 green, 6 blue
Game 9: 4 blue, 1 green, 2 red; 1 blue, 3 red; 1 red, 3 blue, 3 green
Game 10: 4 red, 3 green, 6 blue; 2 green, 15 blue, 6 red; 3 green, 2 blue; 2 red, 1 green; 11 blue, 7 red, 4 green; 2 blue, 2 red, 4 green
Game 11: 10 red, 1 green, 7 blue; 5 red, 2 green, 7 blue; 2 green, 4 blue; 1 green, 10 red, 10 blue; 8 blue, 4 red
Game 12: 6 green, 2 blue, 7 red; 3 green, 2 blue, 3 red; 6 red, 1 blue, 9 green; 9 green, 13 red, 5 blue; 6 green, 4 blue, 8 red
Game 13: 10 green, 4 red, 6 blue; 19 red, 6 green, 7 blue; 6 blue, 5 red, 8 green
Game 14: 4 blue, 2 green; 19 blue; 6 red, 17 blue; 10 blue, 7 red; 1 green, 2 blue, 7 red
Game 15: 4 green, 12 blue, 15 red; 10 blue, 18 green, 13 red; 20 blue, 6 green, 10 red; 20 red, 12 blue, 13 green; 12 blue, 17 green, 10 red; 1 red, 3 blue, 7 green
Game 16: 1 blue, 6 red, 5 green; 3 red, 3 green; 5 green, 1 red; 2 red, 1 blue, 6 green; 1 blue, 1 red, 6 green; 1 blue, 6 green
Game 17: 4 red, 3 blue, 3 green; 8 blue, 8 green; 5 red, 3 green, 9 blue; 9 green, 12 blue, 13 red; 1 green, 1 blue, 5 red; 7 green, 6 red
Game 18: 2 green, 11 blue, 6 red; 2 green, 11 red, 2 blue; 7 red, 4 blue, 9 green; 18 blue, 6 red, 1 green
Game 19: 4 red, 7 green, 17 blue; 5 green, 6 red, 4 blue; 4 blue, 4 red, 1 green
Game 20: 2 blue, 5 green, 9 red; 4 green, 8 red, 10 blue; 7 blue, 9 red, 1 green; 1 green, 10 blue, 9 red; 1 green, 8 red; 8 blue, 8 red, 1 green
Game 21: 1 blue, 14 red; 1 green, 2 red; 9 red, 1 blue, 1 green
Game 22: 7 green, 9 red, 4 blue; 9 red, 7 green, 9 blue; 8 green, 14 red; 5 blue; 10 red, 1 blue, 1 green; 8 green
Game 23: 2 red, 12 green, 5 blue; 3 red, 5 blue, 3 green; 1 red, 9 green, 1 blue; 8 green, 6 blue; 13 green
Game 24: 8 red, 7 green, 1 blue; 1 red, 6 green, 7 blue; 1 green, 3 red
Game 25: 4 green, 2 red; 1 red, 2 green, 8 blue; 1 green; 8 blue
Game 26: 1 green, 4 blue, 17 red; 15 red, 3 green, 3 blue; 2 blue, 2 red; 18 red, 2 green, 11 blue; 6 red, 7 blue; 10 blue, 1 green, 4 red
Game 27: 2 red, 5 blue, 1 green; 14 green, 2 red, 6 blue; 1 red, 4 blue, 14 green
Game 28: 3 red, 5 green, 2 blue; 2 red, 3 green, 4 blue; 1 red, 9 green, 3 blue; 13 green, 4 red, 4 blue
Game 29: 18 red, 11 green; 4 blue, 18 red, 9 green; 16 red, 2 green, 4 blue; 2 red, 3 blue, 12 green; 1 green, 18 red; 2 blue, 15 green, 1 red
Game 30: 10 red, 3 blue, 1 green; 6 red, 1 blue, 3 green; 2 green, 2 blue, 10 red; 6 green; 3 blue, 15 red
Game 31: 1 blue, 7 green, 2 red; 12 red, 8 green, 4 blue; 2 green, 2 blue, 5 red; 2 blue, 3 green, 12 red; 7 red, 5 green, 4 blue; 7 red, 1 blue
Game 32: 4 blue, 5 red, 11 green; 20 red, 8 green, 1 blue; 10 red, 7 green, 1 blue; 1 blue, 7 red, 2 green; 1 red, 19 green, 3 blue
Game 33: 9 red; 9 red, 6 green, 7 blue; 5 red, 7 blue, 2 green
Game 34: 5 green, 5 red, 3 blue; 8 green, 6 blue, 16 red; 12 blue, 8 red, 8 green; 1 blue, 10 red, 3 green; 1 green, 13 blue, 18 red; 4 blue, 5 green, 8 red
Game 35: 15 green, 4 red, 8 blue; 7 red, 1 green, 14 blue; 12 green, 16 blue, 2 red
Game 36: 3 blue, 3 green, 2 red; 7 red, 8 blue; 11 blue, 9 red; 4 red, 13 blue, 1 green
Game 37: 4 red, 11 blue, 8 green; 6 green, 4 blue, 14 red; 5 blue, 7 green, 13 red; 6 red, 2 green, 5 blue; 4 red, 3 blue, 1 green; 6 red, 4 green, 6 blue
Game 38: 10 green, 5 blue, 1 red; 3 red, 6 blue, 3 green; 9 green, 9 blue, 3 red; 9 blue, 1 red, 6 green
Game 39: 3 blue, 16 red; 10 red, 4 green, 2 blue; 2 blue, 13 red, 1 green; 2 blue, 11 red, 2 green; 3 green, 13 red
Game 40: 2 blue, 3 red, 2 green; 2 green, 2 blue, 6 red; 1 green, 9 red
Game 41: 1 blue, 12 red; 8 blue, 1 red, 5 green; 1 green, 7 blue, 13 red; 8 red, 7 blue, 7 green; 4 green, 17 red, 9 blue; 2 green, 8 blue
Game 42: 2 green, 6 red, 1 blue; 3 red, 2 green; 9 red, 1 green; 2 red, 2 green
Game 43: 10 blue, 9 red; 14 blue, 4 green; 5 red, 3 green, 9 blue; 5 blue, 8 green, 1 red
Game 44: 3 blue, 10 green, 1 red; 1 blue, 13 red, 3 green; 1 blue, 5 green, 16 red
Game 45: 1 red, 1 green, 3 blue; 2 green, 1 red, 5 blue; 1 red, 2 blue, 1 green; 1 blue; 1 green, 5 blue; 1 blue
Game 46: 8 green, 8 blue, 4 red; 10 green, 4 red, 7 blue; 2 red, 3 green, 14 blue
Game 47: 3 green, 3 red; 5 green, 2 blue, 6 red; 3 blue, 5 red, 15 green; 2 green, 2 blue, 2 red
Game 48: 11 blue, 12 green, 3 red; 8 blue, 3 red, 3 green; 1 green, 6 blue, 2 red
Game 49: 3 blue, 17 green, 1 red; 4 red, 16 blue, 17 green; 1 green, 3 red, 5 blue; 14 blue, 1 red, 12 green
Game 50: 2 blue, 5 red, 6 green; 8 blue, 11 green, 5 red; 2 green, 2 red, 6 blue
Game 51: 1 green, 2 red; 4 green; 1 blue, 10 green
Game 52: 8 blue, 9 red, 4 green; 2 green, 8 blue, 2 red; 1 red, 2 green, 1 blue; 2 blue, 8 green, 8 red; 4 red, 1 green, 9 blue; 11 blue, 4 green, 8 red
Game 53: 1 green, 2 red; 3 blue, 1 green, 9 red; 5 blue, 11 red; 4 blue, 6 red, 1 green; 5 blue, 10 red; 5 blue, 5 red, 1 green
Game 54: 1 blue, 8 green; 9 green, 1 red, 11 blue; 16 green, 8 blue; 5 green
Game 55: 7 blue, 2 red, 1 green; 16 green, 19 blue, 5 red; 9 green, 3 blue, 7 red; 8 blue, 2 green, 4 red; 8 green, 15 blue, 5 red
Game 56: 9 blue, 1 red, 4 green; 12 green, 12 blue; 1 green, 1 red, 5 blue
Game 57: 1 green, 10 blue; 1 red, 9 blue; 10 blue, 1 red, 3 green
Game 58: 6 red, 15 blue, 3 green; 13 blue, 5 red; 10 blue, 2 red; 5 red, 1 green, 14 blue
Game 59: 7 red, 1 blue, 9 green; 4 green, 12 red, 2 blue; 6 green, 20 red, 1 blue; 4 blue, 9 red, 2 green; 8 red, 4 blue, 2 green
Game 60: 11 red, 8 blue, 1 green; 18 green, 11 blue; 16 red, 10 blue, 7 green; 6 blue, 8 red; 7 red, 15 green, 4 blue
Game 61: 1 blue, 1 green, 8 red; 3 red, 7 blue; 4 blue, 10 red; 1 green, 5 red, 8 blue; 10 red, 7 blue
Game 62: 12 blue, 1 red, 1 green; 2 green, 1 red, 7 blue; 3 green, 18 blue; 11 blue, 4 green
Game 63: 4 green, 4 red, 8 blue; 7 red, 5 blue, 5 green; 2 green, 20 blue, 4 red; 1 green, 4 blue, 3 red
Game 64: 2 green, 2 red; 3 green, 2 blue; 12 green, 2 red, 4 blue; 5 red, 9 green, 8 blue; 7 blue, 6 green; 3 green, 5 red
Game 65: 8 red, 2 green, 13 blue; 11 blue; 7 blue, 2 green; 12 blue, 1 green, 9 red
Game 66: 1 blue, 3 red, 19 green; 3 red, 17 blue, 15 green; 9 green, 9 blue
Game 67: 2 green, 7 blue, 1 red; 3 green, 1 red, 7 blue; 1 red, 6 green; 7 blue, 2 red, 10 green; 2 red, 5 green, 4 blue
Game 68: 14 red, 10 green, 8 blue; 11 red, 1 blue, 6 green; 7 red, 7 green; 12 blue, 10 green, 3 red; 6 red, 12 blue, 10 green; 8 green, 14 red, 3 blue
Game 69: 4 green, 8 red; 2 red, 15 green; 5 red, 1 blue, 12 green; 13 red, 6 green; 10 green, 13 red, 1 blue
Game 70: 3 red, 10 blue, 3 green; 8 red, 11 blue, 11 green; 5 red, 13 green
Game 71: 18 green, 3 red, 1 blue; 3 blue, 14 green, 2 red; 6 blue, 20 green, 4 red
Game 72: 2 blue, 1 red; 2 blue, 3 green, 1 red; 4 blue, 2 red, 4 green
Game 73: 11 red, 11 green; 5 green, 1 blue; 8 red, 7 green, 4 blue; 5 blue, 7 red, 12 green
Game 74: 12 red, 12 green, 5 blue; 10 red, 7 blue, 15 green; 6 green, 19 red, 19 blue; 3 red, 7 blue, 16 green; 11 red, 14 green, 16 blue
Game 75: 5 red, 17 green, 8 blue; 10 red, 8 blue, 19 green; 9 blue, 6 red, 18 green; 3 blue, 13 red, 12 green
Game 76: 5 green, 2 red, 8 blue; 3 blue, 14 red, 2 green; 14 red, 1 blue; 3 green, 8 blue, 15 red; 11 red, 1 green; 11 red, 9 blue, 3 green
Game 77: 3 blue, 2 red; 1 blue, 8 green, 11 red; 14 green, 14 red; 3 red, 5 green, 5 blue; 2 green, 16 blue, 3 red; 13 red, 7 green, 5 blue
Game 78: 3 blue, 1 green, 1 red; 5 blue, 1 green, 1 red; 9 blue, 7 red, 1 green; 5 blue, 1 green, 5 red; 10 blue, 3 green, 7 red
Game 79: 19 green, 17 blue, 4 red; 7 green, 7 red, 16 blue; 4 red, 10 green; 13 blue, 17 green, 2 red
Game 80: 9 blue, 3 green; 15 blue, 1 red; 3 blue, 12 green, 2 red; 1 red, 14 green, 13 blue; 1 red, 10 blue, 16 green; 8 blue, 6 green, 2 red
Game 81: 1 green, 3 red, 19 blue; 2 red, 1 green, 9 blue; 1 green, 2 red, 8 blue; 1 red, 1 green, 11 blue; 1 green, 3 red, 11 blue
Game 82: 8 red, 1 blue, 4 green; 9 green, 3 blue, 4 red; 3 green, 3 blue, 18 red
Game 83: 3 red, 13 blue, 16 green; 16 green, 2 blue; 14 green, 12 blue; 8 green, 14 blue, 4 red; 12 green, 4 blue; 20 green, 1 red
Game 84: 4 green, 4 blue, 5 red; 6 red, 6 blue, 8 green; 5 blue, 12 green, 3 red; 5 red, 13 green; 6 blue, 1 green, 5 red
Game 85: 10 green; 7 green, 1 blue; 5 red, 5 blue, 1 green; 2 green, 2 red, 3 blue; 3 red, 10 green, 3 blue; 1 blue, 1 red
Game 86: 3 green, 1 red, 3 blue; 2 red, 2 green; 9 green, 2 blue, 3 red; 3 red, 3 blue, 4 green
Game 87: 6 red, 4 green; 1 red, 3 green, 5 blue; 1 green, 7 blue, 4 red
Game 88: 2 green, 4 red, 3 blue; 5 green, 1 blue; 3 red, 5 green, 2 blue; 1 green, 6 red, 1 blue; 7 red, 2 blue; 17 red, 13 green
Game 89: 4 green, 2 blue, 6 red; 15 red, 7 green, 10 blue; 7 red, 9 blue, 4 green
Game 90: 9 red, 17 blue; 1 green, 9 blue; 5 red, 8 blue; 3 blue, 9 red, 1 green; 17 blue, 1 red
Game 91: 7 green, 3 red, 5 blue; 4 blue, 3 red, 9 green; 9 red, 7 blue, 7 green; 5 red, 6 blue, 3 green; 10 red, 2 green, 6 blue
Game 92: 13 blue, 8 red; 7 green, 1 red, 8 blue; 5 blue, 4 red, 2 green; 9 red, 10 blue
Game 93: 6 green; 1 blue, 16 green, 6 red; 5 green, 1 blue, 5 red; 5 red, 6 green; 16 green, 2 red, 1 blue; 11 green, 2 red
Game 94: 9 blue, 4 green; 12 green, 17 blue; 4 green, 5 blue, 6 red; 2 red, 2 blue, 12 green
Game 95: 5 red, 4 blue, 5 green; 2 blue, 4 green, 4 red; 4 blue, 2 red, 7 green; 1 green, 7 blue, 8 red
Game 96: 7 blue, 6 green, 2 red; 3 green, 1 blue; 7 blue, 3 red, 5 green; 1 green, 5 blue; 6 blue, 2 red; 2 green, 1 red
Game 97: 10 red, 1 green, 1 blue; 4 green, 11 red, 2 blue; 4 red, 1 blue, 4 green
Game 98: 3 green, 4 blue, 7 red; 7 red, 8 green; 7 green, 16 red, 1 blue; 8 green, 2 blue, 4 red; 5 green, 3 blue, 18 red
Game 99: 6 green, 12 red, 1 blue; 5 blue, 1 red, 7 green; 5 green, 7 red, 10 blue; 8 blue, 1 red, 7 green; 17 red, 4 blue, 9 green
Game 100: 6 blue, 10 green; 3 green, 4 blue, 1 red; 7 blue, 1 red, 12 green

View File

@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\AdventCommon\AdventCommon.csproj" />
</ItemGroup>
</Project>

156
2023/Day03CSharp/Program.cs Normal file
View File

@@ -0,0 +1,156 @@
using AdventCommon;
using System.ComponentModel.DataAnnotations;
using System.Numerics;
var p1exampleSln = Part01("example-input.txt");
var p1puzzleSln = Part01("puzzle-input.txt");
Console.WriteLine("Part01 Example Sum: " + p1exampleSln);
Console.WriteLine("Part01 Puzzle Sum: " + p1puzzleSln);
var p2exampleSln = Part02("example-input.txt");
var p2puzzleSln = Part02("puzzle-input.txt");
Console.WriteLine("Part02 Example Sum: " + p2exampleSln);
Console.WriteLine("Part02 Puzzle Sum: " + p2puzzleSln);
int Part01(string fileName)
{
var input = new Day03Input(fileName);
int sum = 0;
foreach (var num in input.Numbers)
{
bool foundAdjacent = false;
foreach (var s in input.Symbols)
{
if (Day03Input.Part.IsAdjacent(num, s))
{
foundAdjacent = true;
break;
}
}
if (foundAdjacent)
{
sum += num.Value;
}
}
return sum;
}
int Part02(string fileName)
{
var input = new Day03Input(fileName);
int sum = 0;
foreach (var symbol in input.Symbols.Where(x => x.S == '*'))
{
List<Day03Input.Number> adjacentNums = new List<Day03Input.Number>();
foreach (var num in input.Numbers)
{
if (Day03Input.Part.IsAdjacent(num, symbol))
{
adjacentNums.Add(num);
}
}
if (adjacentNums.Count == 2)
{
sum += adjacentNums[0].Value * adjacentNums[1].Value;
}
}
return sum;
}
class Day03Input : PuzzleInput
{
public abstract class Part
{
public Part(int x, int y, int length)
{
Coords = new Vector2(x, y);
Length = length;
}
public Vector2 Coords { get; set; }
public float X { get { return Coords.X; } }
public float Y { get { return Coords.Y; } }
public int Length { get; private set; }
public static bool IsAdjacent(Part left, Part right)
{
for (int i = 0; i < left.Length; i++)
{
for (int j = 0; j < right.Length; j++)
{
var l = new Vector2(left.X + i, left.Y);
var r = new Vector2(right.X + j, right.Y);
if (Vector2.Subtract(l, r).Length() < 2)
return true;
}
}
return false;
}
}
public class Number : Part
{
public Number(int x, int y, int value, int length) : base(x,y,length)
{
Value = value;
}
public int Value { get; private set; }
}
public class Symbol : Part
{
public Symbol(int x, int y, char s) : base(x,y,1)
{
S = s;
}
public char S { get; private set; }
}
public Day03Input(string fileName) : base(fileName)
{
for (int j = 0; j < Lines.Count; j++)
{
for (int i = 0; i < Lines[j].Length; i++)
{
if (Char.IsDigit(Lines[j][i]))
{
string num = "";
for (int sub = i; sub < Lines[j].Length && Char.IsDigit(Lines[j][sub]); sub++)
{
num += Lines[j][sub];
}
int val = Int32.Parse(num);
var n = new Number(i, j, val, num.Length);
Numbers.Add(n);
// Skip remaining characters in the number
for (int upper = i + n.Length - 1; i < upper; i++) ;
}
else if (!Char.IsLetterOrDigit(Lines[j][i]) && Lines[j][i] != '.')
{
var v = new Symbol(i, j, Lines[j][i]);
Symbols.Add(v);
}
}
}
}
public List<Number> Numbers { get; set; } = new List<Number>();
public List<Symbol> Symbols { get; set; } = new List<Symbol>();
}

View File

@@ -0,0 +1,8 @@
{
"profiles": {
"Day03CSharp": {
"commandName": "Project",
"workingDirectory": "C:\\dev\\DevSandbox\\AdventOfCode\\2023\\Day03CSharp"
}
}
}

View File

@@ -0,0 +1,10 @@
467..114..
...*......
..35..633.
......#...
617*......
.....+.58.
..592.....
......755.
...$.*....
.664.598..

View File

@@ -0,0 +1,140 @@
....411...............838......721.....44..............................................607..................................................
...&......519..................*..........#.97.........994..............404..............*...&43........440...882.......673.505.............
.....*......*...892.........971...%....131....*..........*.......515...$.......157.....412.............-.....*.............*............594.
..856.495....13...-...............602..........36...$.985....341*.........88.....*.921....................122..................806..508.....
......................667.325*734.................718...............284..*....288..*....620.......854.............643....817....*...........
....*480..825..........*....................784.......&.............*...859........856.*..........*...........................137...........
............*..903*986.681....403.....451...*.....424..24.855....844....................826.......202....-.........542%..564......@.212*....
......735...70.............=.....*895.......575.....*......*.............490.........+.......114.......890....519...........*857.88.....761.
.......%..........#.#.....896.....................600.821@..565.............*390..664........@...292@..................%....................
....$...........256..340.........851..............................476..................................210..............102.................
....758..........................*......=.............@................................273......911...#....@666...+193......................
.............604....483..&144.859......807...-.........995..-218.770............37.512.*.........*.........................215...........117
......354..........*...............$........849.*.................................*.....242....469.&764.........................959*128.$...
.........&........575..521#..30..812..89.........836....../..........116............385....................942$..739....*46.................
..912*.......*845..........................................338..165.#....995.160......*....882.......421..........-..697.......619..........
......154..........................700...........................*....$.........*710..923....=.........*....................................
...................616..328........*......184..........227..401.635...264.=16....................-.....659....................613.....526...
.............33.......+.-........63..........#..........*..*.....................@............647..................352/.........*......*....
...107.......+............=318.................&862..210....588...703.........754.......151...................747.......260.....201..458....
...*..................................&671.........................................473......812..391.........&......249.....................
....13...................709.21..876....................-..52.........965.527*814...................*...*63...........*...75.400.....*619...
.............713.-...319*......$......................215.*.............*................@........407.67..............802.+.....*.466.......
.............*...230.............997......................80.526..3.811.541..753.........642......................212........119........+738
....197.....6......................=..618.....39.364.........+....*./........*................217*......443*703......*......................
......*.................240...........#......*....*............378............156.................763.............444....94...86......../273
.....866..&.........273*..................970.....673.....&........*359.............*565..147.............238...........+....&..............
.........690.761...........*985.......%...................691...587........../...663..................%....$......34................336.....
.......#...../....951+...75........708.......411..939..85.............189...143....................301..-......=..@......-......596.........
......406.....................+............+.........*...*..55.974%.......................203..179.......917..399.........451...............
....................177......220...........500......111.46.........................413....*.....*................................/..........
500............+....../.167-....................959.............231..................=..192...........334.....781.....&..........122..151...
...*............969..........+878..136.../........*.#.............*.&...........226......................*...*......855..296..........%.....
....421...611............448.........*....490..631...16........200..328........*..................51..272.....525..........*................
............@........@......=.....719.....................................57..46.............................................*844.....305...
.....868..............887.....@...........-..........@........964.........*..........-859.................#...............189..........@....
.....*.......804...............132..688....420.740.868.609......*....849...70..972.........991.....799.....43......574@.....................
935...99.530....*......................@.........................243..*............675.345*..........#.............................@........
...........*.724...........645....114$....364......154.....989/......440.............=..........................275.......594......788......
........756................................*.....................+........................187...504............./...../......*832...........
374................*.......586.......656..239....................40.........................*....*.......334*.........580...................
...*..............780..715......680...*..............490*...+715......648..........875.....735....359.......................................
563........662...................*..260.....896.357....................#.......407*....................................520.382.59.491.......
......204.*....................947.........../..*..............%.........................506.../..#..269#..*...........*.........*..........
.......*..150............355...................371...430.....155.107...............322....+..137.303......424..772......33..................
778...871.......*769.290*..........&..............................*................./.........................*...................743.153...
.............140............938..763..........3...............443..510....868...579.....577/....264............572.........#........*...$...
........*238...................#......417....=.......&....337..&.........#...........*.......................$.............125......153.....
.970$...........695..57..540........%..*..........930........*.............754%......156...560*305..567..78..149.974........................
..........@...........+...*........891.531....848......105....911....................................*...*........*.....825.................
..........573..525..&....958.777...............*..........*...........883....=....%.........158.....530..839....803............254*688......
..................*..560.............&......592.........159......743.......209.....735......*.......................237.....................
................15..................54.665........858..............*....93...................438.239*825.......284.....*.....565*684........
......732..............574.690..........@.....471....*....@.......157....*............692.....................*........495..................
...$.*.....320..9..........@......*576..........*........196..........738.................47......%955...80...983..505...............249....
.468.541.........%.............134...............974..............=................424........533..........*..........*...727...............
..........$.................51...............193.....824....#....170...667*107.200..*...380...+........=.302.440#....791...-.........394@...
....*....331.+662....540*............445......*..........27..742................*..972....*..........255......................762...........
...770...........................301*....947.673.....164............../353...228.......237...................&246....431%.942*........21....
........................................................*809..79..................#178.......409...@.....263......................285.......
114.................233.894......998....663.....65.830..........*...457............................598......*............554.....-..........
.......740......204....*.........*.....=..........*....655...803.......................................&....957...........*.........514.....
...151*...........................438.......*208..........@................644.....294..531........58...241.....&949....612...511..%........
..................534@........=.......*..494........569.......#........245.....980..*......*.......*.........................-..............
....$267.972............@......308...366...........*...../.....883....*.....-.../..784.....954.232.224.........121..................293.....
..........@..........409...........................487....540......699.....756.................*.........437-.=.......@.......#......@......
....957.........471.........795.#514.268.....443........................................=532..217....................171.144...246..........
....*....59.642...@...........=......*...694...................*..........594..308..................933.........39........=...........*.....
.....393..*....%.........479.......305..*...................593.789.........*.....*.......78.@211.....&.....................866......116....
.531..................%.../....911.....763..453..291.................+684..917..93....365..*.......48.........*834...545...#................
....*280....-919...365.............115.........*....=.......................................213...../......120..........*............+......
803.......................788........&.........764.....................*895.315........402......................824.....949....679..243.....
..........176.............*...............908$..................882.859...................*....586.......#404.-...=............-............
..366.......*..37*840.....66.........189............*....368*.....-.....391......803.....512.......478........294.....................978...
...........977.............................388....932........759........*...........*........619...*......845.....78.247........441.........
.........%.......................613....................355...........632.........................270.....*.......*.....*691.....%......$327
.......797..........................*.........473..451.....*..846.@................474*.......@.......-....561..493.........................
235.....................................880#...-...%....951.....*.490.507..............430....435.....370.............540..17.984..107......
.....280..986...589.367......595.............................110........$.....325...................................+../..*...%......#......
..........*...../......*........*949.......469.....#590.@......................*................912.......-.......269....818................
..697.................106..315........./.................366..................795....614*800......%./666...396.........................798..
....*.122.645....50.......*..........67..186.397.591.-.........353....201....................944............................&798......=.....
..193.+....#.....*.......918...............*....*.....930.......*......*....41..388.....387...+......&.......869.505........................
.........$....595............709........763.......365............649..705..........=....*......./.....32.....*.....*............609.404*....
.......540...........189.......*..442.........623*......$...............................295..524............64.....436......426*........15..
...........129...466.*.......513...*..................175.........824...820..........................460.......154..................962.....
.................*......306=......307......=...-...........*........*......%....$............./344./.....811....$........817..........*.....
.........$..923.118...........343........811.787.........329.......650.179....180..................648...%................=......157..656...
........186.$.........995......#.........................................*...............-.....524..........................................
..................682...%.........-...+...............411................20...659.........635.....$....*768..#.......986..269...............
........=.....143.#...........@.118.769..134...........#..=....332#...........................107...140.......569............*.930&.........
........92...$..............471...........*........485.....961..............15.............46*.............................820......838.649.
...................353..............865....991.629....*................841...*........@....................../129........#.............*....
......163.716.......*....123.892....*..............#.727..611.........*......236.498.36..434..762.........................438...5...........
...............903.688..*....../..378............662.....#.....934....1..........-.........+.*....110.88........124.....................513.
....550...299...........430.............*638.684...............*..........157................220.....*................751......336..647*....
....*...../..........................946...........873*203.337.4.............*......553..........921....553.....743...............*.........
....975.....*76................867............103............%.....603.....588.672*...#......728..*.....%......$......877...332*...903.+850.
.........542....592....992.......*.............+.....801..........................................215.................%.....................
.491...........*........*.................545.........*.....@..............33...233...782.....417..........%415.............%.........*119..
.................../929..123........275.........409..494.251...............*.......*.....*830...*....709.........368......932......626......
..47.837....926........................@.=864.....*.................482............972.........545..%....424......./..........990...........
......*.......*.../354..........$................107.......377+.......-....................................*.................*....50*.......
....351....177.........801....789...871......190..................&.........-408.292.....243..884........419.@936.795.......258......227....
...............323+.....*.............-..508*.........@......$396..817............*..431....*.......*678.................................288
...........*........+15...../..................=....144................*510.....177.....*....403.524.....&58.735....#........519..615%......
........574.328..@........362..201*109..........816.................379...............84.........................312...........*.......212..
................411....................550.................875.#.........172.....&...................133.799..................849..274*.....
.....................890*942..........*................264.....361.444........189....817..812....333...*.*..................................
...+430...............................................*............*......490.............*..........37...160..166.............%......*.....
........532..............743&...595...217.............260...........740......*..4..453..89..%..304.............*...+........769........793..
.........+..560..702=..............*..*......270..........-.527.717........675..=..........954...=......=398..9..916..............323.......
....835.......*..........%...144..959........@.........419.........*251...............................*..................360..586*.....273..
...............766.....113....*..................................#............68...............%...944.....390%...418.......%...........*...
...................467.......548.....922.......125...792......44..65.....263*.....26....369...688.......................757...216*637..292..
.....*309..347....*...................*...........*.....*.......-..................%...*.............815.571.............*..................
..786.............473...807=..164......781......959......27..........28*.........................687*.....*.............259..............939
....../........................&...333........................876.....................132..............=..396.....742+.............281......
...210.....@............899........*......%.....873..24*167..*.....664.................%..465.........633................492.........*......
...........639.........*........464......738......*..........766...&......396.775..151.......*375........./177..........*.....245.752.......
.501.................@..43.527.................415...782...................*..*....*................*537........=331..37....................
.......93.........723........*....882...............@.....186&......642..150.593...414.......117.718........851.............................
...#.....*..................275.....#.503...23=.................145..*........................*.......645*.....+................33.310+..603
537.........$..........#164...........&...........887.......562*......497....742............97...602......290...........................@...
....../375...845....................................*.............510.............315*720......................./.......69*114.....968......
...................153.662........276...795........356...............&...365..................................333....................*......
.995.980..............*...........*....*................375.............$.......500............148...................*915........$..........
...*.-........32............243...258.674...........+..#........................*...531....590*...........837.408.100..........609..296.....
.532............*.690..734.....*...................828..........#............502...*.........................*..........&..........*........
.............215.....*...*.....800...@.......690..........79....403..785..........363...................159..........383..322*99...561...867
...384.613...............565..........106.....&.............%..........*..215.........-.....55*758.516.....#............................#...
...../..*...986..539.425.........................682@.........719...880..*......135...119............................686.........988........
.......373.......*.....*...508..862.................../862...*..........647......*..............638..............204...*..............808...
................284...968....@....*..........382.438$.......561................709.59..............#...509.......*......234.......235*......
........432.....................348...................714..........................%.....990.............*.....581..543......844............
..580/.....*...............41...........384....243...*....................=...389*..........*140..-......683..........*.....................
...................73.*242..+.............*........323..78........700..978........761.....%.......626...............93................@.....
.567........945....*............199..........601*.........*........*...................800..365.............982.897..................962....
.....1......*...$..468............*..............154.......626....662........606............*........337..@......*....121...707..945........
..........568..818.............813..424@.............*642.............2......*...589.....678....963....*.342......162...=..=........#.......
......114...............81........................767......................720......................260.....................................

View File

@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\AdventCommon\AdventCommon.csproj" />
</ItemGroup>
</Project>

151
2023/Day04CSharp/Program.cs Normal file
View File

@@ -0,0 +1,151 @@
// See https://aka.ms/new-console-template for more information
using AdventCommon;
int p1exampleSln = Part01("example-input.txt");
int p1puzzleSln = Part01("puzzle-input.txt");
Console.WriteLine("Part01 Example Points: " + p1exampleSln);
Console.WriteLine("Part01 Puzzle Points: " + p1puzzleSln);
int p2exampleSln = Part02("example-input.txt");
int p2puzzleSln = Part02("puzzle-input.txt");
Console.WriteLine("Part02 Example Points: " + p2exampleSln);
Console.WriteLine("Part02 Puzzle Points: " + p2puzzleSln);
int Part01(string fileName)
{
var input = new Day04Input(fileName);
int sum = 0;
foreach (var c in input.Cards)
{
sum += c.Points;
}
return sum;
}
int Part02(string fileName)
{
var input = new Day04Input(fileName);
Dictionary<int, int> CardCopies = new Dictionary<int, int>();
// Initial state -- 1 of each
for (int i = 0; i < input.Cards.Count; i++)
{
CardCopies.Add(i + 1, 1);
}
// Start with card 1 and work to the end
for (int i = 0; i < input.Cards.Count; i++)
{
Day04Input.Card card = input.GetCardNumber(i + 1);
int numberOfCards = CardCopies[i + 1];
var matches = card.MatchingNumbers;
for (int cardNum = 0; cardNum < numberOfCards; cardNum++)
{
for (int j = 0; j < matches.Count; j++)
{
CardCopies[i + 2 + j]++;
}
}
}
int sum = 0;
foreach (var c in CardCopies)
{
sum += c.Value;
}
return sum;
}
class Day04Input : PuzzleInput
{
public class Card
{
public List<int> WinningNumbers { get; private set; } = new List<int>();
public List<int> ScratchedNumbers { get; private set; } = new List<int> ();
public int CardNumber { get; private set; }
public Card(string line)
{
// Extract card number
CardNumber = Int32.Parse(line.Split(':', StringSplitOptions.RemoveEmptyEntries)[0].Split(' ', StringSplitOptions.RemoveEmptyEntries)[1]);
// extract numbers
string winningNumbers = line.Split(":")[1].Split('|', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)[0];
string scratchedNumbers = line.Split(":")[1].Split('|', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)[1];
// parse the winning numbers
foreach (var winningNumber in winningNumbers.Split(' ', StringSplitOptions.RemoveEmptyEntries))
{
WinningNumbers.Add(Int32.Parse(winningNumber));
}
// parse the scratchers
foreach (var scratchedNumber in scratchedNumbers.Split(' ', StringSplitOptions.RemoveEmptyEntries))
{
ScratchedNumbers.Add(Int32.Parse(scratchedNumber));
}
}
public int Points
{
get
{
int points = 0;
foreach (var scratched in ScratchedNumbers)
{
if (WinningNumbers.Contains(scratched))
{
if (points == 0) points = 1;
else points *= 2;
}
}
return points;
}
}
public List<int> MatchingNumbers
{
get
{
List<int> matches = new List<int>();
foreach (var scratched in ScratchedNumbers)
{
if (WinningNumbers.Contains(scratched))
{
matches.Add(scratched);
}
}
return matches;
}
}
}
public List<Card> Cards { get; private set; } = new List<Card>();
public Card GetCardNumber(int num)
{
if (Cards[num - 1].CardNumber != num) throw new InvalidDataException();
return Cards[num - 1];
}
public Day04Input(string fileName)
: base(fileName)
{
foreach (var line in Lines)
{
Cards.Add(new Card(line));
}
}
}

View File

@@ -0,0 +1,8 @@
{
"profiles": {
"Day04CSharp": {
"commandName": "Project",
"workingDirectory": "C:\\dev\\DevSandbox\\AdventOfCode\\2023\\Day04CSharp"
}
}
}

View File

@@ -0,0 +1,6 @@
Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11

View File

@@ -0,0 +1,201 @@
Card 1: 58 96 35 20 93 34 10 27 37 30 | 99 70 93 11 63 41 37 29 7 28 34 10 40 96 38 35 27 30 20 21 4 51 58 39 56
Card 2: 64 84 57 46 53 86 90 99 59 70 | 99 59 30 83 84 70 31 57 6 29 18 82 15 88 86 53 51 64 32 47 44 46 80 39 90
Card 3: 55 87 51 18 86 5 66 83 92 95 | 73 68 49 57 29 14 41 42 65 10 84 34 67 44 6 48 61 13 28 38 52 19 78 64 11
Card 4: 52 21 59 78 18 42 46 91 31 10 | 48 83 13 68 42 72 4 10 6 36 63 81 21 94 8 3 78 53 2 47 62 77 56 97 7
Card 5: 8 79 31 1 26 57 90 62 93 10 | 26 70 73 6 16 15 93 57 34 56 87 31 10 45 1 22 79 77 90 47 42 58 41 62 8
Card 6: 90 75 24 69 81 93 39 38 96 33 | 2 78 68 31 99 35 49 66 36 84 54 27 43 80 50 3 22 74 60 98 57 83 13 82 91
Card 7: 74 86 51 70 28 54 6 34 48 53 | 51 82 34 74 40 24 42 66 20 61 84 15 89 62 69 48 95 31 93 52 76 12 90 75 99
Card 8: 54 44 69 6 51 24 84 39 20 99 | 89 93 96 85 18 94 15 87 72 67 5 52 45 43 55 65 14 47 30 61 82 41 76 29 38
Card 9: 26 44 60 20 11 15 16 95 18 47 | 71 56 10 57 65 90 32 30 13 42 19 55 29 12 89 91 2 67 79 58 99 4 81 41 69
Card 10: 68 65 79 3 44 55 12 71 47 84 | 47 65 93 4 71 23 17 30 59 85 3 28 95 36 88 12 7 97 68 62 84 21 79 61 44
Card 11: 96 57 36 49 80 73 3 60 11 53 | 83 78 6 39 42 4 96 84 3 80 95 60 97 57 49 66 27 93 31 45 86 90 50 9 73
Card 12: 85 69 14 3 54 56 61 43 77 80 | 84 8 53 72 9 24 52 88 40 2 95 31 34 90 61 70 89 97 58 56 14 65 98 38 3
Card 13: 69 29 79 83 89 94 44 68 15 35 | 37 39 29 55 2 82 96 42 73 32 31 79 8 53 88 40 44 49 69 94 87 62 41 81 89
Card 14: 27 40 19 34 91 84 98 49 21 68 | 58 94 2 1 55 53 52 44 98 8 75 46 50 79 9 56 43 67 10 3 11 19 69 95 17
Card 15: 3 47 44 77 95 25 60 65 93 53 | 15 40 3 93 33 44 60 19 62 90 35 50 30 65 10 94 38 47 1 29 56 46 99 91 42
Card 16: 96 27 10 19 93 22 87 53 97 1 | 52 36 77 72 13 61 48 22 94 5 76 51 62 4 41 81 11 17 79 64 40 24 54 23 33
Card 17: 58 74 26 97 13 61 88 82 89 22 | 9 90 82 88 61 80 3 95 94 81 75 34 71 98 89 74 97 14 47 22 64 52 73 45 35
Card 18: 29 90 8 16 69 48 40 21 18 9 | 79 26 84 12 40 36 85 19 69 25 21 9 13 16 83 4 22 90 54 97 17 2 89 73 50
Card 19: 10 66 52 31 72 16 62 1 58 5 | 59 36 75 11 73 92 91 12 37 9 40 52 85 53 24 69 57 82 99 35 27 34 3 2 77
Card 20: 96 5 9 50 28 34 80 2 36 43 | 90 77 12 17 75 24 32 67 28 22 73 23 68 84 6 25 96 95 85 9 11 36 49 39 98
Card 21: 84 16 48 91 50 1 94 45 8 88 | 45 96 15 85 62 81 77 61 92 22 76 52 59 36 73 80 64 72 89 79 93 82 83 60 67
Card 22: 21 46 26 27 28 3 8 44 32 24 | 76 6 90 80 26 11 83 2 18 81 93 95 53 85 31 78 66 35 5 1 56 65 89 14 94
Card 23: 58 52 2 38 5 63 8 20 99 73 | 23 29 97 91 43 1 37 95 89 80 94 41 22 72 77 62 85 4 24 16 10 39 88 56 19
Card 24: 36 94 57 12 16 64 4 62 39 41 | 19 6 72 9 17 46 68 34 28 80 59 74 18 13 76 77 43 82 48 58 5 52 30 25 23
Card 25: 19 14 23 16 7 35 57 40 83 80 | 80 85 7 68 91 22 40 49 35 87 83 93 19 57 23 84 14 16 18 51 77 69 28 54 56
Card 26: 25 58 34 14 13 30 56 22 97 6 | 38 13 97 24 94 88 30 77 14 34 73 6 44 17 26 57 47 22 31 85 58 56 25 96 10
Card 27: 41 64 75 24 62 67 45 99 73 27 | 33 9 14 5 32 50 54 20 46 4 45 71 26 59 58 22 7 30 96 34 48 37 23 15 85
Card 28: 89 90 33 58 59 69 49 72 2 32 | 79 43 28 97 72 92 58 59 31 33 44 89 71 90 11 80 51 2 30 32 69 82 77 49 95
Card 29: 15 6 27 80 12 2 36 34 64 58 | 15 38 53 34 32 47 64 16 60 2 3 14 62 80 79 27 12 36 6 85 58 33 69 24 57
Card 30: 54 63 65 76 87 6 47 89 10 79 | 87 73 12 10 92 86 39 76 79 6 97 67 84 47 65 54 22 51 19 31 9 37 89 82 63
Card 31: 23 96 48 30 75 9 72 11 78 62 | 75 24 23 1 14 72 54 2 47 95 48 18 50 12 94 78 9 96 34 30 11 98 46 62 66
Card 32: 41 27 4 60 29 24 82 31 17 26 | 4 40 59 27 70 37 60 77 31 46 99 43 61 67 45 5 73 35 30 33 41 17 24 29 76
Card 33: 90 49 23 13 57 1 72 5 20 81 | 61 20 51 83 54 85 8 23 17 7 1 49 39 11 92 27 90 76 10 25 57 93 13 81 66
Card 34: 12 16 36 14 17 73 97 74 83 11 | 76 91 97 26 36 12 10 73 85 7 17 14 25 29 80 16 74 32 60 94 83 11 67 37 35
Card 35: 92 80 27 26 61 91 28 66 15 76 | 19 64 36 42 70 77 27 91 29 66 61 18 58 15 32 8 68 67 92 80 93 76 28 26 48
Card 36: 70 49 5 86 84 71 72 40 22 47 | 98 68 10 75 88 16 61 17 21 91 14 48 44 73 81 2 82 83 80 93 87 59 92 41 34
Card 37: 18 9 71 88 72 74 33 50 4 40 | 96 72 41 21 40 33 18 73 91 53 71 74 46 61 80 12 88 36 70 26 66 69 39 38 9
Card 38: 52 91 3 1 58 80 78 15 99 25 | 70 55 27 59 62 56 78 97 91 52 18 2 23 80 9 8 89 51 19 46 10 71 25 49 99
Card 39: 85 9 86 88 36 60 90 56 77 16 | 34 26 85 46 86 2 28 31 16 22 36 83 60 37 74 81 19 27 7 17 91 49 56 3 47
Card 40: 38 12 23 15 31 48 24 76 82 54 | 44 30 45 97 3 20 38 52 43 53 47 8 71 92 12 41 79 42 28 25 65 59 83 89 24
Card 41: 78 11 68 8 89 13 26 93 65 54 | 84 22 71 3 53 4 15 9 81 96 26 6 40 56 95 75 30 62 65 13 33 78 41 66 44
Card 42: 41 90 34 15 47 56 39 59 21 53 | 11 87 9 37 47 78 5 61 93 89 58 81 46 48 4 42 40 33 67 27 97 43 55 22 26
Card 43: 42 99 37 62 40 79 15 55 76 82 | 91 21 53 1 54 63 4 51 28 59 71 61 18 66 23 10 25 38 6 20 30 87 44 11 14
Card 44: 59 19 4 75 62 55 38 82 60 22 | 25 89 80 19 87 97 40 53 98 10 73 77 81 76 48 83 44 69 34 36 24 42 27 78 88
Card 45: 19 76 23 87 25 13 67 52 3 60 | 92 1 96 22 26 42 54 24 57 41 49 33 72 17 77 14 78 62 11 74 73 4 47 99 59
Card 46: 80 48 27 98 36 29 28 83 82 39 | 2 74 47 43 27 48 82 91 28 99 9 29 36 80 66 4 46 25 83 20 37 72 49 39 98
Card 47: 39 12 2 66 78 8 58 98 95 15 | 63 78 90 49 83 72 66 56 82 92 20 21 11 89 17 51 5 55 39 48 97 19 33 22 12
Card 48: 91 29 16 88 11 46 75 55 3 51 | 99 71 4 26 16 2 98 44 32 1 46 28 36 67 14 49 93 72 83 35 65 8 27 96 74
Card 49: 71 93 41 5 84 26 1 33 2 94 | 2 41 54 74 33 5 13 91 1 19 65 14 34 58 84 94 23 61 85 26 20 11 71 93 22
Card 50: 9 69 66 54 4 18 56 15 80 63 | 35 59 38 62 54 16 8 69 89 74 71 93 64 15 80 39 13 84 9 28 79 27 18 45 75
Card 51: 83 65 33 4 48 7 68 77 42 81 | 84 4 65 48 15 77 79 92 42 7 68 96 33 85 17 87 81 58 54 83 36 75 18 94 97
Card 52: 86 34 54 12 13 67 61 57 41 4 | 91 35 27 3 68 39 12 30 65 9 50 46 66 80 20 77 29 45 72 98 19 10 55 47 73
Card 53: 54 98 74 15 77 79 13 41 56 33 | 18 87 53 94 98 54 92 17 72 32 10 46 47 69 6 35 63 61 89 52 55 77 49 14 60
Card 54: 55 76 46 69 22 60 13 90 86 48 | 90 57 63 23 39 47 34 65 97 6 93 95 13 48 60 22 86 96 33 92 94 29 56 72 18
Card 55: 90 10 36 50 2 87 48 25 56 3 | 36 16 40 26 74 57 56 6 67 3 10 2 87 25 48 69 49 61 65 68 42 91 90 50 72
Card 56: 79 48 63 72 24 98 64 80 42 87 | 98 63 15 40 28 39 85 81 60 48 64 92 80 82 74 91 72 41 23 99 17 93 42 59 87
Card 57: 17 95 91 39 51 56 16 14 54 33 | 20 65 34 80 27 13 1 43 59 26 76 54 41 85 14 83 17 39 23 16 12 37 49 44 24
Card 58: 50 9 39 92 89 62 74 56 73 61 | 78 92 68 31 13 28 83 61 8 14 56 62 6 16 50 39 24 9 58 1 17 89 48 15 12
Card 59: 6 92 15 50 99 29 3 72 12 95 | 73 72 80 92 88 19 55 12 53 93 91 45 26 15 99 43 84 62 59 49 6 64 77 3 16
Card 60: 14 93 76 15 7 90 39 30 83 32 | 83 35 69 40 60 77 73 75 36 27 94 80 90 1 56 99 93 13 37 45 22 26 31 20 70
Card 61: 50 64 24 26 72 8 33 13 22 27 | 45 60 37 19 55 95 76 52 4 9 75 44 78 20 53 41 69 11 47 36 2 48 74 94 21
Card 62: 55 87 6 12 83 97 11 94 56 19 | 4 71 56 25 88 50 55 42 10 28 81 60 59 22 44 49 86 66 94 31 62 84 57 90 51
Card 63: 89 13 38 94 61 8 79 1 11 80 | 5 55 56 13 84 39 54 32 79 74 58 96 82 53 21 91 64 42 41 94 44 97 95 28 14
Card 64: 39 73 72 12 74 58 57 50 25 24 | 1 49 3 46 89 26 78 24 28 21 54 64 86 88 30 91 43 15 98 23 99 12 22 79 33
Card 65: 58 65 74 21 7 3 95 71 50 41 | 3 53 28 78 18 65 52 89 33 30 87 13 62 72 88 37 71 26 27 19 46 98 84 76 4
Card 66: 27 73 68 71 55 33 88 30 56 87 | 50 74 97 18 34 5 65 66 93 31 57 32 69 38 28 60 81 43 87 98 53 86 59 49 14
Card 67: 9 50 66 57 33 76 65 84 44 88 | 34 85 27 32 12 77 63 3 95 93 4 10 70 38 49 19 41 83 14 72 16 5 40 57 24
Card 68: 71 27 65 58 38 62 73 23 77 57 | 51 56 61 78 41 68 22 2 20 64 6 24 45 5 72 79 13 67 85 7 50 48 93 80 26
Card 69: 36 60 4 27 41 67 61 88 50 83 | 67 45 29 66 36 59 95 60 41 28 43 37 61 4 84 88 23 49 92 65 89 27 50 83 58
Card 70: 34 37 95 65 11 29 98 15 55 68 | 13 58 34 52 29 46 72 25 68 5 7 87 42 51 61 98 75 15 65 33 95 11 83 55 60
Card 71: 13 67 2 41 43 52 47 6 54 51 | 2 81 22 30 13 52 5 10 67 50 86 54 3 51 92 15 37 79 43 11 41 6 69 47 25
Card 72: 51 72 65 50 55 80 48 87 13 10 | 28 5 41 51 42 45 87 98 35 64 93 72 65 55 50 88 13 74 48 63 80 10 34 86 40
Card 73: 98 36 68 48 17 75 64 11 70 61 | 17 50 8 89 93 3 65 14 85 33 23 55 42 40 63 84 1 62 20 86 36 51 80 16 77
Card 74: 75 10 74 42 71 63 14 2 12 96 | 33 7 65 96 38 6 17 34 18 40 71 61 95 14 27 46 2 91 66 58 8 19 31 16 25
Card 75: 88 90 82 53 34 4 28 57 2 51 | 2 16 46 87 34 51 88 90 3 79 28 57 20 80 44 22 42 12 82 1 53 4 56 83 99
Card 76: 75 48 5 98 51 7 34 67 66 32 | 93 92 75 43 1 98 71 19 13 40 29 85 67 66 12 25 83 39 48 8 7 5 31 65 33
Card 77: 87 73 2 20 57 7 99 23 4 81 | 3 10 65 56 26 84 34 78 17 66 44 72 69 76 30 95 5 38 28 8 70 22 99 82 54
Card 78: 2 48 95 8 80 41 26 96 47 50 | 1 5 21 24 91 29 22 47 98 57 82 42 72 94 62 90 2 95 49 36 6 71 27 70 33
Card 79: 32 35 6 27 72 8 81 44 28 43 | 59 79 54 18 51 82 25 61 83 37 12 94 41 74 69 16 73 65 1 26 9 33 29 34 66
Card 80: 46 43 77 74 73 26 84 50 86 24 | 6 29 89 70 16 3 98 92 17 27 79 86 31 93 85 41 96 91 77 48 14 66 18 54 99
Card 81: 69 60 90 30 65 28 96 97 41 38 | 40 3 44 62 94 97 57 60 9 85 17 88 28 96 22 77 72 36 30 52 83 95 73 48 80
Card 82: 27 47 86 26 46 44 59 63 31 58 | 51 13 11 50 35 89 8 78 54 82 67 64 15 83 73 74 57 4 76 29 43 90 91 37 22
Card 83: 84 6 1 64 33 37 68 83 72 90 | 41 69 59 91 46 40 22 5 51 27 76 45 32 43 37 3 10 85 26 81 87 56 25 67 55
Card 84: 61 83 50 49 91 12 98 38 6 78 | 93 73 96 62 70 39 59 5 48 18 40 63 90 22 61 46 50 66 91 95 88 71 76 87 29
Card 85: 3 60 82 33 22 43 9 98 50 89 | 48 56 15 77 25 92 6 41 84 2 49 29 61 57 51 64 96 36 7 22 31 32 28 30 59
Card 86: 48 22 41 64 65 16 25 36 29 76 | 86 5 19 89 36 60 27 1 11 67 98 73 35 75 61 21 92 91 93 66 47 39 87 68 52
Card 87: 68 42 18 51 79 37 9 34 8 85 | 12 7 19 30 91 84 29 53 73 65 48 94 17 22 4 32 33 15 93 75 38 31 41 86 67
Card 88: 50 35 98 64 91 37 80 75 39 8 | 37 13 35 24 64 91 75 4 63 45 98 56 85 8 1 29 43 97 65 50 80 74 25 32 39
Card 89: 55 87 4 74 33 2 61 37 94 57 | 37 25 55 48 2 40 5 38 94 85 87 4 7 51 57 75 43 61 34 67 17 74 24 10 33
Card 90: 76 98 38 16 60 19 93 26 48 43 | 72 8 26 45 98 61 67 16 42 43 29 76 93 50 79 38 27 15 19 54 99 60 3 88 48
Card 91: 64 67 7 18 71 96 45 89 39 2 | 71 21 98 87 39 19 57 45 86 7 49 2 67 20 96 74 90 64 18 17 89 99 23 59 16
Card 92: 68 66 33 78 22 62 39 31 37 5 | 95 40 33 37 5 22 66 78 10 68 63 43 90 31 46 8 62 32 98 73 39 21 45 13 20
Card 93: 21 25 2 91 58 37 51 60 12 74 | 47 40 51 66 77 63 84 68 2 4 60 75 91 21 22 35 32 80 74 37 58 20 12 14 27
Card 94: 81 48 43 59 86 85 2 92 27 35 | 34 84 11 6 25 1 96 24 30 8 21 33 74 57 70 91 66 20 7 75 36 73 53 87 62
Card 95: 15 2 41 54 12 45 3 56 77 9 | 12 60 7 97 49 96 99 32 24 63 16 62 68 88 26 43 54 20 27 33 47 19 58 15 75
Card 96: 90 47 53 86 39 54 7 82 65 22 | 84 62 70 82 78 65 53 86 30 73 57 47 72 54 39 11 35 83 22 40 28 7 21 90 63
Card 97: 17 25 87 43 20 84 75 78 6 53 | 75 6 64 90 87 61 11 31 36 60 38 78 46 27 82 72 16 95 57 17 30 53 94 77 3
Card 98: 45 18 60 22 16 91 39 27 38 88 | 18 88 92 49 79 10 38 98 35 99 89 91 23 32 9 39 1 64 48 11 22 15 66 82 21
Card 99: 6 42 69 91 94 38 87 11 97 26 | 6 71 11 69 16 97 49 73 45 48 38 87 42 2 67 26 89 95 81 30 1 91 20 10 66
Card 100: 57 7 39 52 99 68 48 24 2 16 | 1 43 77 38 25 18 41 73 26 12 90 3 95 54 22 72 65 83 11 32 37 85 14 71 29
Card 101: 48 71 81 27 52 26 75 95 19 54 | 19 59 90 24 17 56 34 39 49 88 80 75 10 58 86 55 26 67 89 85 65 40 30 81 6
Card 102: 35 62 57 40 79 63 37 33 60 17 | 37 35 33 97 79 75 7 19 59 67 23 63 41 17 85 58 42 38 53 36 83 60 62 76 95
Card 103: 91 18 51 5 41 61 26 94 47 85 | 26 58 65 41 96 83 30 63 78 87 90 4 53 95 6 8 98 36 82 76 92 34 28 94 56
Card 104: 45 38 79 42 74 18 16 61 65 89 | 58 5 84 72 51 22 52 56 64 11 23 38 16 93 24 25 29 66 41 35 77 20 95 17 1
Card 105: 9 97 56 51 55 62 19 75 83 47 | 58 15 96 43 24 9 47 80 95 71 62 29 72 39 40 19 61 52 8 32 88 69 27 70 86
Card 106: 82 26 96 33 35 50 19 78 64 91 | 9 17 70 96 89 91 4 52 75 56 64 14 63 32 50 73 7 81 46 10 53 42 99 95 26
Card 107: 66 58 63 7 95 46 42 97 67 59 | 96 23 86 7 58 61 14 17 93 45 39 60 28 32 15 46 55 35 2 44 22 27 78 94 68
Card 108: 48 3 54 58 30 47 71 74 28 37 | 44 62 60 16 97 71 23 35 49 24 93 7 65 87 19 99 89 28 34 45 90 70 64 20 66
Card 109: 3 90 39 83 16 47 44 1 28 65 | 38 48 24 37 96 81 60 54 6 58 68 23 21 35 26 45 98 85 40 63 64 80 29 97 34
Card 110: 3 12 59 28 93 26 92 52 38 64 | 65 36 5 49 72 86 6 33 84 73 98 89 47 61 57 14 32 44 10 97 69 40 99 7 51
Card 111: 3 2 30 72 16 80 46 52 51 64 | 76 86 57 44 89 26 96 10 1 23 59 32 60 41 77 73 68 29 78 75 62 28 6 99 71
Card 112: 84 34 17 40 47 44 33 99 65 79 | 65 74 97 55 33 13 52 34 47 40 17 56 6 96 76 8 59 51 99 84 18 48 79 44 24
Card 113: 13 92 5 86 85 36 74 28 82 18 | 48 36 5 37 46 95 90 82 19 68 10 8 11 18 80 69 63 86 85 28 92 64 71 32 94
Card 114: 96 50 90 97 11 42 79 78 56 26 | 78 50 27 47 96 97 62 42 26 86 84 72 79 20 11 43 8 64 87 95 56 68 90 67 52
Card 115: 29 36 84 82 38 61 86 73 25 45 | 37 58 28 45 6 36 29 43 95 92 56 73 44 83 25 97 61 82 84 71 69 38 77 86 42
Card 116: 97 19 96 10 44 26 81 79 7 89 | 39 55 63 4 94 24 29 12 65 84 68 31 75 23 15 71 54 82 56 42 5 53 96 40 51
Card 117: 74 94 58 42 30 40 97 33 73 93 | 62 59 9 41 71 98 97 19 32 24 40 1 56 14 74 87 52 92 61 90 37 45 20 80 31
Card 118: 96 45 27 88 2 82 87 99 39 17 | 53 36 44 55 21 88 33 74 26 22 61 46 18 43 20 68 54 49 87 67 35 73 3 63 1
Card 119: 80 19 2 6 68 32 23 22 99 28 | 20 40 66 38 87 59 41 55 54 57 21 12 11 45 65 16 24 3 63 68 73 98 99 14 17
Card 120: 84 92 65 58 80 55 2 72 78 75 | 66 64 44 88 1 41 59 13 29 52 30 71 90 21 76 87 73 70 25 61 26 69 32 81 95
Card 121: 52 32 92 91 42 8 15 19 1 30 | 89 92 96 46 25 24 48 90 59 83 15 75 28 57 61 39 43 42 84 95 45 73 41 98 67
Card 122: 70 89 60 43 1 58 49 46 28 45 | 74 62 66 13 67 95 55 10 9 70 54 84 29 31 8 96 59 81 27 3 63 12 1 82 87
Card 123: 41 51 96 76 48 54 4 71 45 84 | 68 66 2 4 78 15 1 62 75 94 59 7 12 28 60 39 16 42 61 8 84 89 46 95 35
Card 124: 48 61 35 81 94 73 98 46 53 85 | 55 2 40 3 84 4 11 88 77 62 79 39 85 27 36 82 33 93 29 47 67 50 12 91 19
Card 125: 63 44 28 58 5 26 85 93 50 76 | 39 10 25 30 2 3 42 60 94 83 57 9 75 13 67 90 36 81 18 72 23 37 48 19 69
Card 126: 41 28 15 87 88 50 57 27 78 30 | 3 24 89 91 47 40 11 83 76 33 53 74 9 42 43 66 70 17 99 29 75 19 98 90 64
Card 127: 77 24 27 2 59 54 6 61 65 12 | 34 42 68 15 70 75 2 27 61 40 6 13 24 54 12 59 44 65 22 88 86 77 3 79 64
Card 128: 3 15 55 7 80 69 64 13 77 33 | 34 50 3 17 88 66 79 59 38 1 41 11 55 8 7 80 68 25 16 46 61 19 13 74 33
Card 129: 26 19 39 29 4 6 55 49 67 12 | 72 53 12 63 64 49 19 98 3 45 4 35 28 43 51 26 38 23 96 44 22 7 79 80 67
Card 130: 80 61 1 62 46 5 84 17 14 49 | 75 84 61 85 29 62 46 1 17 63 3 31 57 79 19 58 96 14 76 42 32 49 5 80 56
Card 131: 63 30 2 29 71 37 12 36 16 47 | 14 82 99 98 52 39 19 60 4 90 74 33 65 27 62 7 32 64 10 37 35 15 11 69 59
Card 132: 68 81 89 42 36 34 18 53 74 41 | 24 37 14 73 97 54 59 90 9 29 49 10 47 32 85 87 99 98 78 39 27 22 57 81 33
Card 133: 89 9 10 61 30 81 36 84 70 12 | 69 10 4 90 65 50 93 34 54 13 80 16 98 49 42 35 77 61 85 55 86 6 11 23 39
Card 134: 27 19 90 30 85 41 58 79 53 11 | 15 58 36 52 11 93 54 24 26 39 51 79 56 35 30 85 53 6 17 32 5 16 87 27 33
Card 135: 26 44 30 42 99 89 76 27 64 48 | 38 70 95 25 60 2 49 35 71 5 17 63 62 88 20 41 79 19 67 72 40 46 81 10 74
Card 136: 70 64 49 85 48 16 41 52 91 24 | 48 2 62 28 54 78 50 52 83 7 43 90 96 60 10 26 12 6 95 51 91 25 47 67 87
Card 137: 10 6 53 80 8 93 62 98 60 82 | 28 19 36 1 14 73 85 16 8 32 21 13 97 90 2 29 34 69 55 80 6 27 62 37 10
Card 138: 28 25 60 17 99 39 35 48 34 26 | 46 32 33 43 98 10 62 70 41 17 40 27 34 67 4 26 85 63 58 60 16 97 14 57 20
Card 139: 42 49 16 73 10 23 35 41 93 8 | 76 28 17 32 91 96 92 19 61 97 88 27 83 80 72 57 87 33 14 67 42 10 64 94 65
Card 140: 81 17 80 94 54 21 57 12 60 48 | 88 27 7 11 6 28 98 33 94 77 14 53 1 92 50 22 93 49 18 86 84 63 42 64 90
Card 141: 98 31 93 30 72 39 33 35 57 54 | 45 95 69 89 51 55 21 67 50 68 46 5 86 65 17 82 29 48 8 91 71 63 25 52 1
Card 142: 81 61 78 99 24 42 13 10 3 9 | 8 41 38 63 5 82 54 46 67 83 45 20 44 19 91 92 1 4 77 32 17 59 21 50 94
Card 143: 78 65 47 51 54 16 23 59 39 34 | 34 53 78 4 29 59 3 87 23 73 16 65 24 38 58 21 89 92 54 39 47 30 66 37 88
Card 144: 61 73 60 75 2 23 24 44 1 40 | 45 72 5 22 77 88 78 21 76 16 39 85 46 51 97 80 4 27 41 37 9 71 38 28 65
Card 145: 28 24 22 79 56 23 51 50 54 63 | 22 25 11 44 59 28 50 2 29 85 79 24 54 8 6 23 92 20 71 56 81 95 51 26 63
Card 146: 28 74 36 10 32 15 72 30 83 73 | 76 7 10 49 11 74 20 62 24 26 21 40 79 41 34 55 98 95 82 43 89 37 9 45 52
Card 147: 80 20 78 59 53 42 31 95 63 11 | 80 59 61 57 86 42 78 53 21 95 92 75 15 31 97 72 5 11 41 90 63 56 44 25 20
Card 148: 58 73 92 17 9 24 30 49 5 20 | 95 77 78 72 20 24 1 27 82 92 58 49 74 59 5 65 73 9 84 4 14 76 43 17 30
Card 149: 87 18 12 98 41 27 13 48 82 37 | 87 78 2 88 61 36 95 25 81 18 41 33 1 69 34 57 27 73 55 12 82 31 59 48 6
Card 150: 35 47 42 66 43 72 76 68 21 20 | 83 85 8 71 21 6 60 74 96 55 2 19 9 11 98 62 20 39 41 10 30 81 33 51 31
Card 151: 83 24 73 61 49 67 89 95 60 43 | 59 84 28 21 26 72 37 43 38 3 13 6 9 27 7 42 77 19 65 16 71 52 29 80 33
Card 152: 99 54 98 50 69 82 51 95 73 62 | 86 38 88 79 9 63 45 34 23 80 47 30 83 14 93 4 96 49 15 52 16 20 33 76 75
Card 153: 76 36 9 23 70 53 41 74 27 64 | 40 71 39 29 88 19 76 97 46 23 4 68 67 33 52 95 62 91 60 11 75 13 81 99 37
Card 154: 27 71 72 6 69 76 59 44 51 80 | 5 2 17 82 58 83 7 9 61 70 43 96 87 78 69 42 88 74 85 31 99 13 16 81 15
Card 155: 82 71 39 56 8 42 1 63 92 11 | 16 52 94 85 67 11 98 65 50 71 2 78 43 1 41 66 86 72 77 36 30 6 46 70 38
Card 156: 90 44 46 70 71 60 5 68 57 77 | 1 28 62 56 87 32 23 37 40 68 18 94 20 97 72 21 4 33 50 73 16 80 22 14 45
Card 157: 60 51 2 24 69 85 55 47 62 48 | 6 86 49 55 78 42 61 98 30 77 65 4 21 20 38 93 54 18 72 44 32 8 14 58 37
Card 158: 50 45 37 6 18 12 2 69 23 76 | 10 70 54 79 95 4 36 87 73 22 94 42 26 21 57 15 7 14 74 90 67 3 33 49 63
Card 159: 26 12 57 16 96 61 42 99 71 25 | 25 51 26 9 47 57 4 53 61 12 97 36 76 39 99 65 92 16 78 41 71 62 48 96 42
Card 160: 48 43 26 9 31 62 10 60 38 59 | 59 26 38 4 10 85 55 6 62 18 35 33 29 95 9 60 79 11 24 34 43 22 88 16 12
Card 161: 15 82 90 63 18 26 57 9 47 35 | 63 23 43 56 82 92 9 42 94 4 90 89 10 26 62 32 20 30 52 85 18 19 47 66 57
Card 162: 4 37 67 35 71 22 17 14 49 16 | 10 82 7 16 87 99 84 45 20 21 97 79 43 29 86 54 19 9 81 85 62 78 1 61 24
Card 163: 41 6 57 96 5 21 9 89 65 27 | 26 12 23 9 17 89 33 2 28 65 92 10 97 27 96 56 80 64 90 50 52 46 42 6 5
Card 164: 53 51 16 32 60 84 55 14 18 25 | 18 52 56 28 6 89 80 19 23 29 57 34 8 70 79 41 91 90 96 88 66 35 97 44 82
Card 165: 17 66 59 23 35 45 32 49 56 26 | 2 74 97 9 80 76 12 50 31 15 53 41 56 33 30 98 20 44 25 81 91 45 55 99 24
Card 166: 92 25 70 80 85 88 62 81 61 43 | 40 62 21 83 44 18 87 5 81 43 13 10 85 30 1 53 99 79 68 16 49 20 56 7 15
Card 167: 36 63 98 92 11 59 6 47 2 83 | 41 90 83 68 54 64 25 80 56 7 99 16 5 30 27 88 63 11 22 67 81 17 9 39 95
Card 168: 64 20 56 74 5 21 70 52 33 58 | 4 64 28 7 44 80 12 38 8 89 83 57 37 54 87 69 48 63 2 72 78 85 62 60 15
Card 169: 13 92 14 8 98 84 54 85 97 38 | 51 90 69 98 38 13 4 8 67 5 91 14 54 68 10 18 83 56 41 25 81 73 58 17 62
Card 170: 54 39 20 12 50 6 83 85 33 45 | 3 97 19 5 61 66 81 46 24 56 29 92 52 85 73 43 71 13 60 12 36 62 64 35 32
Card 171: 33 36 27 29 93 73 83 62 60 82 | 4 71 14 72 45 58 10 38 12 69 27 3 95 31 84 34 66 83 21 87 22 5 75 53 35
Card 172: 92 9 73 82 15 6 44 28 88 34 | 99 78 11 46 9 36 89 65 17 8 16 94 68 63 12 54 25 33 69 47 13 38 93 50 59
Card 173: 41 10 43 83 81 39 66 17 28 63 | 48 79 29 20 64 59 55 46 47 45 70 62 37 16 84 68 82 88 67 2 65 97 18 56 14
Card 174: 53 73 55 83 9 57 87 35 1 42 | 66 52 56 76 19 92 78 91 82 87 20 39 31 72 43 71 11 33 15 18 75 84 46 47 22
Card 175: 93 51 74 60 92 84 87 58 81 34 | 67 7 99 68 30 66 27 43 65 71 28 50 2 13 32 26 72 76 17 31 49 3 54 95 82
Card 176: 3 92 48 97 73 37 84 44 53 91 | 21 35 42 99 87 36 31 43 79 52 89 6 59 14 57 26 76 33 38 19 82 63 74 25 39
Card 177: 46 93 6 62 56 3 76 64 59 7 | 88 46 7 98 93 76 60 59 6 3 72 64 21 40 77 78 62 47 61 42 45 99 56 28 41
Card 178: 43 69 96 12 88 93 97 33 80 20 | 58 94 56 93 12 2 20 24 14 40 27 73 97 80 99 43 74 16 91 88 33 96 71 25 69
Card 179: 59 1 88 53 87 90 39 32 97 89 | 70 57 90 20 73 35 32 88 58 71 36 59 33 1 55 97 87 98 45 39 9 96 53 60 89
Card 180: 33 19 87 82 90 1 14 78 84 35 | 89 19 20 3 66 23 87 54 78 39 65 84 35 83 33 69 14 90 44 49 72 38 75 82 1
Card 181: 60 32 78 83 82 29 90 14 46 87 | 63 72 92 39 75 10 43 40 7 89 11 32 86 54 4 90 68 45 95 91 13 1 56 6 29
Card 182: 11 18 63 73 64 39 9 92 82 62 | 8 27 69 64 3 53 73 11 21 39 10 18 35 44 56 62 75 72 4 51 6 42 82 37 76
Card 183: 88 56 32 39 23 49 92 50 59 28 | 92 2 48 32 63 49 59 83 56 1 91 41 50 88 28 17 39 57 20 36 34 6 60 23 42
Card 184: 34 97 99 76 32 75 69 83 60 79 | 44 86 52 99 85 32 34 4 28 79 76 46 22 83 54 56 60 31 75 51 80 89 45 69 97
Card 185: 74 35 67 1 55 18 60 37 17 50 | 85 50 44 20 87 14 22 32 55 18 17 59 28 93 1 96 68 37 74 60 98 97 67 35 4
Card 186: 44 36 3 80 6 24 90 81 34 61 | 76 69 14 77 53 21 4 16 18 46 9 59 34 38 98 13 30 11 7 17 88 41 42 99 23
Card 187: 54 53 39 24 80 78 13 46 17 67 | 62 91 86 52 80 59 26 78 73 46 16 77 18 37 9 55 13 17 72 69 32 68 67 34 81
Card 188: 50 19 11 73 61 75 67 54 12 84 | 73 84 97 56 74 59 35 75 61 14 15 19 24 12 51 6 58 11 89 67 53 25 21 54 50
Card 189: 76 48 38 17 97 67 42 23 82 6 | 73 10 17 70 85 95 54 43 93 91 3 82 26 16 23 76 33 38 67 48 5 53 97 6 42
Card 190: 61 19 93 50 11 56 32 5 84 37 | 32 62 82 84 50 61 91 15 69 19 68 20 74 92 10 55 11 93 39 37 18 5 47 22 46
Card 191: 2 58 93 26 23 31 60 74 35 47 | 74 64 26 68 8 60 11 73 93 42 87 2 31 97 61 47 65 24 58 66 53 38 94 46 88
Card 192: 64 37 49 88 95 79 29 59 2 99 | 39 63 31 68 36 24 60 9 94 89 93 13 45 77 38 55 14 23 92 83 29 33 44 34 71
Card 193: 19 23 99 89 26 80 63 60 59 66 | 78 80 99 60 66 47 84 59 24 61 5 63 67 26 87 42 96 10 54 98 19 81 4 43 8
Card 194: 6 36 31 40 89 19 63 16 60 68 | 75 84 91 77 40 5 81 10 52 86 19 96 16 58 30 6 78 61 82 74 97 89 90 62 37
Card 195: 45 54 92 67 47 65 91 98 87 29 | 5 72 15 25 88 36 73 20 91 90 83 46 87 47 10 22 69 2 62 57 28 93 3 59 1
Card 196: 88 34 96 16 54 9 17 89 20 52 | 20 54 47 61 12 57 38 11 8 85 74 52 90 77 41 46 4 89 19 39 34 83 55 7 97
Card 197: 38 3 57 72 97 45 66 73 56 8 | 83 68 28 64 58 66 85 15 53 65 23 3 37 87 20 17 47 63 55 69 88 70 62 92 76
Card 198: 98 66 29 17 83 9 6 84 36 70 | 21 10 31 84 93 14 67 29 24 91 12 41 99 19 5 56 83 74 2 8 79 95 64 49 53
Card 199: 41 93 33 26 45 65 97 39 20 95 | 82 8 30 6 34 58 49 16 29 91 64 80 50 9 74 59 19 60 69 53 61 3 83 67 35
Card 200: 86 85 91 2 27 65 45 73 60 69 | 66 26 28 7 98 80 14 52 6 35 57 46 39 4 30 55 94 75 82 83 96 13 74 9 58
Card 201: 30 53 41 42 10 51 37 63 46 67 | 84 74 33 5 86 32 45 83 52 1 13 43 65 49 98 91 9 11 96 66 15 62 27 44 24

View File

@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\AdventCommon\AdventCommon.csproj" />
</ItemGroup>
</Project>

173
2023/Day05CSharp/Program.cs Normal file
View File

@@ -0,0 +1,173 @@
// See https://aka.ms/new-console-template for more information
using AdventCommon;
using System.Collections;
using System.Net.Sockets;
var p1exampleSln = Part01("example-input.txt");
var p1puzzleSln = Part01("puzzle-input.txt");
Console.WriteLine("Part01 Example: " + p1exampleSln);
Console.WriteLine("Part01 Puzzle: " + p1puzzleSln);
long Part01(string fileName)
{
Day05Input d = new Day05Input(fileName);
List<long> locations = new List<long>();
long min = long.MaxValue;
foreach (var seed in d.Seeds)
{
long loc = Day05Input.MapEntry.GetConversion(seed.Number, d.Maps);
locations.Add(loc);
min = long.Min(loc, min);
}
return min;
}
class Day05Input : PuzzleInput
{
public class MapEntry
{
public MapEntry(string line)
{
var split = line.Split(' ', StringSplitOptions.RemoveEmptyEntries);
long dest = Int64.Parse(split[0]);
long source = Int64.Parse(split[1]);
long range = Int64.Parse(split[2]);
SourceRangeStart = source;
DestinationRangeStart = dest;
Range = range;
}
public MapEntry(long sourceStart, long destStart, long length)
{
SourceRangeStart = sourceStart;
DestinationRangeStart = destStart;
Range = length;
}
public long SourceRangeStart { get; private set; }
public long Range { get; private set; }
public long DestinationRangeStart { get; private set; }
public bool Contains(long val)
{
return (SourceRangeStart <= val && val < SourceRangeStart + Range);
}
public long GetDestinationCategory(long srcVal)
{
return DestinationRangeStart + (srcVal - SourceRangeStart);
}
public static long GetConversion(long val, List<MapEntry> entryMap)
{
foreach (var entry in entryMap)
{
if (entry.Contains(val))
{
return (val - entry.SourceRangeStart) + entry.DestinationRangeStart;
}
}
return val;
}
public static long GetConversion(long val, List<List<MapEntry>> Maps)
{
long currentVal = val;
foreach (var entry in Maps)
{
currentVal = GetConversion(currentVal, entry);
}
return currentVal;
}
}
public class Seed
{
public Seed(long number)
{
Number = number;
}
public long Number { get; private set; }
}
public List<Seed> Seeds { get; private set; } = new List<Seed>();
public List<MapEntry> SeedToSoil { get; private set; } = new List<MapEntry>();
public List<MapEntry> SoilToFertilizer { get; private set; } = new List<MapEntry>();
public List<MapEntry> FertilizerToWater { get; private set; } = new List<MapEntry>();
public List<MapEntry> WaterToLight { get; private set; } = new List<MapEntry>();
public List<MapEntry> LightToTemperature { get; private set; } = new List<MapEntry>();
public List<MapEntry> TemperatureToHumidity { get; private set; } = new List<MapEntry>();
public List<MapEntry> HumidityToLocation { get; private set; } = new List<MapEntry>();
public List<List<MapEntry>> Maps { get; private set; } = new List<List<MapEntry>>();
public Day05Input(string fileName, bool isPart02 = false) : base(fileName, false)
{
Maps.Add(SeedToSoil);
Maps.Add(SoilToFertilizer);
Maps.Add(FertilizerToWater);
Maps.Add(WaterToLight);
Maps.Add(LightToTemperature);
Maps.Add(TemperatureToHumidity);
Maps.Add(HumidityToLocation);
int currentMap = -1;
foreach (var line in Lines)
{
// Read the seeds line
if (Seeds.Count == 0)
{
// First line is seeds
if (!line.Split(':')[0].Equals("seeds"))
{
throw new InvalidDataException("Expected seeds");
}
if (!isPart02)
{
var seeds = line.Split(':')[1].Split(' ', StringSplitOptions.RemoveEmptyEntries);
foreach (var seed in seeds)
{
Seeds.Add(new Seed(Int64.Parse(seed)));
}
}
else
{
var seeds = line.Split(':')[1].Split(' ', StringSplitOptions.RemoveEmptyEntries);
if (!(seeds.Length % 2 == 0)) throw new InvalidDataException("Uneven seed count");
for (int i = 0; i < seeds.Length; i+=2)
{
}
}
continue;
}
if (String.IsNullOrWhiteSpace(line)) continue;
if (line.Contains("map:"))
{
// Move to the next map
currentMap++;
}
else
{
Maps[currentMap].Add(new MapEntry(line));
}
}
}
}

View File

@@ -0,0 +1,8 @@
{
"profiles": {
"Day05CSharp": {
"commandName": "Project",
"workingDirectory": "C:\\dev\\DevSandbox\\AdventOfCode\\2023\\Day05CSharp"
}
}
}

View File

@@ -0,0 +1,33 @@
seeds: 79 14 55 13
seed-to-soil map:
50 98 2
52 50 48
soil-to-fertilizer map:
0 15 37
37 52 2
39 0 15
fertilizer-to-water map:
49 53 8
0 11 42
42 0 7
57 7 4
water-to-light map:
88 18 7
18 25 70
light-to-temperature map:
45 77 23
81 45 19
68 64 13
temperature-to-humidity map:
0 69 1
1 0 69
humidity-to-location map:
60 56 37
56 93 4

View File

@@ -0,0 +1,258 @@
seeds: 1347397244 12212989 2916488878 1034516675 2821376423 8776260 2240804122 368941186 824872000 124877531 1597965637 36057332 4091290431 159289722 1875817275 106230212 998513229 159131132 2671581775 4213184
seed-to-soil map:
2988689842 4194451945 100515351
2936009234 3353543976 52680608
588295233 2638661119 66434163
3932833115 2936009234 88315480
3525561241 3331695912 21848064
1622262003 1969921080 210668061
2160566101 909457337 162053391
1832930064 1887384181 82536899
3625461917 3024324714 307371198
3547409305 3680043285 78052612
1915466963 588295233 240773057
3089205193 3758095897 436356048
4021148595 3406224584 273818701
2156240020 2705095282 4326081
1164190025 2180589141 458071978
2477360206 829068290 80389047
2322619492 2709421363 154740714
654729396 1377923552 509460629
2557749253 1211672006 166251546
2724000799 1071510728 140161278
soil-to-fertilizer map:
3961802244 3774724750 90737174
3164426550 3931513861 70563571
147221566 1279409424 704464
1394834067 2074132435 40845148
3795834030 2142537807 47621185
4083197470 4095560143 199407153
2722903919 2876212954 93296050
3467494732 2775293966 100918988
1809650294 1815421878 66426374
505665614 275280169 12031240
2142537807 4002077432 60985377
1577608496 331482268 177958690
2590855103 2196397738 132048816
1942888942 1978207624 24340152
756722275 120895382 4815243
3435289775 3899308904 32204957
1967229094 715059087 147748489
3955563498 2190158992 6238746
356096070 125710625 149569544
2520387506 2704826369 70467597
517696854 2041922514 32209921
1755567186 0 54083108
348569226 1280113888 7526844
761537518 1597328127 34415327
1114796271 1631743454 128592301
0 1494456232 102871895
1070625412 287311409 44170859
549906775 1287640732 206815500
102871895 710084154 4974933
1298474695 1881848252 96359372
3843455215 2549697361 112108283
3761987050 3865461924 33846980
4052539418 2674168317 30658052
1435679215 862807576 141929281
795952845 1004736857 274672567
3729489716 4063062809 32497334
2203523184 3085216895 316864322
2931907860 3402081217 11267883
107846828 2002547776 39374738
2816199969 2969509004 115707891
3568413720 3413349100 161075996
2943175743 2328446554 221250807
3234990121 3574425096 200299654
4282604623 2661805644 12362673
147926030 509440958 200643196
1876076668 54083108 66812274
1243388572 1760335755 55086123
fertilizer-to-water map:
2460553918 850437816 63304366
1259757436 1986466040 193004355
2879827793 2638634287 61837387
39629536 0 3143529
2160922553 2535779758 68016930
2523858284 922523353 36811379
52449107 1199799263 207670511
2692884203 2603796688 34837599
3755186617 147251641 492169035
3266515480 3620937477 292130997
1596851845 4077877285 217090011
2727721802 913742182 8781171
3055087322 3913068474 164808811
2228939483 2179470395 229525704
3668162112 1052896909 87024505
3219896133 1539684314 30399976
1510550909 1679599925 86300936
0 3143529 39629536
2560669663 1407469774 132214540
1452761791 1142010145 57789118
260119618 2700471674 920465803
3250296109 1036677538 16219371
1813941856 1026924408 9753130
4247355652 2488168114 47611644
1823694986 959334732 67589676
2831305507 639420676 48522286
2736502973 52449107 94802534
1180585421 2408996099 79172015
2941665180 1765900861 113422142
2458465187 1139921414 2088731
3558646477 1570084290 109515635
1891284662 687942962 162494854
2053779516 1879323003 107143037
water-to-light map:
2196302869 3170532562 121192468
3065704582 2916528129 254004433
2858667310 1154274853 9085577
3789349818 1163360430 70779786
2064226029 1434838179 90165206
1448515654 725716988 103420445
2690533041 2124509945 168134269
347894075 3345882022 38285799
3966625235 2618593488 35838159
4186823059 4134088017 89981817
1701108140 1088713231 65561622
2589948930 2518009377 100584111
4283393470 4230658428 11573826
0 3384167821 347894075
1638541363 2061943168 62566777
1296314418 573515752 152201236
1065865126 194284013 230449292
1766669762 1991838394 70104774
830054797 2292644214 110248534
3595088014 3291725030 12245358
1978385607 1905997972 85840422
3607333372 424733305 148782447
3511869770 2833309885 83218244
4134088017 4242232254 52735042
2154391235 3303970388 41911634
494720868 3732061896 335333929
1836774536 1234140216 141611071
2317495337 1633544379 272453593
4002463394 2402892748 64932431
940303331 829137433 125561795
1551936099 954699228 27518372
4276804876 4224069834 6588594
3756115819 2467825179 33233999
2867752887 0 19073457
386179874 1525003385 108540994
1579454471 1375751287 59086892
3319709015 2501059178 16950199
3336659214 19073457 175210556
3860129604 982217600 106495631
2886826344 2654431647 178878238
light-to-temperature map:
977891457 1797846421 453265654
3607226990 3913974738 161345346
2303244644 3266224873 12707372
1537599301 3278932245 264559714
354466514 3168465761 62294113
747844586 3543491959 55668994
2982698313 3599160953 269886589
2067998119 2251112075 27763866
59336731 230685734 266868096
3768572336 1500157846 31849471
3856743875 939537646 438223421
2095761985 59336731 146190926
326204827 4075320084 28261687
1502134302 3230759874 35464999
1431157111 868560455 70977191
2315952016 2579115195 227102616
1802159015 1532007317 265839104
2241952911 807268722 61291733
3297512098 497553830 309714892
852851251 4103581771 2643427
3252584902 3869047542 44927196
855494678 1377761067 122396779
2543054632 4106225198 139404427
2682459059 2278875941 300239254
803513580 4245629625 49337671
416760627 205527657 25158077
3800421807 2806217811 56322068
441918704 2862539879 305925882
temperature-to-humidity map:
3507573 490548898 11693081
545755853 699222305 569882925
3794976513 167435410 77260251
0 1526297837 3507573
1335234764 1766508370 36536350
2131780538 502241979 64264976
3707588652 1679120509 87387861
96082543 2288930706 220305732
1371771114 1529805410 106547120
481810045 3044354609 63945808
15200654 1426594789 7560739
3206337878 109359655 58075755
2445677382 2019348918 269581788
1909096745 3571407035 4209780
3138678479 4049712539 66833109
3400069156 3490205314 81201721
4084645800 3846924477 65868498
2353535073 1434155528 92142309
1716598669 3935506457 114206082
3264413633 4116545648 30901597
1913306525 3628450464 218474013
3205511588 3461720938 826290
2748703371 2770603565 195642711
2715259170 244990096 33149766
1478318234 3108300417 88629505
22761393 0 73321150
3295315230 3575616815 45887125
3872236764 278139862 212409036
2196045514 1269105230 157489559
2972004168 2509236438 123906332
316388275 3296299168 165421770
1685215763 3025113077 18894296
2748408936 244695661 294435
3704521599 4147447245 3067053
1215008024 566506955 120226740
1830804751 3912792975 22713482
1704110059 686733695 12488610
3488217401 1803044720 216304198
1872711004 3044007373 347236
1566947739 2652335541 118268024
3481270877 3621503940 6946524
2944346082 3462547228 27658086
3095910500 1636352530 42767979
1115638778 3196929922 99369246
3341202355 2966246276 58866801
1853518233 2633142770 19192771
1873058240 73321150 36038505
humidity-to-location map:
336906655 0 11018487
4177510177 2085057023 105144397
1299579245 2985741466 175347598
643133711 2270603056 161424888
2404489601 1000033728 105953201
4282654574 2864154964 12312722
3409171342 3327025690 30826088
2119751049 2190201420 80401636
3393269098 3357851778 15902244
82121354 319849190 39107402
1953814423 3161089064 165936626
64524116 385149760 17597238
3439997430 2057119912 27937111
0 358956592 26193168
347925142 11018487 93152804
1484466972 2432027944 360604841
2510442802 643133711 347359888
26193168 402746998 38330948
1190305465 2946259551 39481915
2200152685 1105986929 204336916
3467934541 2792632785 71522179
804558599 3373754022 385746866
3539456720 1310323845 638053457
2857802690 3759500888 535466408
121228756 104171291 215677899
1229787380 2876467686 69791865
1474926843 990493599 9540129
1845071813 1948377302 108742610