about summary refs log tree commit diff
path: root/Day16.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Day16.cs')
-rw-r--r--Day16.cs64
1 files changed, 0 insertions, 64 deletions
diff --git a/Day16.cs b/Day16.cs
deleted file mode 100644
index e2958bd..0000000
--- a/Day16.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using aoc2019.lib;
-
-namespace aoc2019
-{
-    internal sealed class Day16 : Day
-    {
-        private static readonly int[] BasePattern = {0, 1, 0, -1};
-        private readonly int[] initialList;
-
-        public Day16() : base(16, "Flawed Frequency Transmission")
-        {
-            initialList = Input.First().Select(c => int.Parse($"{c}")).ToArray();
-        }
-
-        protected override string Part1()
-        {
-            const int phaseCount = 100;
-            var signal0 = initialList.ToArray();
-            var signal1 = new int[signal0.Length];
-
-            for (var i = 0; i < phaseCount; i++)
-                CalculateSignal(i % 2 == 0 ? signal0 : signal1, i % 2 == 0 ? signal1 : signal0);
-
-            return new string(
-                signal0.Take(8).Select(c => (char) (c + '0'))
-                    .ToArray());
-        }
-
-        protected override string Part2()
-        {
-            const int phaseCount = 100;
-            var messageOffset = initialList.Take(7).Aggregate((n, i) => n * 10 + i);
-            var signal = initialList.Repeat(10_000).Skip(messageOffset).ToArray();
-
-            for (var p = 0; p < phaseCount; p++)
-            {
-                signal[^1] %= 10;
-                for (var i = signal.Length - 2; i >= 0; i--)
-                    signal[i] = (signal[i + 1] + signal[i]) % 10;
-            }
-
-            return new string(signal.Take(8).Select(c => (char) (c + '0')).ToArray());
-        }
-
-        private static void CalculateSignal(IReadOnlyList<int> input, IList<int> output)
-        {
-            for (var outputIndex = 0; outputIndex < output.Count; outputIndex++)
-                output[outputIndex] =
-                    Math.Abs(PatternValues(outputIndex, input.Count).Select((pv, i) => pv * input[i] % 10).Sum()) % 10;
-        }
-
-        private static IEnumerable<int> PatternValues(int index, int count)
-        {
-            return BasePattern
-                .SelectMany(v => Enumerable.Repeat(v, index + 1))
-                .Repeat(int.MaxValue)
-                .Skip(1)
-                .Take(count);
-        }
-    }
-}
\ No newline at end of file