Files
AdventOfCode/AdventOfCode/Problems/AOC2023/Day6/WaitForIt.cs
2023-12-06 13:05:45 -05:00

66 lines
1.6 KiB
C#

using AdventOfCode.Runner.Attributes;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AdventOfCode.Problems.AOC2023.Day6;
[ProblemInfo(2023, 6, "Wait For It")]
internal class WaitForIt : Problem<int, long>
{
private int[] _times = [];
private int[] _distances = [];
private int _realTime;
private long _realDistance;
public override void LoadInput()
{
var lines = ReadInputLines("input.txt");
_times = lines[0].Split(':')[1]
.Split(' ')
.Where(e => e.Length > 0)
.Select(int.Parse)
.ToArray();
_distances = lines[1].Split(':')[1]
.Split(' ')
.Where(e => e.Length > 0)
.Select(int.Parse)
.ToArray();
_realTime = int.Parse(lines[0].Split(":")[1].Replace(" ", ""));
_realDistance = long.Parse(lines[1].Split(":")[1].Replace(" ", ""));
}
public override void CalculatePart1()
{
var winList = new List<int>();
for (int i = 0; i < _times.Length; i++)
{
var time = _times[i];
var distance = _distances[i];
var minTime = (int)Math.Floor((float)distance / time);
var possibleHeldTimes = Enumerable.Range(minTime, time - minTime);
var races = possibleHeldTimes.Select(t => (time - t) * t);
winList.Add(races.Count(d => d > distance));
}
Part1 = winList.Aggregate((a, b) => a * b);
}
public override void CalculatePart2()
{
var minTime = (long)Math.Floor((float)_realDistance/ _realTime);
var maxTime = _realTime - minTime;
for (long i = minTime; i <= maxTime; i++)
{
var dist = (_realTime - i) * i;
if(dist > _realDistance)
Part2++;
}
}
}