2022-12-03 05:55:49 +00:00
|
|
|
namespace AOC2015;
|
2022-11-11 18:42:42 +00:00
|
|
|
|
|
|
|
/// <summary>
|
2022-12-03 05:41:38 +00:00
|
|
|
/// Day 17: <a href="https://adventofcode.com/2015/day/17"/>
|
2022-11-11 18:42:42 +00:00
|
|
|
/// </summary>
|
2023-09-20 18:38:58 +00:00
|
|
|
public sealed class Day17() : Day(2015, 17, "No Such Thing as Too Much")
|
2022-11-11 18:42:42 +00:00
|
|
|
{
|
2023-09-20 17:22:48 +00:00
|
|
|
private List<int>? _containers;
|
|
|
|
private IEnumerable<List<int>>? _combinations;
|
|
|
|
|
2022-12-08 19:40:40 +00:00
|
|
|
public override void ProcessInput()
|
|
|
|
{
|
2023-09-20 17:22:48 +00:00
|
|
|
_containers = Input.Select(int.Parse).ToList();
|
|
|
|
_combinations = Enumerable.Range(1, (1 << _containers.Count) - 1)
|
|
|
|
.Select(i => _containers.Where((_, index) => ((1 << index) & i) != 0).ToList());
|
2022-12-08 19:40:40 +00:00
|
|
|
}
|
2022-11-11 18:42:42 +00:00
|
|
|
|
2023-09-20 17:22:48 +00:00
|
|
|
public override object Part1() => _combinations!.Count(c => c.Sum() == 150);
|
2022-11-11 18:42:42 +00:00
|
|
|
|
2023-09-20 17:22:48 +00:00
|
|
|
public override object Part2()
|
|
|
|
{
|
|
|
|
var successfulCombinations = _combinations!.Where(c => c.Sum() == 150).ToList();
|
|
|
|
var minCount = successfulCombinations.Min(c => c.Count);
|
|
|
|
return successfulCombinations.Count(c => c.Count == minCount);
|
|
|
|
}
|
2022-11-11 18:42:42 +00:00
|
|
|
}
|