public bool Equals(MayanNumeral n) { return(Base10 == n.Base10); }
static void Main(string[] args) { var parsedMayan = Enumerable.Range(0, 20) .Select(l => new List <string>()).ToArray(); string[] inputs = Console.ReadLine().Split(' '); int L = int.Parse(inputs[0]); int H = int.Parse(inputs[1]); for (int i = 0; i < H; i++) { string numeral = Console.ReadLine(); int idx = 0; int base10 = 0; do { parsedMayan[base10].Add(numeral.Substring(idx, L)); base10 = base10 + 1; idx += L; } while (idx < numeral.Length); } var baseMayan = new MayanNumeral[20]; for (int i = 0; i < 20; i++) { baseMayan[i] = new MayanNumeral(i, parsedMayan[i]); Console.Error.WriteLine("#: " + i); Console.Error.WriteLine(baseMayan[i]); } long s1 = 0; int s1Pow = (int.Parse(Console.ReadLine()) / H) - 1; for (int i = s1Pow; i >= 0; i--) { var mn = new List <string>(); for (int ni = 0; ni < H; ni++) { mn.Add(Console.ReadLine()); } int base10 = baseMayan.First(m => m.Equals(mn)).Base10; Console.Error.WriteLine("S1: Base10: {1}, Pow: {0}", i, base10); Console.Error.WriteLine(string.Join("\n", mn)); s1 += (base10 * (int)Math.Pow(20, i)); } Console.Error.WriteLine("S1: " + s1); long s2 = 0; int s2Pow = (int.Parse(Console.ReadLine()) / H) - 1; for (int i = s2Pow; i >= 0; i--) { var mn = new List <string>(); for (int ni = 0; ni < H; ni++) { mn.Add(Console.ReadLine()); } int base10 = baseMayan.First(m => m.Equals(mn)).Base10; Console.Error.WriteLine("S2: Base10: {1}, Pow: {0}", i, base10); Console.Error.WriteLine(string.Join("\n", mn)); s2 += (base10 * (int)Math.Pow(20, i)); } Console.Error.WriteLine("S2: " + s2); string operation = Console.ReadLine(); long base10Result = 0; switch (operation) { case "+": base10Result = s1 + s2; break; case "-": base10Result = s1 - s2; break; case "/": base10Result = s1 / s2; break; case "*": base10Result = s1 * s2; break; } Console.Error.WriteLine("Operation: {0} {1} {2} = {3}", s1, operation, s2, base10Result); Console.Error.WriteLine(); WriteMayanNumber(base10Result, baseMayan); }