Initial Commit
This commit is contained in:
129
2023/Day01CSharp/Program.cs
Normal file
129
2023/Day01CSharp/Program.cs
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user