Skip to content

Commit 9bca2c2

Browse files
committed
migrated 2016 c# to framework
1 parent b16f04b commit 9bca2c2

23 files changed

+829
-833
lines changed

2016/Util/Aoc/Printer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ private static string BuildString<TResult>(
1010
double durationInMs
1111
)
1212
{
13-
return $"{type} {label,-10} {part} {result,-45} {durationInMs:F4}ms";
13+
return $"{type} {label,-10} {part} {result,-45} {durationInMs.ToString("F4").Replace(',', '.')}ms";
1414
}
1515

1616
public static void ExamplePart1<TResult>(TResult result, string testFileName, double durationInMs)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace Util.Extensions;
2+
3+
public static class IEnumerableExtensions
4+
{
5+
public static IEnumerable<T> RotateLeft<T>(this IEnumerable<T> enumerable, int offset)
6+
{
7+
var list = enumerable as T[] ?? [.. enumerable];
8+
9+
return [.. list.Skip(offset), .. list.Take(offset)];
10+
}
11+
}

2016/d06/Program.cs

Lines changed: 79 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,96 +1,99 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.IO;
4-
using System.Linq;
5-
using System.Text;
1+
using System.Text;
2+
using Util.Aoc;
63

7-
namespace Day_6
4+
char MostCommon(string line)
85
{
9-
internal static class Program
6+
var lettersCount = GetLettersFrequency(line);
7+
8+
return lettersCount.First(p => p.Value == lettersCount.Values.Max()).Key;
9+
}
10+
11+
char LeastCommon(string line)
12+
{
13+
var lettersCount = GetLettersFrequency(line);
14+
15+
return lettersCount.First(p => p.Value == lettersCount.Values.Min()).Key;
16+
}
17+
18+
Dictionary<char, int> GetLettersFrequency(string line)
19+
{
20+
var lettersCount = new Dictionary<char, int>();
21+
22+
foreach (var c in line)
1023
{
11-
private static void Main()
24+
if (lettersCount.ContainsKey(c))
25+
{
26+
lettersCount[c]++;
27+
}
28+
else
1229
{
13-
var solution = new Solution();
14-
solution.Solve();
30+
lettersCount[c] = 1;
1531
}
1632
}
1733

18-
internal class Solution
34+
return lettersCount;
35+
}
36+
37+
string Part1(List<string> lines)
38+
{
39+
var length = lines[0].Length;
40+
var vertical = new StringBuilder[length];
41+
42+
for (var i = 0; i < length; i++)
1943
{
20-
private readonly List<string> _data;
44+
vertical[i] = new StringBuilder();
45+
}
2146

22-
public Solution()
47+
foreach (var line in lines)
48+
{
49+
for (var i = 0; i < length; i++)
2350
{
24-
_data = File.ReadAllLines("2016/d06/input.txt").ToList();
51+
vertical[i].Append(line[i]);
2552
}
53+
}
2654

27-
public void Solve()
28-
{
29-
var length = _data[0].Length;
30-
31-
var vertical = new StringBuilder[length];
32-
33-
for (var i = 0; i < length; i++)
34-
{
35-
vertical[i] = new StringBuilder();
36-
}
37-
38-
foreach (var line in _data)
39-
{
40-
for (var i = 0; i < length; i++)
41-
{
42-
vertical[i].Append(line[i]);
43-
}
44-
}
45-
46-
Console.Write("*: ");
47-
foreach (var line in vertical)
48-
{
49-
Console.Write(MostCommon(line.ToString()));
50-
}
51-
52-
Console.WriteLine();
53-
54-
Console.Write("**: ");
55-
foreach (var line in vertical)
56-
{
57-
Console.Write(LeastCommon(line.ToString()));
58-
}
59-
60-
Console.WriteLine();
61-
}
55+
var ret = string.Empty;
6256

63-
private static char MostCommon(string line)
64-
{
65-
var lettersCount = GetLettersFrequency(line);
57+
foreach (var line in vertical)
58+
{
59+
ret += MostCommon(line.ToString());
60+
}
6661

67-
return lettersCount.First(p => p.Value == lettersCount.Values.Max()).Key;
68-
}
62+
return ret;
63+
}
6964

