feat: solved day 11 part 1 and part 2
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
using System.Diagnostics;
|
||||
|
||||
using PlutonianPebbles;
|
||||
|
||||
if (args.Length is 0)
|
||||
{
|
||||
Console.WriteLine("Please provide a path to the input file.");
|
||||
@@ -25,69 +27,9 @@ var stones = input
|
||||
|
||||
var observer = Observer.Of(stones);
|
||||
|
||||
var result = observer.Blink(25);
|
||||
var times = isPart2 ? 75 : 25;
|
||||
|
||||
var result = observer.Blink(times);
|
||||
|
||||
stopwatch.Stop();
|
||||
Console.WriteLine($". ({stopwatch.ElapsedMilliseconds}ms)");
|
||||
|
||||
class Observer
|
||||
{
|
||||
private readonly List<Stone> _stones;
|
||||
|
||||
private Observer(List<Stone> stones)
|
||||
{
|
||||
_stones = stones;
|
||||
}
|
||||
|
||||
public static Observer Of(List<Stone> stones) => new(stones);
|
||||
|
||||
public string Blink(int times)
|
||||
{
|
||||
if (times < 1)
|
||||
{
|
||||
return string.Join(" ", _stones);
|
||||
}
|
||||
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
record Stone
|
||||
{
|
||||
private readonly string _engravedValue;
|
||||
|
||||
private Stone(string engravedValue)
|
||||
{
|
||||
_engravedValue = engravedValue;
|
||||
}
|
||||
|
||||
public static Stone From(string engraving) => new(engraving);
|
||||
|
||||
public List<Stone> Transform()
|
||||
{
|
||||
if (_engravedValue is "0")
|
||||
{
|
||||
return [new Stone("1")];
|
||||
}
|
||||
|
||||
var hasOddNumberOfDigits = _engravedValue.Length % 2 is not 0;
|
||||
|
||||
if (hasOddNumberOfDigits)
|
||||
{
|
||||
var engravedNumber = int.Parse(_engravedValue);
|
||||
var newEngravedValue = engravedNumber * 2024;
|
||||
return [new(newEngravedValue.ToString())];
|
||||
}
|
||||
|
||||
var middleIndex = _engravedValue.Length / 2;
|
||||
var leftDigits = _engravedValue[..middleIndex].TrimStart('0');
|
||||
var rightDigits = _engravedValue[middleIndex..].TrimStart('0');
|
||||
|
||||
return [new(leftDigits), new(rightDigits)];
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return _engravedValue;
|
||||
}
|
||||
}
|
||||
Console.WriteLine($"The number of stones is {result}. ({stopwatch.ElapsedMilliseconds}ms)");
|
||||
Reference in New Issue
Block a user