//Multiply two Noms public static Nom MultiplyNoms(Nom input1, Nom input2) { var result = new Nom(); result.Constant = input1.Constant * input2.Constant; result.HasX = input1.HasX || input2.HasX; result.Power = input1.Power + input2.Power; return(result); }
//Multiple all input Noms by multipler public static List <Nom> MultiplyAcrossNoms(List <Nom> input, Nom multiplier) { var result = new List <Nom>(); foreach (var n in input) { result.Add(MultiplyNoms(n, multiplier)); } return(result); }
//Divide two Noms public static Nom DivideNoms(Nom numerator, Nom denominator) { var result = new Nom(); result.HasX = numerator.HasX; if (numerator.HasX && denominator.HasX) { result.Power = numerator.Power - denominator.Power; } result.Constant = numerator.Constant / denominator.Constant; return(result); }
//Subtract Nom public static Nom SubtractNom(Nom top, Nom bottom) { if (top.Power != bottom.Power) { throw new InvalidOperationException("Cannot get difference of different powers"); } var result = new Nom(); result.Constant = top.Constant - bottom.Constant; result.HasX = top.HasX && bottom.HasX; result.Power = top.Power; return(result); }
//Build a Nom based on input. DOES NOT SET THE SIGN public static Nom ParseNom(string input) { var result = new Nom(); if (input.Contains("x")) { var power = input.Substring(input.IndexOf("x") + 1, input.Length - input.IndexOf("x") - 1); var constant = input.Substring(0, input.IndexOf("x")); result.Power = (power == string.Empty) ? 1 : int.Parse(power); result.Constant = (constant == string.Empty) ? 1 : int.Parse(constant); result.HasX = true; } else { result.Constant = int.Parse(input); result.Power = 0; result.HasX = false; } return(result); }