my advent of code solutions
at main 55 lines 1.5 kB view raw
1namespace Solutions; 2 3public static class Util 4{ 5 /// <summary> 6 /// Naive least common multiple implementation. 7 /// </summary> 8 /// <param name="a"></param> 9 /// <param name="b"></param> 10 /// <returns></returns> 11 public static long Lcm(long a, long b) => a * b / Gcd(a, b); 12 13 /// <summary> 14 /// Naive greatest common denominator implementation. 15 /// </summary> 16 /// <param name="a"></param> 17 /// <param name="b"></param> 18 /// <returns></returns> 19 public static long Gcd(long a, long b) 20 { 21 while (true) 22 { 23 if (b == 0) return a; 24 var a1 = a; 25 a = b; 26 b = a1 % b; 27 } 28 } 29 30 /// <summary> 31 /// Quickly parse an integer from a ReadOnlySpan by ascii index and radix shifting. 32 /// </summary> 33 /// <param name="span"></param> 34 /// <returns></returns> 35 public static int ParseIntFast(ReadOnlySpan<char> span) 36 { 37 var result = 0; 38 for (var i = 0; i < span.Length; i++) 39 result = result * 10 + span[i] - '0'; 40 return result; 41 } 42 43 /// <summary> 44 /// Quickly parse a long from a ReadOnlySpan by ascii index and radix shifting. 45 /// </summary> 46 /// <param name="span"></param> 47 /// <returns></returns> 48 public static long ParseLongFast(ReadOnlySpan<char> span) 49 { 50 var result = 0L; 51 for (var i = 0; i < span.Length; i++) 52 result = result * 10 + span[i] - '0'; 53 return result; 54 } 55}