Add colors and stuff
Because I think it's neat. Ref: https://www.lihaoyi.com/post/BuildyourownCommandLinewithANSIescapecodes.html
This commit is contained in:
@ -4,12 +4,9 @@ internal class Day01 : Day
|
|||||||
{
|
{
|
||||||
internal override void Go()
|
internal override void Go()
|
||||||
{
|
{
|
||||||
Logger.Log("Day 1");
|
|
||||||
Logger.Log("-----");
|
|
||||||
var lines = File.ReadAllLines("inputs/01.txt");
|
var lines = File.ReadAllLines("inputs/01.txt");
|
||||||
Part1(lines);
|
Part1(lines);
|
||||||
Part2(lines);
|
Part2(lines);
|
||||||
Logger.Log("");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Part1(IEnumerable<string> lines)
|
private static void Part1(IEnumerable<string> lines)
|
||||||
@ -30,7 +27,7 @@ internal class Day01 : Day
|
|||||||
lastDepth = depth;
|
lastDepth = depth;
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.Log($"part1: {numIncreased}");
|
Logger.Log($"part1: <blue>{numIncreased}<r>");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Part2(IEnumerable<string> lines)
|
private static void Part2(IEnumerable<string> lines)
|
||||||
@ -64,6 +61,6 @@ internal class Day01 : Day
|
|||||||
lastTotal = total;
|
lastTotal = total;
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.Log($"part2: {numIncreased}");
|
Logger.Log($"part2: <blue>{numIncreased}<r>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,6 @@ internal class Day02 : Day
|
|||||||
{
|
{
|
||||||
internal override void Go()
|
internal override void Go()
|
||||||
{
|
{
|
||||||
Logger.Log("Day 2");
|
|
||||||
Logger.Log("-----");
|
|
||||||
var lines = File.ReadAllLines("inputs/02.txt");
|
var lines = File.ReadAllLines("inputs/02.txt");
|
||||||
var instructions = new List<Instruction>();
|
var instructions = new List<Instruction>();
|
||||||
foreach (var instruction in lines)
|
foreach (var instruction in lines)
|
||||||
@ -20,7 +18,6 @@ internal class Day02 : Day
|
|||||||
|
|
||||||
Part1(instructions);
|
Part1(instructions);
|
||||||
Part2(instructions);
|
Part2(instructions);
|
||||||
Logger.Log("");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Instruction
|
struct Instruction
|
||||||
@ -57,7 +54,7 @@ internal class Day02 : Day
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.Log($"part1: h: {pos.h}, d: {pos.d}, result: {pos.h * pos.d}");
|
Logger.Log($"part1: h: {pos.h}, d: {pos.d}, result: <blue>{pos.h * pos.d}<r>");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Part2(IEnumerable<Instruction> instructions)
|
private static void Part2(IEnumerable<Instruction> instructions)
|
||||||
@ -84,6 +81,6 @@ internal class Day02 : Day
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.Log($"part2: h: {pos.h}, d: {pos.d}, result: {pos.h * pos.d}");
|
Logger.Log($"part2: h: {pos.h}, d: {pos.d}, result: <blue>{pos.h * pos.d}<r>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,12 +4,9 @@ internal class Day03 : Day
|
|||||||
{
|
{
|
||||||
internal override void Go()
|
internal override void Go()
|
||||||
{
|
{
|
||||||
Logger.Log("Day 3");
|
|
||||||
Logger.Log("-----");
|
|
||||||
var lines = File.ReadAllLines("inputs/03.txt");
|
var lines = File.ReadAllLines("inputs/03.txt");
|
||||||
Part1(lines);
|
Part1(lines);
|
||||||
Part2(lines);
|
Part2(lines);
|
||||||
Logger.Log("");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Part1(IEnumerable<string> lines)
|
private static void Part1(IEnumerable<string> lines)
|
||||||
@ -44,7 +41,7 @@ internal class Day03 : Day
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.Log($"part1: gamma rate: {gammaRate}, epsilon rate: {epsilonRate}, mult: {gammaRate * epsilonRate}");
|
Logger.Log($"part1: gamma rate: {gammaRate}, epsilon rate: {epsilonRate}, mult: <blue>{gammaRate * epsilonRate}<r>");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Part2(IEnumerable<string> lines)
|
private static void Part2(IEnumerable<string> lines)
|
||||||
@ -126,6 +123,6 @@ internal class Day03 : Day
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.Log($"part2: o2*co2 = {o2} * {co2} = {o2 * co2}");
|
Logger.Log($"part2: o2*co2 = {o2} * {co2} = <blue>{o2 * co2}<r>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,8 +43,6 @@ internal class Day05 : Day
|
|||||||
|
|
||||||
internal override void Go()
|
internal override void Go()
|
||||||
{
|
{
|
||||||
Logger.Log("Day 5");
|
|
||||||
Logger.Log("-----");
|
|
||||||
var lines = File.ReadAllLines("inputs/05.txt");
|
var lines = File.ReadAllLines("inputs/05.txt");
|
||||||
List<Line> segments = new();
|
List<Line> segments = new();
|
||||||
foreach (var line in lines)
|
foreach (var line in lines)
|
||||||
@ -68,21 +66,20 @@ internal class Day05 : Day
|
|||||||
|
|
||||||
Part1(segments);
|
Part1(segments);
|
||||||
Part2(segments);
|
Part2(segments);
|
||||||
Logger.Log("");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Part1(IEnumerable<Line> lines)
|
private static void Part1(IEnumerable<Line> lines)
|
||||||
{
|
{
|
||||||
using var t = new Timer();
|
using var t = new Timer();
|
||||||
int numPointsGreater = Solve(lines, (line) => !(line.Start.X == line.End.X || line.Start.Y == line.End.Y));
|
int numPointsGreater = Solve(lines, (line) => !(line.Start.X == line.End.X || line.Start.Y == line.End.Y));
|
||||||
Logger.Log($"part1: {numPointsGreater}");
|
Logger.Log($"part1: <blue>{numPointsGreater}<r>");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Part2(IEnumerable<Line> lines)
|
private static void Part2(IEnumerable<Line> lines)
|
||||||
{
|
{
|
||||||
using var t = new Timer();
|
using var t = new Timer();
|
||||||
int numPointsGreater = Solve(lines, (line) => false);
|
int numPointsGreater = Solve(lines, (line) => false);
|
||||||
Logger.Log($"part2: {numPointsGreater}");
|
Logger.Log($"part2: <blue>{numPointsGreater}<r>");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int Solve(IEnumerable<Line> lines, Func<Line, bool> filter)
|
private static int Solve(IEnumerable<Line> lines, Func<Line, bool> filter)
|
||||||
|
@ -12,8 +12,6 @@ internal class Day06 : Day
|
|||||||
|
|
||||||
internal override void Go()
|
internal override void Go()
|
||||||
{
|
{
|
||||||
Logger.Log("Day 6");
|
|
||||||
Logger.Log("-----");
|
|
||||||
var input = File.ReadAllText("inputs/06.txt");
|
var input = File.ReadAllText("inputs/06.txt");
|
||||||
List<Fish> fish = new();
|
List<Fish> fish = new();
|
||||||
foreach (var state in input.Split(','))
|
foreach (var state in input.Split(','))
|
||||||
@ -22,7 +20,6 @@ internal class Day06 : Day
|
|||||||
}
|
}
|
||||||
Part1(fish);
|
Part1(fish);
|
||||||
Part2(fish);
|
Part2(fish);
|
||||||
Logger.Log("");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Part1(IEnumerable<Fish> fish)
|
private static void Part1(IEnumerable<Fish> fish)
|
||||||
@ -48,7 +45,7 @@ internal class Day06 : Day
|
|||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CA1829 // Use Length/Count property instead of Count() when available - Count is of type int, list might be longer than that
|
#pragma warning disable CA1829 // Use Length/Count property instead of Count() when available - Count is of type int, list might be longer than that
|
||||||
Logger.Log($"part1: #fish={list.LongCount()}");
|
Logger.Log($"part1: #fish=<blue>{list.LongCount()}<r>");
|
||||||
#pragma warning restore CA1829 // Use Length/Count property instead of Count() when available
|
#pragma warning restore CA1829 // Use Length/Count property instead of Count() when available
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,6 +72,6 @@ internal class Day06 : Day
|
|||||||
fishAtState[8] = adders;
|
fishAtState[8] = adders;
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.Log($"part2: #fish={fishAtState.Values.Sum()}");
|
Logger.Log($"part2: #fish=<blue>{fishAtState.Values.Sum()}<r>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,12 +4,9 @@ internal class Day07 : Day
|
|||||||
{
|
{
|
||||||
internal override void Go()
|
internal override void Go()
|
||||||
{
|
{
|
||||||
Logger.Log("Day 7");
|
|
||||||
Logger.Log("-----");
|
|
||||||
var nums = File.ReadAllText("inputs/07.txt").Split(',').Select(int.Parse);
|
var nums = File.ReadAllText("inputs/07.txt").Split(',').Select(int.Parse);
|
||||||
Part1(nums);
|
Part1(nums);
|
||||||
Part2(nums);
|
Part2(nums);
|
||||||
Logger.Log("");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static (long, int) Solve(IEnumerable<int> nums, Func<long, long> formula)
|
private static (long, int) Solve(IEnumerable<int> nums, Func<long, long> formula)
|
||||||
@ -42,7 +39,7 @@ internal class Day07 : Day
|
|||||||
|
|
||||||
var (minDist, minNum) = Solve(nums, (d) => d);
|
var (minDist, minNum) = Solve(nums, (d) => d);
|
||||||
|
|
||||||
Logger.Log($"part1: position: {minNum}, fuel cost: {minDist}");
|
Logger.Log($"part1: position: {minNum}, fuel cost: <blue>{minDist}<r>");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Part2(IEnumerable<int> nums)
|
private static void Part2(IEnumerable<int> nums)
|
||||||
@ -53,6 +50,6 @@ internal class Day07 : Day
|
|||||||
// found by searching "factorial but with addition" because i'm smart like that.
|
// found by searching "factorial but with addition" because i'm smart like that.
|
||||||
var (minDist, minNum) = Solve(nums, (d) => ((d * d) + d) / 2);
|
var (minDist, minNum) = Solve(nums, (d) => ((d * d) + d) / 2);
|
||||||
|
|
||||||
Logger.Log($"part2: position: {minNum}, fuel cost: {minDist}");
|
Logger.Log($"part2: position: {minNum}, fuel cost: <blue>{minDist}<r>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,6 @@ internal class Day08 : Day
|
|||||||
{
|
{
|
||||||
internal override void Go()
|
internal override void Go()
|
||||||
{
|
{
|
||||||
Logger.Log("Day 8");
|
|
||||||
Logger.Log("-----");
|
|
||||||
var lines = File.ReadAllLines("inputs/08.txt");
|
var lines = File.ReadAllLines("inputs/08.txt");
|
||||||
List<(List<string>, List<string>)> puzzle = new();
|
List<(List<string>, List<string>)> puzzle = new();
|
||||||
foreach (var line in lines)
|
foreach (var line in lines)
|
||||||
@ -15,7 +13,6 @@ internal class Day08 : Day
|
|||||||
}
|
}
|
||||||
Part1(puzzle);
|
Part1(puzzle);
|
||||||
Part2(puzzle);
|
Part2(puzzle);
|
||||||
Logger.Log("");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Part1(List<(List<string>, List<string>)> lines)
|
private static void Part1(List<(List<string>, List<string>)> lines)
|
||||||
@ -39,7 +36,7 @@ internal class Day08 : Day
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.Log($"part1: {count}");
|
Logger.Log($"part1: <blue>{count}<r>");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Part2(List<(List<string>, List<string>)> lines)
|
private static void Part2(List<(List<string>, List<string>)> lines)
|
||||||
@ -103,7 +100,7 @@ internal class Day08 : Day
|
|||||||
sum += num;
|
sum += num;
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.Log($"part2: {sum}");
|
Logger.Log($"part2: <blue>{sum}<r>");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int FindNum(char[] segments, string num)
|
private static int FindNum(char[] segments, string num)
|
||||||
|
@ -4,8 +4,6 @@ internal class Day09 : Day
|
|||||||
{
|
{
|
||||||
internal override void Go()
|
internal override void Go()
|
||||||
{
|
{
|
||||||
Logger.Log("Day 9");
|
|
||||||
Logger.Log("-----");
|
|
||||||
var lines = File.ReadAllLines("inputs/09.txt");
|
var lines = File.ReadAllLines("inputs/09.txt");
|
||||||
byte[,] grid = new byte[lines.Length, lines[0].Length];
|
byte[,] grid = new byte[lines.Length, lines[0].Length];
|
||||||
for (int i = 0; i < lines.Length; i++)
|
for (int i = 0; i < lines.Length; i++)
|
||||||
@ -17,7 +15,6 @@ internal class Day09 : Day
|
|||||||
}
|
}
|
||||||
Part1(grid);
|
Part1(grid);
|
||||||
Part2(grid);
|
Part2(grid);
|
||||||
Logger.Log("");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Part1(byte[,] grid)
|
private static void Part1(byte[,] grid)
|
||||||
@ -27,7 +24,7 @@ internal class Day09 : Day
|
|||||||
var lowPoints = GetLowPoints(grid);
|
var lowPoints = GetLowPoints(grid);
|
||||||
var totalRisk = lowPoints.Sum(x => grid[x.Item1, x.Item2] + 1);
|
var totalRisk = lowPoints.Sum(x => grid[x.Item1, x.Item2] + 1);
|
||||||
|
|
||||||
Logger.Log($"part1: {totalRisk}");
|
Logger.Log($"part1: <blue>{totalRisk}<r>");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<(int, int)> GetLowPoints(byte[,] grid)
|
private static List<(int, int)> GetLowPoints(byte[,] grid)
|
||||||
@ -75,7 +72,7 @@ internal class Day09 : Day
|
|||||||
}
|
}
|
||||||
var top3Mult = basins.OrderByDescending(x => x).Take(3).Aggregate(1, (x, y) => x * y);
|
var top3Mult = basins.OrderByDescending(x => x).Take(3).Aggregate(1, (x, y) => x * y);
|
||||||
|
|
||||||
Logger.Log($"part2: {top3Mult}");
|
Logger.Log($"part2: <blue>{top3Mult}<r>");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<(int, int)> GetBasinSize(byte[,] grid, int i, int j)
|
private static List<(int, int)> GetBasinSize(byte[,] grid, int i, int j)
|
||||||
|
@ -4,12 +4,9 @@ internal class Day10 : Day
|
|||||||
{
|
{
|
||||||
internal override void Go()
|
internal override void Go()
|
||||||
{
|
{
|
||||||
Logger.Log("Day 10");
|
|
||||||
Logger.Log("-----");
|
|
||||||
var lines = File.ReadAllLines("inputs/10.txt");
|
var lines = File.ReadAllLines("inputs/10.txt");
|
||||||
Part1(lines);
|
Part1(lines);
|
||||||
Part2(lines);
|
Part2(lines);
|
||||||
Logger.Log("");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static readonly List<char> Openers = new()
|
private static readonly List<char> Openers = new()
|
||||||
@ -52,7 +49,7 @@ internal class Day10 : Day
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.Log($"part1: {score}");
|
Logger.Log($"part1: <blue>{score}<r>");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static (bool, char) IsCorrupted(string line)
|
private static (bool, char) IsCorrupted(string line)
|
||||||
@ -136,6 +133,6 @@ internal class Day10 : Day
|
|||||||
|
|
||||||
var final = scores.OrderBy(x => x).Skip(scores.Count / 2).First();
|
var final = scores.OrderBy(x => x).Skip(scores.Count / 2).First();
|
||||||
|
|
||||||
Logger.Log($"part2: {final}");
|
Logger.Log($"part2: <blue>{final}<r>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,9 +4,6 @@ internal class Day11 : Day
|
|||||||
{
|
{
|
||||||
internal override void Go()
|
internal override void Go()
|
||||||
{
|
{
|
||||||
Logger.Log("Day 11");
|
|
||||||
Logger.Log("-----");
|
|
||||||
|
|
||||||
var lines = File.ReadAllLines("inputs/11.txt");
|
var lines = File.ReadAllLines("inputs/11.txt");
|
||||||
var grid = new byte[lines.Length, lines[0].Length];
|
var grid = new byte[lines.Length, lines[0].Length];
|
||||||
for (int i = 0; i < lines.Length; i++)
|
for (int i = 0; i < lines.Length; i++)
|
||||||
@ -24,8 +21,6 @@ internal class Day11 : Day
|
|||||||
|
|
||||||
Part1(grid);
|
Part1(grid);
|
||||||
Part2(grid);
|
Part2(grid);
|
||||||
|
|
||||||
Logger.Log("");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static IEnumerable<(int, int)> Adjacent(byte[,] grid, int i, int j)
|
private static IEnumerable<(int, int)> Adjacent(byte[,] grid, int i, int j)
|
||||||
@ -104,7 +99,7 @@ internal class Day11 : Day
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.Log($"part1: {numFlashes}");
|
Logger.Log($"part1: <blue>{numFlashes}<r>");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Part2(byte[,] grid)
|
private static void Part2(byte[,] grid)
|
||||||
@ -137,6 +132,6 @@ internal class Day11 : Day
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.Log($"part2: {step}");
|
Logger.Log($"part2: <blue>{step}<r>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
11
src/12.cs
11
src/12.cs
@ -4,8 +4,6 @@ internal class Day12 : Day
|
|||||||
{
|
{
|
||||||
internal override void Go()
|
internal override void Go()
|
||||||
{
|
{
|
||||||
Logger.Log("Day 12");
|
|
||||||
Logger.Log("-----");
|
|
||||||
var lines = File.ReadAllLines("inputs/12.txt");
|
var lines = File.ReadAllLines("inputs/12.txt");
|
||||||
var paths = new Dictionary<string, List<string>>();
|
var paths = new Dictionary<string, List<string>>();
|
||||||
foreach (var line in lines)
|
foreach (var line in lines)
|
||||||
@ -40,7 +38,6 @@ internal class Day12 : Day
|
|||||||
}
|
}
|
||||||
Part1(paths);
|
Part1(paths);
|
||||||
Part2(paths);
|
Part2(paths);
|
||||||
Logger.Log("");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Part1(Dictionary<string, List<string>> paths)
|
private static void Part1(Dictionary<string, List<string>> paths)
|
||||||
@ -50,8 +47,8 @@ internal class Day12 : Day
|
|||||||
var validPaths = new List<List<string>>();
|
var validPaths = new List<List<string>>();
|
||||||
FindPaths(paths, validPaths, new List<string>(){ "START" }, false);
|
FindPaths(paths, validPaths, new List<string>(){ "START" }, false);
|
||||||
|
|
||||||
Logger.Log($"part1: {validPaths.Count}");
|
Logger.Log($"part1: <blue>{validPaths.Count}<r>");
|
||||||
//validPaths.ForEach(path => Logger.Log($" {string.Join(',', path)}"));
|
//validPaths.Select(x => string.Join(',', x)).OrderBy(x => x).ForEach(x => Logger.Log(x));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void FindPaths(Dictionary<string, List<string>> paths, List<List<string>> routes, List<string> currRoute, bool canVisitSmallCaveTwice, bool hasDoubledCave = false)
|
private static void FindPaths(Dictionary<string, List<string>> paths, List<List<string>> routes, List<string> currRoute, bool canVisitSmallCaveTwice, bool hasDoubledCave = false)
|
||||||
@ -105,7 +102,7 @@ internal class Day12 : Day
|
|||||||
var validPaths = new List<List<string>>();
|
var validPaths = new List<List<string>>();
|
||||||
FindPaths(paths, validPaths, new List<string>() { "START" }, true);
|
FindPaths(paths, validPaths, new List<string>() { "START" }, true);
|
||||||
|
|
||||||
Logger.Log($"part2: {validPaths.Count}");
|
Logger.Log($"part2: <blue>{validPaths.Count}<r>");
|
||||||
//validPaths.ForEach(path => Logger.Log($" {string.Join(',', path)}"));
|
//validPaths.Select(x => string.Join(',', x)).OrderBy(x => x).ForEach(x => Logger.Log(x));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,6 @@ internal class Day13 : Day
|
|||||||
{
|
{
|
||||||
internal override void Go()
|
internal override void Go()
|
||||||
{
|
{
|
||||||
Logger.Log("Day 13");
|
|
||||||
Logger.Log("-----");
|
|
||||||
var lines = File.ReadAllLines("inputs/13.txt");
|
var lines = File.ReadAllLines("inputs/13.txt");
|
||||||
int phase = 0;
|
int phase = 0;
|
||||||
var points = new HashSet<(int, int)>();
|
var points = new HashSet<(int, int)>();
|
||||||
@ -31,7 +29,6 @@ internal class Day13 : Day
|
|||||||
}
|
}
|
||||||
Part1(points, folds);
|
Part1(points, folds);
|
||||||
Part2(points, folds);
|
Part2(points, folds);
|
||||||
Logger.Log("");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Fold(ICollection<(int x, int y)> points, char axis, int line)
|
private static void Fold(ICollection<(int x, int y)> points, char axis, int line)
|
||||||
@ -60,7 +57,7 @@ internal class Day13 : Day
|
|||||||
|
|
||||||
Fold(grid, folds[0].axis, folds[0].line);
|
Fold(grid, folds[0].axis, folds[0].line);
|
||||||
|
|
||||||
Logger.Log($"part1: {grid.Count}");
|
Logger.Log($"part1: <blue>{grid.Count}<r>");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Part2(ICollection<(int x, int y)> grid, IList<(char axis, int line)> folds)
|
private static void Part2(ICollection<(int x, int y)> grid, IList<(char axis, int line)> folds)
|
||||||
@ -90,7 +87,7 @@ internal class Day13 : Day
|
|||||||
sb.Append('\n');
|
sb.Append('\n');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Logger.Log(sb.ToString());
|
Logger.Log($"<blue>{sb}<r>");
|
||||||
Logger.Log($"part2: {grid.Count}");
|
Logger.Log($"part2: {grid.Count}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
13
src/Day.cs
13
src/Day.cs
@ -1,6 +1,17 @@
|
|||||||
namespace aoc2021;
|
namespace aoc2021;
|
||||||
|
|
||||||
internal abstract class Day
|
internal abstract class Day : IDisposable
|
||||||
{
|
{
|
||||||
|
public Day()
|
||||||
|
{
|
||||||
|
Logger.Log($"\u001b[47m\u001b[30m{GetType().Name}\u001b[0m");
|
||||||
|
//Logger.Log("\u001b[47m\u001b[30m-----\u001b[0m");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
Logger.Log("");
|
||||||
|
}
|
||||||
|
|
||||||
internal abstract void Go();
|
internal abstract void Go();
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
namespace aoc2021
|
namespace aoc2021
|
||||||
{
|
{
|
||||||
@ -6,8 +7,23 @@ namespace aoc2021
|
|||||||
{
|
{
|
||||||
public static void Log(string msg)
|
public static void Log(string msg)
|
||||||
{
|
{
|
||||||
Console.WriteLine(msg);
|
Console.WriteLine(InsertColorCodes(msg));
|
||||||
Debug.WriteLine(msg);
|
Debug.WriteLine(StripColorCodes(msg));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string InsertColorCodes(string msg)
|
||||||
|
{
|
||||||
|
return msg.Replace("<blue>", "\u001b[36;1m")
|
||||||
|
.Replace("<r>", "\u001b[0m");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static readonly Regex colorCodes = new Regex(@"(\u001b\[(?:\d+;)?(?:\d+;)?\d+m)", RegexOptions.Compiled);
|
||||||
|
private static string StripColorCodes(string msg)
|
||||||
|
{
|
||||||
|
var ret = msg;
|
||||||
|
var matches = colorCodes.Matches(msg);
|
||||||
|
matches?.ForEach(match => ret = ret.Replace(match.Groups[1].Value, ""));
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,13 +16,13 @@ internal class DayTemplate : Day
|
|||||||
{
|
{
|
||||||
using var t = new Timer();
|
using var t = new Timer();
|
||||||
|
|
||||||
Logger.Log($"part1: ");
|
Logger.Log($"part1: <blue><r>");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Part2(IEnumerable<string> lines)
|
private static void Part2(IEnumerable<string> lines)
|
||||||
{
|
{
|
||||||
using var t = new Timer();
|
using var t = new Timer();
|
||||||
|
|
||||||
Logger.Log($"part2: ");
|
Logger.Log($"part2: <blue><r>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
11
src/Timer.cs
11
src/Timer.cs
@ -9,7 +9,16 @@ namespace aoc2021
|
|||||||
{
|
{
|
||||||
stopwatch.Stop();
|
stopwatch.Stop();
|
||||||
var (elapsed, unit) = ConvertElapsedToHumanReadable();
|
var (elapsed, unit) = ConvertElapsedToHumanReadable();
|
||||||
Logger.Log($"Took {elapsed:N1}{unit}");
|
var color = "[31m";
|
||||||
|
if (unit == "us" || (unit == "ms" && elapsed < 10))
|
||||||
|
{
|
||||||
|
color = "[32m";
|
||||||
|
}
|
||||||
|
else if (unit == "ms" && elapsed < 250)
|
||||||
|
{
|
||||||
|
color = "[33m";
|
||||||
|
}
|
||||||
|
Logger.Log($"Took \u001b{color}{elapsed:N1}{unit}\u001b[0m");
|
||||||
}
|
}
|
||||||
|
|
||||||
public (double elapsed, string unit) ConvertElapsedToHumanReadable()
|
public (double elapsed, string unit) ConvertElapsedToHumanReadable()
|
||||||
|
@ -11,13 +11,13 @@ if (arg == "all")
|
|||||||
|
|
||||||
foreach (var type in types)
|
foreach (var type in types)
|
||||||
{
|
{
|
||||||
var day = (Day)Activator.CreateInstance(type)!;
|
using var day = (Day)Activator.CreateInstance(type)!;
|
||||||
day.Go();
|
day.Go();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Day day = arg switch
|
using Day day = arg switch
|
||||||
{
|
{
|
||||||
"1" => new Day01(),
|
"1" => new Day01(),
|
||||||
"2" => new Day02(),
|
"2" => new Day02(),
|
||||||
|
Reference in New Issue
Block a user