diff options
Diffstat (limited to 'aoc2019/Day05.cs')
-rw-r--r-- | aoc2019/Day05.cs | 124 |
1 files changed, 60 insertions, 64 deletions
diff --git a/aoc2019/Day05.cs b/aoc2019/Day05.cs index 2020627..b91089e 100644 --- a/aoc2019/Day05.cs +++ b/aoc2019/Day05.cs @@ -1,78 +1,74 @@ -using System.Collections.Generic; -using System.Linq; +namespace aoc2019; -namespace aoc2019 +public sealed class Day05 : Day { - public sealed class Day05 : Day - { - private readonly IEnumerable<int> tape; + private readonly IEnumerable<int> tape; - private int output; + private int output; - public Day05() : base(5, "Sunny with a Chance of Asteroids") - { - tape = Input.First().Split(',').Select(int.Parse); - } + public Day05() : base(5, "Sunny with a Chance of Asteroids") + { + tape = Input.First().Split(',').Select(int.Parse); + } - public void RunIntCode(List<int> v, int input) + public void RunIntCode(List<int> v, int input) + { + var i = 0; + while (i < v.Count && v[i] != 99) { - var i = 0; - while (i < v.Count && v[i] != 99) + int Val(int mode, int val) { - int Val(int mode, int val) - { - return mode != 0 ? val : v[val]; - } + return mode != 0 ? val : v[val]; + } - var mode1 = v[i] / 100 % 10; - var mode2 = v[i] / 1000; + var mode1 = v[i] / 100 % 10; + var mode2 = v[i] / 1000; - switch (v[i] % 100) - { - case 1: - v[v[i + 3]] = Val(mode1, v[i + 1]) + Val(mode2, v[i + 2]); - i += 4; - break; - case 2: - v[v[i + 3]] = Val(mode1, v[i + 1]) * Val(mode2, v[i + 2]); - i += 4; - break; - case 3: - v[v[i + 1]] = input; - i += 2; - break; - case 4: - output = Val(mode1, v[i + 1]); - i += 2; - break; - case 5: - i = Val(mode1, v[i + 1]) == 0 ? i + 3 : Val(mode2, v[i + 2]); - break; - case 6: - i = Val(mode1, v[i + 1]) != 0 ? i + 3 : Val(mode2, v[i + 2]); - break; - case 7: - v[v[i + 3]] = Val(mode1, v[i + 1]) < Val(mode2, v[i + 2]) ? 1 : 0; - i += 4; - break; - case 8: - v[v[i + 3]] = Val(mode1, v[i + 1]) == Val(mode2, v[i + 2]) ? 1 : 0; - i += 4; - break; - } + switch (v[i] % 100) + { + case 1: + v[v[i + 3]] = Val(mode1, v[i + 1]) + Val(mode2, v[i + 2]); + i += 4; + break; + case 2: + v[v[i + 3]] = Val(mode1, v[i + 1]) * Val(mode2, v[i + 2]); + i += 4; + break; + case 3: + v[v[i + 1]] = input; + i += 2; + break; + case 4: + output = Val(mode1, v[i + 1]); + i += 2; + break; + case 5: + i = Val(mode1, v[i + 1]) == 0 ? i + 3 : Val(mode2, v[i + 2]); + break; + case 6: + i = Val(mode1, v[i + 1]) != 0 ? i + 3 : Val(mode2, v[i + 2]); + break; + case 7: + v[v[i + 3]] = Val(mode1, v[i + 1]) < Val(mode2, v[i + 2]) ? 1 : 0; + i += 4; + break; + case 8: + v[v[i + 3]] = Val(mode1, v[i + 1]) == Val(mode2, v[i + 2]) ? 1 : 0; + i += 4; + break; } } + } - public override string Part1() - { - RunIntCode(tape.ToList(), 1); - return $"{output}"; - } + public override string Part1() + { + RunIntCode(tape.ToList(), 1); + return $"{output}"; + } - public override string Part2() - { - RunIntCode(tape.ToList(), 5); - return $"{output}"; - } + public override string Part2() + { + RunIntCode(tape.ToList(), 5); + return $"{output}"; } -} \ No newline at end of file +} |