70-
private static char LeastCommon(string line)
71-
{
72-
var lettersCount = GetLettersFrequency(line);
65+
string Part2(List<string> lines)
66+
{
67+
var length = lines[0].Length;
68+
var vertical = new StringBuilder[length];
7369

74-
return lettersCount.First(p => p.Value == lettersCount.Values.Min()).Key;
75-
}
70+
for (var i = 0; i < length; i++)
71+
{
72+
vertical[i] = new StringBuilder();
73+
}
7674

77-
private static Dictionary<char, int> GetLettersFrequency(string line)
75+
foreach (var line in lines)
76+
{
77+
for (var i = 0; i < length; i++)
7878
{
79-
var lettersCount = new Dictionary<char, int>();
80-
81-
foreach (var c in line)
82-
{
83-
if (lettersCount.ContainsKey(c))
84-
{
85-
lettersCount[c]++;
86-
}
87-
else
88-
{
89-
lettersCount[c] = 1;
90-
}
91-
}
92-
93-
return lettersCount;
79+
vertical[i].Append(line[i]);
9480
}
9581
}
96-
}
82+
83+
var ret = string.Empty;
84+
85+
foreach (var line in vertical)
86+
{
87+
ret += LeastCommon(line.ToString());
88+
}
89+
90+
return ret;
91+
}
92+
93+
List<string> Reader(string file)
94+
{
95+
return File.ReadAllLines(file).ToList();
96+
}
97+
98+
Solver.RunExamples(2016, "06", Reader, Part1, Part2);
99+
Solver.RunSolution(2016, "06", Reader, Part1, Part2);

2016/d07/IpAddressV7.cs

Lines changed: 73 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,97 @@
1-
using System.Collections.Generic;
2-
using System.Linq;
3-
using System.Text.RegularExpressions;
1+
using System.Text.RegularExpressions;
42

