diff options
author | Ben Harris <ben@tilde.team> | 2019-12-07 03:57:17 -0500 |
---|---|---|
committer | Ben Harris <ben@tilde.team> | 2019-12-07 03:57:17 -0500 |
commit | 9dcee6f61d0c856fd9c334445db6ca030a5a6403 (patch) | |
tree | 9a7ac3bd7fdb2ddab8244eefd41828ba65c27657 /Day7.cs | |
parent | 5759cac12d42e92d7f07aa54d4bf376f2e63995b (diff) |
day 7
Diffstat (limited to 'Day7.cs')
-rw-r--r-- | Day7.cs | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/Day7.cs b/Day7.cs new file mode 100644 index 0000000..63f5855 --- /dev/null +++ b/Day7.cs @@ -0,0 +1,73 @@ +using aoc2019.lib; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace aoc2019 +{ + internal class Day7 : Day + { + public override int DayNumber => 7; + + private readonly List<int> input; + private readonly IntCodeVM[] Amplifiers = new IntCodeVM[5]; + public Day7() + { + input = Input.First().Split(',').Select(int.Parse).ToList(); + for (var i = 0; i < 5; i++) Amplifiers[i] = new IntCodeVM(input); + } + + + + public override string Part1() + { + int i, largest = 0; + + foreach (var phaseSeq in Enumerable.Range(0, 5).Permute()) + { + i = 0; + foreach (var (vm, phase) in Amplifiers.Zip(phaseSeq)) + { + vm.Reset(); + vm.Run(phase, i); + i = vm.Result; + } + + if (i > largest) + largest = i; + } + + return $"{largest}"; + } + + public override string Part2() + { + int i, largest = 0; + + foreach (var phaseSeq in Enumerable.Range(5, 5).Permute()) + { + i = 0; + foreach (var (vm, phase) in Amplifiers.Zip(phaseSeq)) + { + vm.Reset(); + vm.input.Enqueue(phase); + } + + var vms = new Queue<IntCodeVM>(Amplifiers); + while (vms.Count > 0) + { + var vm = vms.Dequeue(); + var haltType = vm.Run(i); + if (haltType == IntCodeVM.HaltType.Waiting) + vms.Enqueue(vm); + i = vm.Result; + } + + if (i > largest) + largest = i; + } + + return $"{largest}"; + } + } +} |