finish d8p2
continuous-integration/drone/push Build is failing
Details
continuous-integration/drone/push Build is failing
Details
This commit is contained in:
parent
1673962a72
commit
d38a4e70c8
|
@ -8,12 +8,11 @@ public sealed class Day08 : Day
|
||||||
private static readonly List<char[]> PossibleMappings = "abcdefg".ToCharArray().Permute().Select(m => m.ToArray()).ToList();
|
private static readonly List<char[]> PossibleMappings = "abcdefg".ToCharArray().Permute().Select(m => m.ToArray()).ToList();
|
||||||
public Day08() : base(8, "Seven Segment Search")
|
public Day08() : base(8, "Seven Segment Search")
|
||||||
{
|
{
|
||||||
UseTestInput = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int MatchDigit(char[] lit)
|
private static int MatchDigit(string lit)
|
||||||
{
|
{
|
||||||
return new string(lit) switch
|
return lit switch
|
||||||
{
|
{
|
||||||
"1110111" => 0,
|
"1110111" => 0,
|
||||||
"0010010" => 1,
|
"0010010" => 1,
|
||||||
|
@ -33,31 +32,47 @@ public sealed class Day08 : Day
|
||||||
{
|
{
|
||||||
var s = line.Split(" | ").Select(s => s.Split(' ')).ToList();
|
var s = line.Split(" | ").Select(s => s.Split(' ')).ToList();
|
||||||
int i;
|
int i;
|
||||||
|
char[] lit;
|
||||||
for (i = 0; i < PossibleMappings.Count; i++)
|
for (i = 0; i < PossibleMappings.Count; i++)
|
||||||
{
|
{
|
||||||
var lit = "0000000".ToCharArray();
|
var matches = 0;
|
||||||
var matches = new int[10];
|
|
||||||
var failed = false;
|
var failed = false;
|
||||||
foreach (var signal in s[0])
|
foreach (var signal in s[0])
|
||||||
{
|
{
|
||||||
|
lit = "0000000".ToCharArray();
|
||||||
foreach (var c in signal)
|
foreach (var c in signal)
|
||||||
lit[Array.IndexOf(PossibleMappings[i], c)] = '1';
|
lit[Array.IndexOf(PossibleMappings[i], c)] = '1';
|
||||||
|
|
||||||
var match = MatchDigit(lit);
|
var match = MatchDigit(new(lit));
|
||||||
if (match == -1)
|
if (match == -1)
|
||||||
{
|
{
|
||||||
failed = true;
|
failed = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
matches[match] = 1;
|
|
||||||
|
matches++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (failed) continue;
|
if (failed) continue;
|
||||||
if (matches.All(m => m == 1)) break;
|
if (matches == 10) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
var mapping = PossibleMappings[i];
|
if (i == PossibleMappings.Count)
|
||||||
return 1;
|
{
|
||||||
|
throw new("no mapping found");
|
||||||
|
}
|
||||||
|
|
||||||
|
var digits = new StringBuilder();
|
||||||
|
foreach (var o in s[1])
|
||||||
|
{
|
||||||
|
lit = "0000000".ToCharArray();
|
||||||
|
foreach (var c in o)
|
||||||
|
lit[Array.IndexOf(PossibleMappings[i], c)] = '1';
|
||||||
|
|
||||||
|
digits.Append(MatchDigit(new(lit)));
|
||||||
|
}
|
||||||
|
|
||||||
|
return int.Parse(digits.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Part1() =>
|
public override string Part1() =>
|
||||||
|
|
Loading…
Reference in New Issue