5-
namespace Day_7
3+
namespace Aoc.Day07;
4+
5+
internal class IpAddressV7
66
{
7-
internal class IpAddressV7
7+
private readonly List<string> _sequences = [];
8+
private readonly List<string> _hypernetSequences = [];
9+
10+
public bool SupportsTls
811
{
9-
private readonly List<string> _sequences = new List<string>();
10-
private readonly List<string> _hypernetSequences = new List<string>();
12+
get { return !_hypernetSequences.Any(HasAbba) && _sequences.Any(HasAbba); }
13+
}
1114

12-
public bool SupportsTls
15+
public bool SupportsSsl
16+
{
17+
get
1318
{
14-
get { return !_hypernetSequences.Any(seq => seq.HasAbba()) && _sequences.Any(seq => seq.HasAbba()); }
19+
var abaList = new List<string>();
20+
21+
foreach (var seq in _sequences)
22+
{
23+
abaList.AddRange(GetAbaList(seq));
24+
}
25+
26+
return _hypernetSequences.Any(seq => abaList.Any(aba => HasBab(seq, aba)));
1527
}
28+
}
1629

17-
public bool SupportsSsl
30+
public IpAddressV7(string line)
31+
{
32+
line = line.Trim();
33+
34+
var regex = new Regex(@"([a-z]+)(?:[[]([a-z]+)[]])?");
35+
36+
var matches = regex.Matches(line);
37+
38+
foreach (Match match in matches)
1839
{
19-
get
40+
for (var i = 1; i < match.Groups.Count; i++)
2041
{
21-
var abaList = new List<string>();
42+
if (match.Groups[i].ToString() == string.Empty) continue;
2243

23-
foreach (var seq in _sequences)
44+
if (i % 2 == 1)
2445
{
25-
abaList.AddRange(seq.GetAbaList());
46+
_sequences.Add(match.Groups[i].ToString());
47+
}
48+
else
49+
{
50+
_hypernetSequences.Add(match.Groups[i].ToString());
2651
}
27-
28-
return _hypernetSequences.Any(seq => abaList.Any(seq.HasBab));
2952
}
3053
}
54+
}
3155

32-
public IpAddressV7(string line)
56+
public static bool HasAbba(string s)
57+
{
58+
if (s.Length < 4) return false;
59+
60+
for (var i = 0; i < s.Length - 3; i++)
3361
{
34-
line = line.Trim();
62+
if (s[i] == s[i + 3])
63+
{
64+
if (s[i + 1] == s[i + 2] && s[i] != s[i + 1])
65+
{
66+
return true;
67+
}
68+
}
69+
}
70+
71+
return false;
72+
}
3573

36-
var regex = new Regex(@"([a-z]+)(?:[[]([a-z]+)[]])?");
74+
public static IEnumerable<string> GetAbaList(string s)
75+
{
76+
var ret = new List<string>();
3777

38-
var matches = regex.Matches(line);
78+
if (s.Length < 3) return ret;
3979

40-
foreach (Match match in matches)
80+
for (var i = 0; i < s.Length - 2; i++)
81+
{
82+
if (s[i] == s[i + 2] && s[i + 1] != s[i])
4183
{
42-
for (var i = 1; i < match.Groups.Count; i++)
43-
{
44-
if (match.Groups[i].ToString() == string.Empty) continue;
45-
46-
if (i % 2 == 1)
47-
{
48-
_sequences.Add(match.Groups[i].ToString());
49-
}
50-
else
51-
{
52-
_hypernetSequences.Add(match.Groups[i].ToString());
53-
}
54-
}
84+
ret.Add(s.Substring(i, 3));
5585
}
5686
}
87+
88+
return ret;
89+
}
90+
91+
public static bool HasBab(string s, string aba)
92+
{
93+
var bab = aba[1].ToString() + aba[0] + aba[1];
94+
95+
return s.Contains(bab);
5796
}
5897
}

2016/d07/Program.cs

Lines changed: 15 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,20 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.IO;
4-
using System.Linq;
1+
using Aoc.Day07;
2+
using Util.Aoc;
53

6-
namespace Day_7
4+
int Part1(List<IpAddressV7> ips)
75
{
8-
internal static class Program
9-
{
10-
private static void Main()
11-
{
12-
Console.WriteLine("Day 7");
6+
return ips.Count(ip => ip.SupportsTls);
7+
}
138

14-
var solution = new Solution();
15-
solution.Solve();
16-
}
17-
}
18-
19-
internal class Solution
20-
{
21-
private readonly List<IpAddressV7> _ips = new List<IpAddressV7>();
22-
23-
public void Solve()
24-
{
25-
var lines = File.ReadAllLines("2016/d07/input.txt");
26-
27-
foreach (var line in lines)
28-
{
29-
_ips.Add(new IpAddressV7(line));
30-
}
9+
int Part2(List<IpAddressV7> ips)
10+
{
11+
return ips.Count(ip => ip.SupportsSsl);
12+
}
3113

32-
var supportsTls = _ips.Count(ip => ip.SupportsTls);
33-
var supportsSsl = _ips.Count(ip => ip.SupportsSsl);
14+
List<IpAddressV7> Reader(string file)
15+
{
16+
return File.ReadAllLines(file).Select(line => new IpAddressV7(line)).ToList();
17+
}
3418

35-
Console.WriteLine("Answers: ");
36-
Console.WriteLine("*: " + supportsTls);
37-
Console.WriteLine("**: " + supportsSsl);
38-
}
39-
}
40-
}
19+
Solver.RunExamples(2016, "07", Reader, Part1, Part2);
20+
Solver.RunSolution(2016, "07", Reader, Part1, Part2);

0 commit comments

Comments
 (0)