diff --git a/README.md b/README.md
index 6439a99..3e0c351 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,13 @@
# Advent of Code
+
## Solutions for the AoC Challenges, all in C#
+
### They might not be the best solutions but they work and that's the important part of a coders job :xdd:
## Solutions organized by year, 1 file per day.
### [2022](https://github.com/TiagoRG/AdventOfCode/tree/main/AdventOfCode/Year2022)
+
* [Day 1](https://github.com/TiagoRG/AdventOfCode/tree/main/AdventOfCode/Year2022/Day1.cs)
* [Day 2](https://github.com/TiagoRG/AdventOfCode/tree/main/AdventOfCode/Year2022/Day2.cs)
* [Day 3](https://github.com/TiagoRG/AdventOfCode/tree/main/AdventOfCode/Year2022/Day3.cs)
diff --git a/Utils/Extensions/LinqExtensions.cs b/Utils/Extensions/LinqExtensions.cs
index 39c10ef..9cc198c 100644
--- a/Utils/Extensions/LinqExtensions.cs
+++ b/Utils/Extensions/LinqExtensions.cs
@@ -3,7 +3,7 @@ namespace AdventOfCode.Utils.Extensions;
public static class LinqExtensions
{
///
- /// Returns a slice of the given list
+ /// Returns a slice of the given list
///
/// The list you pretend to slice
/// The first index of the slice
@@ -11,49 +11,49 @@ public static class LinqExtensions
///
public static List Sublist(this List list, int startIndex, int endIndex = default)
{
- List result = new List();
+ var result = new List();
if (endIndex == default)
endIndex = list.Count;
- for (int i = startIndex; i < endIndex; i++)
+ for (var i = startIndex; i < endIndex; i++)
result.Add(list[i]);
return result;
}
///
- /// Returns a column of a give matrix list
+ /// Returns a column of a give matrix list
///
/// 2 dimensions list
/// Column index
///
public static List GetColumn(this List> list, int column)
{
- List result = new List();
- foreach (List row in list) result.AddRange(row.Where((t, i) => i == column));
+ var result = new List();
+ foreach (var row in list) result.AddRange(row.Where((t, i) => i == column));
return result;
}
///
- /// Reverses a given list
+ /// Reverses a given list
///
/// The list to reverse
/// The reversed list
public static List Reversed(this List list)
{
- List reversed = new List();
- for (int i = 0; i < list.Count; i++)
- reversed.Add(list[list.Count-1-i]);
+ var reversed = new List();
+ for (var i = 0; i < list.Count; i++)
+ reversed.Add(list[list.Count - 1 - i]);
return reversed;
}
///
- /// Clones a list of elements
+ /// Clones a list of elements
///
/// The original list
/// A copy of the original list
public static List Clone(this List original)
{
- List ret = new List(original.Count);
- foreach (T element in original)
+ var ret = new List(original.Count);
+ foreach (var element in original)
ret.Add(element);
return ret;
}
@@ -63,39 +63,39 @@ public static class LinqExtensions
where TValue : ICloneable
where TKey : notnull
{
- Dictionary ret = new Dictionary(original.Count, original.Comparer);
- foreach (KeyValuePair entry in original)
- ret.Add(entry.Key, (TValue) entry.Value.Clone());
+ var ret = new Dictionary(original.Count, original.Comparer);
+ foreach (var entry in original)
+ ret.Add(entry.Key, (TValue)entry.Value.Clone());
return ret;
}
-
+
public static Dictionary> Clone
(this Dictionary> original)
where TKey : notnull
{
- Dictionary> ret = new Dictionary>(original.Count, original.Comparer);
- foreach (KeyValuePair> entry in original)
+ var ret = new Dictionary>(original.Count, original.Comparer);
+ foreach (var entry in original)
ret.Add(entry.Key, entry.Value.Clone());
return ret;
}
public static void Fill(this List list, int count, T element)
- where T : ICloneable
+ where T : ICloneable
{
- for (int i = 0; i < count; i++)
+ for (var i = 0; i < count; i++)
list.Add(element);
}
public static void Fill(this List> list, int count, List element)
{
- for (int i = 0; i < count; i++)
+ for (var i = 0; i < count; i++)
list.Add(element.Clone());
}
public static void Set(this List list, int index, T element)
{
- List backup = list.Clone();
+ var backup = list.Clone();
list.Clear();
- for (int i = 0; i < list.Count; i++) list.Add(i == index ? element : list[i]);
+ for (var i = 0; i < list.Count; i++) list.Add(i == index ? element : list[i]);
}
}
\ No newline at end of file
diff --git a/Utils/Extensions/MathExtensions.cs b/Utils/Extensions/MathExtensions.cs
index 384587d..1c9878a 100644
--- a/Utils/Extensions/MathExtensions.cs
+++ b/Utils/Extensions/MathExtensions.cs
@@ -18,7 +18,7 @@ public static class MathExtensions
{
Convert.ToInt32(s);
}
- catch (FormatException ignored)
+ catch (FormatException)
{
return false;
}
@@ -28,30 +28,32 @@ public static class MathExtensions
public static ulong ProductOfMax(this List list, int maxCount)
{
- List maxList = new List(maxCount);
+ var maxList = new List(maxCount);
- foreach (ulong number in list)
+ foreach (var number in list)
{
if (maxList.Count < maxList.Capacity)
+ {
maxList.Add(number);
- else
- if (number > maxList.Min())
+ }
+ else if (number > maxList.Min())
{
maxList.RemoveAt(0);
maxList.Add(number);
}
+
maxList.Sort();
}
ulong product = 1;
- maxList.ForEach(n => product*=n);
+ maxList.ForEach(n => product *= n);
return product;
}
public static int LeastCommonMultiplier(this List list)
{
- int lcm = 1;
- foreach (int i in list)
+ var lcm = 1;
+ foreach (var i in list)
lcm *= i / MathTools.GreatCommonDivider(lcm, i);
return lcm;
}
diff --git a/Year2022/Day1.cs b/Year2022/Day1.cs
index 40ae709..cdd86a6 100644
--- a/Year2022/Day1.cs
+++ b/Year2022/Day1.cs
@@ -3,13 +3,15 @@ namespace AdventOfCode.Year2022;
public class Day1
{
private static readonly List CaloriesPerElf = GetCaloriesPerElf();
-
+
public Day1()
{
- Console.WriteLine("\nDay1 Solution");
- Console.WriteLine($"Part1 Result: {Part1()}");
- Console.WriteLine($"Part2 Result: {Part2()}");
- Console.WriteLine("\n=============================\n");
+ Console.WriteLine($@"
+Day1 Solution
+Part1 Result: {Part1()}
+Part2 Result: {Part2()}
+
+=============================");
}
private static int Part1()
@@ -19,30 +21,21 @@ public class Day1
private static int Part2()
{
- List top3 = new List();
- for (int i = 0; i < 3; i++)
- {
- top3.Add(CaloriesPerElf.Max());
- CaloriesPerElf.Remove(CaloriesPerElf.Max());
- }
-
- return top3.Sum();
+ return CaloriesPerElf.Order().Reverse().ToArray()[..3].Sum();
}
private static List GetCaloriesPerElf()
{
- string[] calories = File.ReadAllLines("inputs/day1.txt");
- int[] caloriesPerDay = new int[calories.Length];
+ var calories = File.ReadAllLines("inputs/day1.txt");
+ var caloriesPerDay = new int[calories.Length];
var index = 0;
- foreach (string calorie in calories)
- {
+ foreach (var calorie in calories)
if (calorie == "")
index++;
else
caloriesPerDay[index] += Convert.ToInt32(calorie);
- }
- int elfCount = caloriesPerDay.ToList().IndexOf(0);
+ var elfCount = caloriesPerDay.ToList().IndexOf(0);
return caloriesPerDay.ToList().GetRange(0, elfCount);
}
}
\ No newline at end of file
diff --git a/Year2022/Day10.cs b/Year2022/Day10.cs
index 0906b96..d6a3e48 100644
--- a/Year2022/Day10.cs
+++ b/Year2022/Day10.cs
@@ -1,43 +1,44 @@
-using AdventOfCode.Utils;
-
namespace AdventOfCode.Year2022;
public class Day10
{
private static readonly List CommandsList = new();
+
public Day10()
{
- Console.WriteLine("Day10 Solution");
File.ReadAllLines("inputs/day10.txt").ToList().ForEach(line => CommandsList.Add(line));
-
- Console.WriteLine($"Part1 Result: {Part1()}");
- Console.WriteLine($"Part2 Result: {Part2()}");
- Console.WriteLine("\n=============================\n");
+ Console.WriteLine($@"
+Day10 Solution
+Part1 Result: {Part1()}
+Part2 Result: {Part2()}
+=============================");
}
private static int Part1()
{
- int sum = 0;
- int currentPower = 1;
+ var sum = 0;
+ var currentPower = 1;
- int listIndex = 0;
- int addPower = 0;
- int skipCycles = 0;
-
- for (int cycle = 1; cycle <= 220; cycle++)
+ var listIndex = 0;
+ var addPower = 0;
+ var skipCycles = 0;
+
+ for (var cycle = 1; cycle <= 220; cycle++)
{
if (skipCycles == 0)
{
currentPower += addPower;
- string line = CommandsList[listIndex];
- string cmd = line.Substring(0, 4);
+ var line = CommandsList[listIndex];
+ var cmd = line.Substring(0, 4);
skipCycles = cmd == "noop" ? 0 : 1;
addPower = cmd == "noop" ? 0 : Convert.ToInt32(line.Split(" ")[1]);
listIndex++;
}
else
+ {
skipCycles--;
-
+ }
+
if ((cycle - 20) % 40 == 0)
sum += currentPower * cycle;
}
@@ -47,37 +48,39 @@ public class Day10
private static string Part2()
{
- char[] crt = new char[40*6];
- int registerPos = 0;
+ var crt = new char[40 * 6];
+ var registerPos = 0;
- int listIndex = 0;
- int movePos = 0;
- int skipCycles = 0;
-
- for (int cycle = 0; cycle < 240; cycle++)
+ var listIndex = 0;
+ var movePos = 0;
+ var skipCycles = 0;
+
+ for (var cycle = 0; cycle < 240; cycle++)
{
if (skipCycles == 0)
{
registerPos += movePos;
- string line = CommandsList[listIndex];
- string cmd = line[..4];
+ var line = CommandsList[listIndex];
+ var cmd = line[..4];
skipCycles = cmd == "noop" ? 0 : 1;
movePos = cmd == "noop" ? 0 : Convert.ToInt32(line.Split(" ")[1]);
listIndex++;
}
else
+ {
skipCycles--;
+ }
- char[] sprite = CreateSprite(registerPos);
- crt[cycle] = sprite[cycle%40];
+ var sprite = CreateSprite(registerPos);
+ crt[cycle] = sprite[cycle % 40];
}
- string result = "\n";
- int charI = 0;
+ var result = "\n";
+ var charI = 0;
crt.ToList().ForEach(c =>
{
result += c.ToString();
- if ((charI+1)%40==0)
+ if ((charI + 1) % 40 == 0)
result += "\n";
charI++;
});
@@ -86,9 +89,9 @@ public class Day10
private static char[] CreateSprite(int registerPos)
{
- char[] result = new char[40];
- for (int i = 0; i < 40; i++)
- result[i] = i > registerPos-1 && i < registerPos+3 ? '#' : '.';
+ var result = new char[40];
+ for (var i = 0; i < 40; i++)
+ result[i] = i > registerPos - 1 && i < registerPos + 3 ? '#' : ' ';
return result;
}
}
\ No newline at end of file
diff --git a/Year2022/Day11.cs b/Year2022/Day11.cs
index a1ef506..c76e818 100644
--- a/Year2022/Day11.cs
+++ b/Year2022/Day11.cs
@@ -9,45 +9,45 @@ public class Day11
public Day11()
{
- Console.WriteLine("Day11 Solution");
-
File.ReadAllText("inputs/day11.txt").Split("\n\n").ToList().ForEach(monkey =>
{
- string[] lines = monkey.Split("\n");
-
+ var lines = monkey.Split("\n");
+
// Getting starting items
- List- items1 = new List
- ();
- List
- items2 = new List
- ();
+ var items1 = new List
- ();
+ var items2 = new List
- ();
lines[1][(lines[1].IndexOf(':') + 2)..].Split(", ").ToList().ForEach(item =>
{
- items1.Add(new(Convert.ToInt32(item)));
- items2.Add(new(Convert.ToInt32(item)));
+ items1.Add(new Item(Convert.ToInt32(item)));
+ items2.Add(new Item(Convert.ToInt32(item)));
});
-
+
// Getting operation
- string op = lines[2][19..];
-
+ var op = lines[2][19..];
+
// Getting test info
- int test = Convert.ToInt32(lines[3][21..]);
- (int, int) testMonkeys = (Convert.ToInt32(lines[4][29..]), Convert.ToInt32(lines[5][30..]));
+ var test = Convert.ToInt32(lines[3][21..]);
+ var testMonkeys = (Convert.ToInt32(lines[4][29..]), Convert.ToInt32(lines[5][30..]));
Part1Monkeys.Add(new Monkey(items1, op, test, testMonkeys));
Part2Monkeys.Add(new Monkey(items2, op, test, testMonkeys));
});
-
- Console.WriteLine($"Part1 Result: {Part1()}");
- Console.WriteLine($"Part2 Result: {Part2()}");
- Console.WriteLine("\n=============================\n");
+ Console.WriteLine($@"
+Day11 Solution
+Part1 Result: {Part1()}
+Part2 Result: {Part2()}
+
+=============================");
}
private static ulong Part1()
{
- ulong[] inspections = new ulong[Part1Monkeys.Count];
-
- for (int round = 0; round < 20; round++)
- foreach (Monkey monkey in Part1Monkeys)
+ var inspections = new ulong[Part1Monkeys.Count];
+
+ for (var round = 0; round < 20; round++)
+ foreach (var monkey in Part1Monkeys)
{
- foreach (Item item in monkey.Items)
+ foreach (var item in monkey.Items)
{
if (monkey.Operation.Contains('+'))
item.Value += Convert.ToInt32(monkey.Operation.Split(" ").Last());
@@ -58,11 +58,12 @@ public class Day11
item.Value /= 3;
Part1Monkeys[
item.Value % monkey.DivisionTest == 0
- ? monkey.TestMonkeys.Item1
- : monkey.TestMonkeys.Item2
+ ? monkey.TestMonkeys.Item1
+ : monkey.TestMonkeys.Item2
].Items.Add(item);
inspections[Part1Monkeys.IndexOf(monkey)]++;
}
+
monkey.Items.Clear();
}
@@ -75,23 +76,18 @@ public class Day11
foreach (var monkey in Part2Monkeys)
{
monkey.UpdateItems();
- Dictionary> receiversAndItems = monkey.GetReceiversAndItems();
- foreach (int key in receiversAndItems.Keys)
+ var receiversAndItems = monkey.GetReceiversAndItems();
+ foreach (var key in receiversAndItems.Keys)
Part2Monkeys[key].ReceiveItems(receiversAndItems[key]);
}
- List topMonkeys = new List();
- Part2Monkeys.ForEach(monkey => topMonkeys.Add((ulong) monkey.TotalItemsChecked));
+
+ var topMonkeys = new List();
+ Part2Monkeys.ForEach(monkey => topMonkeys.Add((ulong)monkey.TotalItemsChecked));
return topMonkeys.ProductOfMax(2);
}
private class Monkey
{
- public List
- Items { get; set; }
- public string Operation { get; }
- public int DivisionTest { get; }
- public (int, int) TestMonkeys { get; }
- public int TotalItemsChecked { get; private set; }
-
public Monkey(List
- items, string operation, int divisionTest, (int, int) testMonkeys)
{
Items = items;
@@ -101,23 +97,29 @@ public class Day11
TotalItemsChecked = 0;
}
+ public List
- Items { get; private set; }
+ public string Operation { get; }
+ public int DivisionTest { get; }
+ public (int, int) TestMonkeys { get; }
+ public int TotalItemsChecked { get; private set; }
+
public void UpdateItems()
{
if (Operation.Contains('+'))
- foreach (Item item in Items)
+ foreach (var item in Items)
item.UpdateDivisibleBy(Operator.Add, Convert.ToInt32(Operation.Split(" ").Last()));
else if (Operation == "old * old")
- foreach (Item item in Items)
+ foreach (var item in Items)
item.UpdateDivisibleBy(Operator.Square);
else
- foreach (Item item in Items)
+ foreach (var item in Items)
item.UpdateDivisibleBy(Operator.Multiply, Convert.ToInt32(Operation.Split(" ").Last()));
TotalItemsChecked += Items.Count;
}
public Dictionary> GetReceiversAndItems()
{
- Dictionary> result = new Dictionary>
+ var result = new Dictionary>
{
[TestMonkeys.Item1] = new(),
[TestMonkeys.Item2] = new()
@@ -141,19 +143,19 @@ public class Day11
private class Item
{
- public int Value { get; set; }
- public Dictionary DivisibleBy { get; } = new();
-
public Item(int value)
{
Value = value;
- foreach (int i in new[] { 2, 3, 5, 7, 11, 13, 17, 19, 23 })
+ foreach (var i in new[] { 2, 3, 5, 7, 11, 13, 17, 19, 23 })
DivisibleBy.Add(i, value % i);
}
+ public int Value { get; set; }
+ public Dictionary DivisibleBy { get; } = new();
+
public void UpdateDivisibleBy(Operator op, int value = default)
{
- foreach (int key in DivisibleBy.Keys)
+ foreach (var key in DivisibleBy.Keys)
DivisibleBy[key] = op switch
{
Operator.Add => (DivisibleBy[key] + value) % key,
@@ -166,6 +168,8 @@ public class Day11
private enum Operator
{
- Add, Multiply, Square
+ Add,
+ Multiply,
+ Square
}
}
\ No newline at end of file
diff --git a/Year2022/Day2.cs b/Year2022/Day2.cs
index 830ce4e..c4ec531 100644
--- a/Year2022/Day2.cs
+++ b/Year2022/Day2.cs
@@ -6,16 +6,18 @@ public class Day2
public Day2()
{
- Console.WriteLine("Day2 Solution");
- Console.WriteLine($"Part1 Result: {Part1()}");
- Console.WriteLine($"Part2 Result: {Part2()}");
- Console.WriteLine("\n=============================\n");
+ Console.WriteLine($@"
+Day2 Solution
+Part1 Result: {Part1()}
+Part2 Result: {Part2()}
+
+=============================");
}
private static int Part1()
{
- int score = 0;
- foreach (string[] match in Matches)
+ var score = 0;
+ foreach (var match in Matches)
{
if (match[0] == "A")
{
@@ -26,6 +28,7 @@ public class Day2
if (match[1] == "Z")
score += 3;
}
+
if (match[0] == "B")
{
if (match[1] == "X")
@@ -35,6 +38,7 @@ public class Day2
if (match[1] == "Z")
score += 3 + 6;
}
+
if (match[0] == "C")
{
if (match[1] == "X")
@@ -51,8 +55,8 @@ public class Day2
private static int Part2()
{
- int score = 0;
- foreach (string[] match in Matches)
+ var score = 0;
+ foreach (var match in Matches)
{
if (match[0] == "A")
{
@@ -63,6 +67,7 @@ public class Day2
if (match[1] == "Z")
score += 2 + 6;
}
+
if (match[0] == "B")
{
if (match[1] == "X")
@@ -72,6 +77,7 @@ public class Day2
if (match[1] == "Z")
score += 3 + 6;
}
+
if (match[0] == "C")
{
if (match[1] == "X")
@@ -88,8 +94,8 @@ public class Day2
private static List LoadMatches()
{
- List matches = new List();
- foreach (string line in File.ReadAllLines("inputs/day2.txt"))
+ var matches = new List();
+ foreach (var line in File.ReadAllLines("inputs/day2.txt"))
matches.Add(line.Split(" "));
return matches;
}
diff --git a/Year2022/Day3.cs b/Year2022/Day3.cs
index b0681ef..7222e7c 100644
--- a/Year2022/Day3.cs
+++ b/Year2022/Day3.cs
@@ -3,58 +3,57 @@ namespace AdventOfCode.Year2022;
public class Day3
{
private static readonly string[] Backpacks = File.ReadAllLines("inputs/day3.txt");
-
+
public Day3()
{
- Console.WriteLine("Day3 Solution");
- Console.WriteLine($"Part1 Result: {Part1()}");
- Console.WriteLine($"Part2 Result: {Part2()}");
- Console.WriteLine("\n=============================\n");
+ Console.WriteLine($@"
+Day3 Solution
+Part1 Result: {Part1()}
+Part2 Result: {Part2()}
+
+=============================");
}
private static int Part1()
{
- int sum = 0;
-
- List duplicates = new List();
-
- foreach (string backpack in Backpacks)
+ var sum = 0;
+
+ var duplicates = new List();
+
+ foreach (var backpack in Backpacks)
{
- int compartmentSize = backpack.Length / 2;
- List itemsInCompartment1 = new List();
- List itemsInCompartment2 = new List();
-
- for (int i = 0; i < compartmentSize; i++)
+ var compartmentSize = backpack.Length / 2;
+ var itemsInCompartment1 = new List();
+ var itemsInCompartment2 = new List();
+
+ for (var i = 0; i < compartmentSize; i++)
itemsInCompartment1.Add(backpack[i]);
- for (int i = compartmentSize; i < compartmentSize * 2; i++)
+ for (var i = compartmentSize; i < compartmentSize * 2; i++)
itemsInCompartment2.Add(backpack[i]);
- char duplicatedItem = itemsInCompartment1.Intersect(itemsInCompartment2).FirstOrDefault();
+ var duplicatedItem = itemsInCompartment1.Intersect(itemsInCompartment2).FirstOrDefault();
duplicates.Add(duplicatedItem);
}
- foreach (char duplicate in duplicates)
- {
- if (Char.IsUpper(duplicate))
+ foreach (var duplicate in duplicates)
+ if (char.IsUpper(duplicate))
sum += Convert.ToInt16(duplicate) - 38;
else
sum += Convert.ToInt16(duplicate) - 96;
- }
return sum;
}
-
+
private static int Part2()
{
- int sum = 0;
- List
> groups = new List>();
+ var sum = 0;
+ var groups = new List>();
- for (int i = 0; i < Backpacks.Length; i+=3)
+ for (var i = 0; i < Backpacks.Length; i += 3)
{
- List group = new List();
+ var group = new List();
- for (int x = 0; x < 3; x++)
- {
+ for (var x = 0; x < 3; x++)
try
{
group.Add(Backpacks[i + x]);
@@ -63,26 +62,23 @@ public class Day3
{
break;
}
- }
-
+
if (group.All(x => x != ""))
groups.Add(group);
}
- List duplicates = new List();
- foreach (List group in groups)
+ var duplicates = new List();
+ foreach (var group in groups)
{
- string[] groupArray = group.ToArray();
+ var groupArray = group.ToArray();
duplicates.Add(groupArray[0].Intersect(groupArray[1].Intersect(groupArray[2])).FirstOrDefault());
}
-
- foreach (char duplicate in duplicates)
- {
- if (Char.IsUpper(duplicate))
+
+ foreach (var duplicate in duplicates)
+ if (char.IsUpper(duplicate))
sum += Convert.ToInt16(duplicate) - 38;
else
sum += Convert.ToInt16(duplicate) - 96;
- }
return sum;
}
diff --git a/Year2022/Day4.cs b/Year2022/Day4.cs
index 56858c2..68b14a3 100644
--- a/Year2022/Day4.cs
+++ b/Year2022/Day4.cs
@@ -4,47 +4,48 @@ public class Day4
{
public Day4()
{
- Console.WriteLine("Day4 Solution");
-
- string[] lines = File.ReadAllLines("inputs/day4.txt");
- int containedCount = 0;
- int intersectedCount = 0;
- foreach (string line in lines)
+ var lines = File.ReadAllLines("inputs/day4.txt");
+ var containedCount = 0;
+ var intersectedCount = 0;
+ foreach (var line in lines)
{
if (IsContained(line))
containedCount++;
if (IsIntersected(line))
intersectedCount++;
}
-
- Console.WriteLine($"Part1 Result: {containedCount}");
- Console.WriteLine($"Part2 Result: {intersectedCount}");
- Console.WriteLine("\n=============================\n");
+
+ Console.WriteLine($@"
+Day4 Solution
+Part1 Result: {containedCount}
+Part2 Result: {intersectedCount}
+
+=============================");
}
private static bool IsContained(string line)
{
- int[][] limits = GetLimits(line);
+ var limits = GetLimits(line);
return (limits[0][0] >= limits[1][0] && limits[0][1] <= limits[1][1])
- || (limits[1][0] >= limits[0][0] && limits[1][1] <= limits[0][1]);
+ || (limits[1][0] >= limits[0][0] && limits[1][1] <= limits[0][1]);
}
private static bool IsIntersected(string line)
{
- int[][] limits = GetLimits(line);
+ var limits = GetLimits(line);
return (limits[0][1] >= limits[1][0] && limits[0][0] <= limits[1][1])
|| (limits[1][1] >= limits[0][0] && limits[1][0] <= limits[0][1]);
}
private static int[][] GetLimits(string line)
{
- string[] pair = line.Split(",");
- string[] pair1 = pair[0].Split("-");
- string[] pair2 = pair[1].Split("-");
- return new []
+ var pair = line.Split(",");
+ var pair1 = pair[0].Split("-");
+ var pair2 = pair[1].Split("-");
+ return new[]
{
- new [] {Convert.ToInt32(pair1[0]), Convert.ToInt32(pair1[1])},
- new [] {Convert.ToInt32(pair2[0]), Convert.ToInt32(pair2[1])}
+ new[] { Convert.ToInt32(pair1[0]), Convert.ToInt32(pair1[1]) },
+ new[] { Convert.ToInt32(pair2[0]), Convert.ToInt32(pair2[1]) }
};
}
}
\ No newline at end of file
diff --git a/Year2022/Day5.cs b/Year2022/Day5.cs
index 1842252..c063ee9 100644
--- a/Year2022/Day5.cs
+++ b/Year2022/Day5.cs
@@ -6,59 +6,59 @@ public class Day5
{
private static readonly Dictionary> Crates = new()
{
- [1] = new(),
- [2] = new(),
- [3] = new(),
- [4] = new(),
- [5] = new(),
- [6] = new(),
- [7] = new(),
- [8] = new(),
- [9] = new()
+ [1] = new List(),
+ [2] = new List(),
+ [3] = new List(),
+ [4] = new List(),
+ [5] = new List(),
+ [6] = new List(),
+ [7] = new List(),
+ [8] = new List(),
+ [9] = new List()
};
private static readonly List<(int, int, int)> Moves = new();
public Day5()
{
- Console.WriteLine("Day5 Solution");
-
- string[] input = File.ReadAllText("inputs/day5.txt").Split("\n\n");
+ var input = File.ReadAllText("inputs/day5.txt").Split("\n\n");
LoadCrates(input[0]);
LoadMoves(input[1]);
+ Console.WriteLine($@"
+Day5 Solution
+Part1 Result: {Parts(Part.Part1)}
+Part2 Result: {Parts(Part.Part2)}
- Console.WriteLine($"Part1 Result: {Parts(Part.Part1)}");
- Console.WriteLine($"Part2 Result: {Parts(Part.Part2)}");
- Console.WriteLine("\n=============================\n");
+=============================");
}
private static string Parts(Part part)
{
- Dictionary> crates = Crates.Clone();
- foreach ((int, int, int) move in Moves)
+ var crates = Crates.Clone();
+ foreach (var move in Moves)
{
- List cratesMoved = crates[move.Item2].Sublist(0, move.Item1);
- for (int i = 0; i < move.Item1; i++)
+ var cratesMoved = crates[move.Item2].Sublist(0, move.Item1);
+ for (var i = 0; i < move.Item1; i++)
crates[move.Item2].Remove(crates[move.Item2][0]);
- foreach (char crate in part == Part.Part1 ? cratesMoved : cratesMoved.Reversed())
+ foreach (var crate in part == Part.Part1 ? cratesMoved : cratesMoved.Reversed())
crates[move.Item3].Insert(0, crate);
}
- string result = "";
- foreach (List crateList in crates.Values)
+ var result = "";
+ foreach (var crateList in crates.Values)
result += crateList[0];
return result;
}
private static void LoadCrates(string crates)
{
- string[] crate_lines = crates.Split("\n");
- foreach (string line in crate_lines)
+ var crate_lines = crates.Split("\n");
+ foreach (var line in crate_lines)
{
- int firstCrate = 0;
+ var firstCrate = 0;
if (line[firstCrate] == '[')
Crates[1].Add(line[1]);
- while (line.Substring(firstCrate+1).Contains('['))
+ while (line.Substring(firstCrate + 1).Contains('['))
{
firstCrate = line.IndexOf('[', firstCrate + 1);
Crates[firstCrate / 4 + 1].Add(line[firstCrate + 1]);
@@ -68,18 +68,19 @@ public class Day5
private static void LoadMoves(string moves)
{
- string[] move_lines = moves.Split("\n");
- foreach (string line in move_lines)
+ var move_lines = moves.Split("\n");
+ foreach (var line in move_lines)
{
- string move = line.Substring(5);
- string[] moved = move.Split(" from ");
- string[] crates = moved[1].Split(" to ");
+ var move = line.Substring(5);
+ var moved = move.Split(" from ");
+ var crates = moved[1].Split(" to ");
Moves.Add((Convert.ToInt32(moved[0]), Convert.ToInt32(crates[0]), Convert.ToInt32(crates[1])));
}
}
private enum Part
{
- Part1, Part2
+ Part1,
+ Part2
}
}
\ No newline at end of file
diff --git a/Year2022/Day6.cs b/Year2022/Day6.cs
index 997b663..9e18784 100644
--- a/Year2022/Day6.cs
+++ b/Year2022/Day6.cs
@@ -3,18 +3,20 @@ namespace AdventOfCode.Year2022;
public class Day6
{
private static readonly string Input = File.ReadAllText("inputs/day6.txt");
-
+
public Day6()
{
- Console.WriteLine("Day6 Solution");
- Console.WriteLine($"Part1 Result: {GetValidMarkerIndex(4)}");
- Console.WriteLine($"Part2 Result: {GetValidMarkerIndex(14)}");
- Console.WriteLine("\n=============================\n");
+ Console.WriteLine($@"
+Day6 Solution
+Part1 Result: {GetValidMarkerIndex(4)}
+Part2 Result: {GetValidMarkerIndex(14)}
+
+=============================");
}
private static int? GetValidMarkerIndex(int size)
{
- for (int i = 0; i < Input.Length-size; i++)
+ for (var i = 0; i < Input.Length - size; i++)
if (ValidateMarker(Input.Substring(i, size)))
return i + size;
return null;
diff --git a/Year2022/Day7.cs b/Year2022/Day7.cs
index cfbd5c5..2ecc073 100644
--- a/Year2022/Day7.cs
+++ b/Year2022/Day7.cs
@@ -3,40 +3,39 @@ namespace AdventOfCode.Year2022;
public class Day7
{
private static readonly Dictionary> Tree = GetTree();
-
+
public Day7()
{
- Console.WriteLine("Day7 Solution");
- Console.WriteLine($"Part1 Result: {Part1()}");
- Console.WriteLine($"Part2 Result: {Part2()}");
- Console.WriteLine("\n=============================\n");
+ Console.WriteLine($@"
+Day7 Solution
+Part1 Result: {Part1()}
+Part2 Result: {Part2()}
+
+=============================");
}
private static int Part1()
{
- int sum = 0;
- foreach (string path in Tree.Keys)
+ var sum = 0;
+ foreach (var path in Tree.Keys)
{
- int size = CalculateDirSize(path);
+ var size = CalculateDirSize(path);
if (size <= 100000)
sum += size;
}
return sum;
}
-
+
private static int Part2()
{
- int neededSpace = CalculateDirSize("/") - 40000000;
- if (neededSpace <= 0)
- {
- return 0;
- }
+ var neededSpace = CalculateDirSize("/") - 40000000;
+ if (neededSpace <= 0) return 0;
- List bigEnoughDir = new List();
- foreach (string path in Tree.Keys)
+ var bigEnoughDir = new List();
+ foreach (var path in Tree.Keys)
{
- int size = CalculateDirSize(path);
+ var size = CalculateDirSize(path);
if (size > neededSpace)
bigEnoughDir.Add(size);
}
@@ -47,11 +46,11 @@ public class Day7
private static int CalculateDirSize(string path)
{
- int size = 0;
- List dirContent = Tree[path];
- foreach (string content in dirContent)
+ var size = 0;
+ var dirContent = Tree[path];
+ foreach (var content in dirContent)
{
- string[] properties = content.Split(" ");
+ var properties = content.Split(" ");
if (properties[0] == "dir")
size += CalculateDirSize(path + properties[1] + "/");
else
@@ -63,30 +62,33 @@ public class Day7
private static Dictionary> GetTree()
{
- Dictionary> tree = new Dictionary>();
- string currentPath = "";
+ var tree = new Dictionary>();
+ var currentPath = "";
- IEnumerable input = File.ReadLines("inputs/day7.txt");
- foreach (string line in input)
- {
+ var input = File.ReadLines("inputs/day7.txt");
+ foreach (var line in input)
if (line.StartsWith("$"))
{
- string[] cmdLine = line.Substring(2).Split(" ");
+ var cmdLine = line.Substring(2).Split(" ");
if (cmdLine[0] == "cd")
{
- string dir = cmdLine[1];
+ var dir = cmdLine[1];
if (dir == "/")
+ {
currentPath = "/";
+ }
else if (dir == "..")
{
if (currentPath == "/") continue;
- int slashIndex = currentPath
+ var slashIndex = currentPath
.Substring(0, currentPath.Length - 1)
.LastIndexOf('/');
currentPath = currentPath.Substring(0, slashIndex + 1);
}
else
+ {
currentPath += dir + "/";
+ }
}
}
else
@@ -95,7 +97,6 @@ public class Day7
tree.Add(currentPath, new List());
tree[currentPath].Add(line);
}
- }
return tree;
}
diff --git a/Year2022/Day8.cs b/Year2022/Day8.cs
index e0a3cce..a6e2eb2 100644
--- a/Year2022/Day8.cs
+++ b/Year2022/Day8.cs
@@ -8,89 +8,92 @@ public class Day8
public Day8()
{
- Console.WriteLine("Day8 Solution");
- Console.WriteLine($"Part1 Result: {Part1()}");
- Console.WriteLine($"Part2 Result: {Part2()}");
- Console.WriteLine("\n=============================\n");
+ Console.WriteLine($@"
+Day8 Solution
+Part1 Result: {Part1()}
+Part2 Result: {Part2()}
+
+=============================");
}
private static int Part1()
{
- int count = 0;
- for (int i = 0; i < TreeMap.Count; i++)
- for (int j = 0; j < TreeMap[i].Count; j++)
- if (i == 0 || i == TreeMap.Count-1 || j == 0 || j == TreeMap.Count-1
- || TreeMap[i].Sublist(0, j).Max() < TreeMap[i][j]
- || TreeMap[i].Sublist(j + 1, TreeMap[i].Count).DefaultIfEmpty().Max() < TreeMap[i][j]
- || TreeMap.GetColumn(j).Sublist(0, i).Max() < TreeMap[i][j]
- || TreeMap.GetColumn(j).Sublist(i + 1, TreeMap[i].Count).DefaultIfEmpty().Max() < TreeMap[i][j])
- count++;
+ var count = 0;
+ for (var i = 0; i < TreeMap.Count; i++)
+ for (var j = 0; j < TreeMap[i].Count; j++)
+ if (i == 0 || i == TreeMap.Count - 1 || j == 0 || j == TreeMap.Count - 1
+ || TreeMap[i].Sublist(0, j).Max() < TreeMap[i][j]
+ || TreeMap[i].Sublist(j + 1, TreeMap[i].Count).DefaultIfEmpty().Max() < TreeMap[i][j]
+ || TreeMap.GetColumn(j).Sublist(0, i).Max() < TreeMap[i][j]
+ || TreeMap.GetColumn(j).Sublist(i + 1, TreeMap[i].Count).DefaultIfEmpty().Max() < TreeMap[i][j])
+ count++;
return count;
}
private static int Part2()
{
- int highestScore = 0;
+ var highestScore = 0;
- for (int i = 0; i < TreeMap.Count; i++)
- for (int j = 0; j < TreeMap[i].Count; j++)
+ for (var i = 0; i < TreeMap.Count; i++)
+ for (var j = 0; j < TreeMap[i].Count; j++)
+ {
+ if (i == 0 || j == 0) continue;
+
+ var currentTree = TreeMap[i][j];
+ var currentTreeScore = 1;
+ var directionCount = 0;
+
+ for (var k = i - 1; k >= 0; k--)
{
- if (i == 0 || j == 0) continue;
-
- int currentTree = TreeMap[i][j];
- int currentTreeScore = 1;
- int directionCount = 0;
-
- for (int k = i - 1; k >= 0; k--)
- {
- directionCount++;
- if (TreeMap[k][j] >= currentTree) break;
- }
-
- currentTreeScore *= directionCount;
- directionCount = 0;
-
- for (int k = j - 1; k >= 0; k--)
- {
- directionCount++;
- if (TreeMap[i][k] >= currentTree) break;
- }
-
- currentTreeScore *= directionCount;
- directionCount = 0;
-
- for (int k = i + 1; k < TreeMap.Count; k++)
- {
- directionCount++;
- if (TreeMap[k][j] >= currentTree) break;
- }
-
- currentTreeScore *= directionCount;
- directionCount = 0;
-
- for (int k = j + 1; k < TreeMap[i].Count; k++)
- {
- directionCount++;
- if (TreeMap[i][k] >= currentTree) break;
- }
-
- currentTreeScore *= directionCount;
- highestScore = Math.Max(highestScore, currentTreeScore);
+ directionCount++;
+ if (TreeMap[k][j] >= currentTree) break;
}
+ currentTreeScore *= directionCount;
+ directionCount = 0;
+
+ for (var k = j - 1; k >= 0; k--)
+ {
+ directionCount++;
+ if (TreeMap[i][k] >= currentTree) break;
+ }
+
+ currentTreeScore *= directionCount;
+ directionCount = 0;
+
+ for (var k = i + 1; k < TreeMap.Count; k++)
+ {
+ directionCount++;
+ if (TreeMap[k][j] >= currentTree) break;
+ }
+
+ currentTreeScore *= directionCount;
+ directionCount = 0;
+
+ for (var k = j + 1; k < TreeMap[i].Count; k++)
+ {
+ directionCount++;
+ if (TreeMap[i][k] >= currentTree) break;
+ }
+
+ currentTreeScore *= directionCount;
+ highestScore = Math.Max(highestScore, currentTreeScore);
+ }
+
return highestScore;
}
private static List> LoadMap()
{
- List> map = new List>();
- string[] lines = File.ReadAllLines("inputs/day8.txt");
- for (int i = 0; i < lines.Length; i++)
+ var map = new List>();
+ var lines = File.ReadAllLines("inputs/day8.txt");
+ for (var i = 0; i < lines.Length; i++)
{
map.Add(new List());
- for (int j = 0; j < lines[i].Length; j++)
+ for (var j = 0; j < lines[i].Length; j++)
map[i].Add(Convert.ToInt32(lines[i][j].ToString()));
}
+
return map;
}
}
\ No newline at end of file
diff --git a/Year2022/Day9.cs b/Year2022/Day9.cs
index 33d6642..7e26152 100644
--- a/Year2022/Day9.cs
+++ b/Year2022/Day9.cs
@@ -6,34 +6,37 @@ public class Day9
{
public Day9()
{
- Console.WriteLine("Day9 Solution");
- List<(char, int)> moves = new List<(char, int)>();
+ var moves = new List<(char, int)>();
File.ReadAllLines("inputs/day9.txt").ToList().ForEach(line =>
{
- string[] split = line.Split(" ");
+ var split = line.Split(" ");
moves.Add((Convert.ToChar(split[0]), Convert.ToInt32(split[1])));
});
- Console.WriteLine($"Part1 Result: {GetPositionCount(moves, 2)}");
- Console.WriteLine($"Part2 Result: {GetPositionCount(moves, 10)}");
- Console.WriteLine("\n=============================\n");
+ Console.WriteLine($@"
+Day9 Solution
+Part1 Result: {GetPositionCount(moves, 2)}
+Part2 Result: {GetPositionCount(moves, 10)}
+
+=============================");
}
private static int GetPositionCount(List<(char, int)> moves, int knots)
{
- List> currentPositions = new List>();
- currentPositions.Fill(knots, new List(new[]{0,0}));
- HashSet<(int, int)> tailHistory = new HashSet<(int, int)>();
+ var currentPositions = new List>();
+ currentPositions.Fill(knots, new List(new[] { 0, 0 }));
+ var tailHistory = new HashSet<(int, int)>();
- foreach ((char, int) move in moves)
- for (int moveN = 0; moveN < move.Item2; moveN++)
+ foreach (var move in moves)
+ for (var moveN = 0; moveN < move.Item2; moveN++)
{
- int[] vector = GetVector(move.Item1);
- int[] previousTailPosition = currentPositions[0].ToArray();
+ var vector = GetVector(move.Item1);
+ var previousTailPosition = currentPositions[0].ToArray();
currentPositions[0] = UpdateHead(vector, currentPositions[0]);
- for (int tailN = 0; tailN < knots-1; tailN++)
+ for (var tailN = 0; tailN < knots - 1; tailN++)
{
- int[] nextPreviousTailPosition = currentPositions[tailN + 1].ToArray();
- currentPositions[tailN + 1] = UpdateTail(currentPositions[tailN], currentPositions[tailN + 1], previousTailPosition);
+ var nextPreviousTailPosition = currentPositions[tailN + 1].ToArray();
+ currentPositions[tailN + 1] = UpdateTail(currentPositions[tailN], currentPositions[tailN + 1],
+ previousTailPosition);
previousTailPosition = nextPreviousTailPosition;
if (tailN == knots - 2)
tailHistory.Add((currentPositions[knots - 1][0], currentPositions[knots - 1][1]));
@@ -50,9 +53,10 @@ public class Day9
return new List { currentPosition[0], currentPosition[1] };
}
- private static List UpdateTail(List currentHeadPosition, List currentTailPosition, int[] previousTailPosition)
+ private static List UpdateTail(List currentHeadPosition, List currentTailPosition,
+ int[] previousTailPosition)
{
- List head = new List
+ var head = new List
{
currentHeadPosition[0] - previousTailPosition[0],
currentHeadPosition[1] - previousTailPosition[1]
@@ -68,8 +72,8 @@ public class Day9
currentTailPosition[0] + head[0],
currentTailPosition[1] + head[1]
};
-
- List difference = new List
+
+ var difference = new List
{
currentHeadPosition[0] - currentTailPosition[0],
currentHeadPosition[1] - currentTailPosition[1]
diff --git a/Year2022/Loader2022.cs b/Year2022/Loader2022.cs
index 7816b55..d73b230 100644
--- a/Year2022/Loader2022.cs
+++ b/Year2022/Loader2022.cs
@@ -9,7 +9,7 @@ public static class Loader2022
* Solutions in C# for the 2022 Advent of Code
* Slower solutions are commented
*/
-
+
new Day1();
new Day2();
new Day3();
@@ -21,5 +21,6 @@ public static class Loader2022
new Day9();
new Day10();
// new Day11();
+ // new Day12();
}
}
\ No newline at end of file