diff --git a/Utils/LinqExtensions.cs b/Utils/Extensions/LinqExtensions.cs
similarity index 95%
rename from Utils/LinqExtensions.cs
rename to Utils/Extensions/LinqExtensions.cs
index f417bf2..39c10ef 100644
--- a/Utils/LinqExtensions.cs
+++ b/Utils/Extensions/LinqExtensions.cs
@@ -1,4 +1,4 @@
-namespace AdventOfCode.Utils;
+namespace AdventOfCode.Utils.Extensions;
public static class LinqExtensions
{
@@ -9,9 +9,11 @@ public static class LinqExtensions
/// The first index of the slice
/// The index after the last index of the slice
///
- public static List Sublist(this List list, int startIndex, int endIndex)
+ public static List Sublist(this List list, int startIndex, int endIndex = default)
{
List result = new List();
+ if (endIndex == default)
+ endIndex = list.Count;
for (int i = startIndex; i < endIndex; i++)
result.Add(list[i]);
return result;
diff --git a/Utils/Extensions/MathExtensions.cs b/Utils/Extensions/MathExtensions.cs
new file mode 100644
index 0000000..384587d
--- /dev/null
+++ b/Utils/Extensions/MathExtensions.cs
@@ -0,0 +1,58 @@
+namespace AdventOfCode.Utils.Extensions;
+
+public static class MathExtensions
+{
+ public static int Signal(this int x)
+ {
+ return x switch
+ {
+ < 0 => -1,
+ > 0 => 1,
+ _ => 0
+ };
+ }
+
+ public static bool IsDigit(this string s)
+ {
+ try
+ {
+ Convert.ToInt32(s);
+ }
+ catch (FormatException ignored)
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ public static ulong ProductOfMax(this List list, int maxCount)
+ {
+ List maxList = new List(maxCount);
+
+ foreach (ulong number in list)
+ {
+ if (maxList.Count < maxList.Capacity)
+ maxList.Add(number);
+ else
+ if (number > maxList.Min())
+ {
+ maxList.RemoveAt(0);
+ maxList.Add(number);
+ }
+ maxList.Sort();
+ }
+
+ ulong product = 1;
+ maxList.ForEach(n => product*=n);
+ return product;
+ }
+
+ public static int LeastCommonMultiplier(this List list)
+ {
+ int lcm = 1;
+ foreach (int i in list)
+ lcm *= i / MathTools.GreatCommonDivider(lcm, i);
+ return lcm;
+ }
+}
\ No newline at end of file
diff --git a/Utils/MathExtensions.cs b/Utils/MathExtensions.cs
deleted file mode 100644
index 7785629..0000000
--- a/Utils/MathExtensions.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-namespace AdventOfCode.Utils;
-
-public static class MathExtensions
-{
- public static int Signal(this int x)
- {
- return x switch
- {
- < 0 => -1,
- > 0 => 1,
- _ => 0
- };
- }
-}
\ No newline at end of file
diff --git a/Utils/MathTools.cs b/Utils/MathTools.cs
new file mode 100644
index 0000000..b37b4fd
--- /dev/null
+++ b/Utils/MathTools.cs
@@ -0,0 +1,11 @@
+namespace AdventOfCode.Utils;
+
+public static class MathTools
+{
+ public static int GreatCommonDivider(int x, int y)
+ {
+ if (x % y == 0)
+ return y;
+ return GreatCommonDivider(y, x % y);
+ }
+}
\ No newline at end of file
diff --git a/Year2022/Day5.cs b/Year2022/Day5.cs
index 080550f..1842252 100644
--- a/Year2022/Day5.cs
+++ b/Year2022/Day5.cs
@@ -1,4 +1,4 @@
-using AdventOfCode.Utils;
+using AdventOfCode.Utils.Extensions;
namespace AdventOfCode.Year2022;
diff --git a/Year2022/Day8.cs b/Year2022/Day8.cs
index 34d467b..e0a3cce 100644
--- a/Year2022/Day8.cs
+++ b/Year2022/Day8.cs
@@ -1,4 +1,4 @@
-using AdventOfCode.Utils;
+using AdventOfCode.Utils.Extensions;
namespace AdventOfCode.Year2022;
diff --git a/Year2022/Day9.cs b/Year2022/Day9.cs
index dcf8849..33d6642 100644
--- a/Year2022/Day9.cs
+++ b/Year2022/Day9.cs
@@ -1,4 +1,4 @@
-using AdventOfCode.Utils;
+using AdventOfCode.Utils.Extensions;
namespace AdventOfCode.Year2022;