From 36bb28af87e81a9b3cab1abd79d11106cd610f6c Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Wed, 2 Dec 2020 00:36:24 -0500 Subject: update gitignore and run resharper cleanup --- lib/Extensions.cs | 9 ++++----- lib/IntCodeVM.cs | 54 +++++++++++++++++++++++++++++++++--------------------- 2 files changed, 37 insertions(+), 26 deletions(-) (limited to 'lib') diff --git a/lib/Extensions.cs b/lib/Extensions.cs index 3c81f17..a1ffbcc 100644 --- a/lib/Extensions.cs +++ b/lib/Extensions.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; namespace aoc2019.lib @@ -8,13 +7,13 @@ namespace aoc2019.lib { public static IEnumerable> Permute(this IEnumerable list) { - if (list.Count() == 1) return new[] { list }; + if (list.Count() == 1) return new[] {list}; return list.SelectMany(t => Permute(list.Where(x => !x.Equals(t))), (v, p) => p.Prepend(v)); } public static IEnumerable Chunk(this string str, int chunkSize) { - for (int i = 0; i < str.Length; i += chunkSize) + for (var i = 0; i < str.Length; i += chunkSize) yield return str.Substring(i, chunkSize); } @@ -30,4 +29,4 @@ namespace aoc2019.lib yield return item; } } -} +} \ No newline at end of file diff --git a/lib/IntCodeVM.cs b/lib/IntCodeVM.cs index 472da92..d35444b 100644 --- a/lib/IntCodeVM.cs +++ b/lib/IntCodeVM.cs @@ -6,11 +6,17 @@ namespace aoc2019.lib { public class IntCodeVM { - private long i; - private long relbase; - public long[] memory; + public enum HaltType + { + Terminate, + Waiting + } + private readonly long[] program; + private long i; public Queue input, output; + public long[] memory; + private long relbase; public IntCodeVM(string tape) { @@ -22,11 +28,7 @@ namespace aoc2019.lib output = new Queue(); } - public enum HaltType - { - Terminate, - Waiting - } + public long Result => output.Dequeue(); public void Reset() { @@ -37,8 +39,6 @@ namespace aoc2019.lib output.Clear(); } - public long Result => output.Dequeue(); - public void AddInput(long value) { input.Enqueue(value); @@ -53,7 +53,7 @@ namespace aoc2019.lib { if (addr < 0) addr = 0; if (addr >= memory.Length) - Array.Resize(ref memory, (int)addr + 1); + Array.Resize(ref memory, (int) addr + 1); memory[addr] = value; } @@ -82,9 +82,13 @@ namespace aoc2019.lib var param = MemGet(i + idx); switch (Mode(idx)) { - case 0: MemSet(param, val); break; + case 0: + MemSet(param, val); + break; case 1: throw new Exception("cannot set in immediate mode"); - case 2: MemSet(relbase + param, val); break; + case 2: + MemSet(relbase + param, val); + break; default: throw new Exception("invalid parameter mode"); } } @@ -94,6 +98,7 @@ namespace aoc2019.lib foreach (var s in additionalInput) AddInput(s); return Run(); } + public HaltType Run() { while (i < memory.Length) @@ -103,18 +108,22 @@ namespace aoc2019.lib { case 1: Set(3, Get(1) + Get(2)); - i += 4; break; + i += 4; + break; case 2: Set(3, Get(1) * Get(2)); - i += 4; break; + i += 4; + break; case 3: if (!input.Any()) return HaltType.Waiting; Set(1, input.Dequeue()); - i += 2; break; + i += 2; + break; case 4: output.Enqueue(Get(1)); - i += 2; break; + i += 2; + break; case 5: i = Get(1) == 0 ? i + 3 : Get(2); break; @@ -123,13 +132,16 @@ namespace aoc2019.lib break; case 7: Set(3, Get(1) < Get(2) ? 1 : 0); - i += 4; break; + i += 4; + break; case 8: Set(3, Get(1) == Get(2) ? 1 : 0); - i += 4; break; + i += 4; + break; case 9: relbase += Get(1); - i += 2; break; + i += 2; + break; case 99: return HaltType.Terminate; default: @@ -140,4 +152,4 @@ namespace aoc2019.lib return HaltType.Terminate; } } -} +} \ No newline at end of file -- cgit 1.4.1