From 1673962a7238c7c3c7b4bef5d3be84717f3fa6ad Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Wed, 8 Dec 2021 01:42:15 -0500 Subject: start d8p2, not working yet --- aoc2021.test/DayTests.cs | 2 +- aoc2021/Day08.cs | 53 +++++++++++++++++++++++++++++++++++++++++++++++- aoc2021/Extensions.cs | 8 ++++++++ 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/aoc2021.test/DayTests.cs b/aoc2021.test/DayTests.cs index 3e1cccb..bfd7dc7 100644 --- a/aoc2021.test/DayTests.cs +++ b/aoc2021.test/DayTests.cs @@ -49,7 +49,7 @@ public class DayTests [DataRow(typeof(Day05), "5", "12")] [DataRow(typeof(Day06), "5934", "26984457539")] [DataRow(typeof(Day07), "37", "168")] - [DataRow(typeof(Day08), "26", "")] + [DataRow(typeof(Day08), "26", "61229")] public void CheckTestInputs(Type dayType, string part1, string part2) { Day.UseTestInput = true; diff --git a/aoc2021/Day08.cs b/aoc2021/Day08.cs index 553dc97..054d9c5 100644 --- a/aoc2021/Day08.cs +++ b/aoc2021/Day08.cs @@ -5,8 +5,59 @@ /// public sealed class Day08 : Day { + private static readonly List PossibleMappings = "abcdefg".ToCharArray().Permute().Select(m => m.ToArray()).ToList(); public Day08() : base(8, "Seven Segment Search") { + UseTestInput = true; + } + + private static int MatchDigit(char[] lit) + { + return new string(lit) switch + { + "1110111" => 0, + "0010010" => 1, + "1011101" => 2, + "1011011" => 3, + "0111010" => 4, + "1101011" => 5, + "1101111" => 6, + "1010010" => 7, + "1111111" => 8, + "1111011" => 9, + _ => -1 + }; + } + + private static int Decode(string line) + { + var s = line.Split(" | ").Select(s => s.Split(' ')).ToList(); + int i; + for (i = 0; i < PossibleMappings.Count; i++) + { + var lit = "0000000".ToCharArray(); + var matches = new int[10]; + var failed = false; + foreach (var signal in s[0]) + { + foreach (var c in signal) + lit[Array.IndexOf(PossibleMappings[i], c)] = '1'; + + var match = MatchDigit(lit); + if (match == -1) + { + failed = true; + break; + } + matches[match] = 1; + } + + if (failed) continue; + if (matches.All(m => m == 1)) break; + } + + var mapping = PossibleMappings[i]; + return 1; } public override string Part1() => @@ -16,5 +67,5 @@ public sealed class Day08 : Day .Sum() .ToString(); - public override string Part2() => ""; + public override string Part2() => Input.Select(Decode).Sum().ToString(); } diff --git a/aoc2021/Extensions.cs b/aoc2021/Extensions.cs index 84587a4..58efece 100644 --- a/aoc2021/Extensions.cs +++ b/aoc2021/Extensions.cs @@ -42,4 +42,12 @@ public static class Extensions return res; } + + public static IEnumerable> Permute(this IEnumerable list) + { + var array = list as T[] ?? list.ToArray(); + return array.Length == 1 + ? new[] { array } + : array.SelectMany(t => Permute(array.Where(x => !x!.Equals(t))), (v, p) => p.Prepend(v)); + } } -- cgit 1.4.1