[Language: C#]
This isn't the most performant or elegant, it's the first one that worked. I have 3 kids and a full time job. If I get through any of these, it'll be first pass through and first try that gets the correct answer.
Part 1 was very easy, just iterated the string checking if the char was a digit. Ditto for the last, by reversing the string. Part 2 was also not super hard, I settled on re-using the iterative approach, checking each string lookup value first (on a substring of the current char), and if the current char isn't the start of a word, then checking if the char was a digit. Getting the last number required reversing the string and the lookup map.
Part 1:
var list = new List((await File.ReadAllLinesAsync(@".\Day 1\PuzzleInput.txt")));
int total = 0;
foreach (var item in list)
{
//forward
string digit1 = string.Empty;
string digit2 = string.Empty;
foreach (var c in item)
{
if ((int)c >= 48 && (int)c <= 57)
{
digit1 += c;
break;
}
}
//reverse
foreach (var c in item.Reverse())
{
if ((int)c >= 48 && (int)c <= 57)
{
digit2 += c;
break;
}
}
total += Int32.Parse(digit1 +digit2);
}
Console.WriteLine(total);
Part 2:
var list = new List((await File.ReadAllLinesAsync(@".\Day 1\PuzzleInput.txt")));
var numbers = new Dictionary() {
{"one" , 1}
,{"two" , 2}
,{"three" , 3}
,{"four" , 4}
,{"five" , 5}
,{"six" , 6}
,{"seven" , 7}
,{"eight" , 8}
, {"nine" , 9 }
};
int total = 0;
string digit1 = string.Empty;
string digit2 = string.Empty;
foreach (var item in list)
{
//forward
digit1 = getDigit(item, numbers);
digit2 = getDigit(new string(item.Reverse().ToArray()), numbers.ToDictionary(k => new string(k.Key.Reverse().ToArray()), k => k.Value));
total += Int32.Parse(digit1 + digit2);
}
Console.WriteLine(total);
string getDigit(string item, Dictionary numbers)
{
int index = 0;
int digit = 0;
foreach (var c in item)
{
var sub = item.AsSpan(index++);
foreach(var n in numbers)
{
if (sub.StartsWith(n.Key))
{
digit = n.Value;
goto end;
}
}
if ((int)c >= 48 && (int)c <= 57)
{
digit = ((int)c) - 48;
break;
}
}
end:
return digit.ToString();
}
Zoomers don't matter. Young people don't vote. Elections are decided by adults, and the average age of high political activity in America is from the 50 And over crowd.