public override bool Equals(object obj) { if (obj == null) { return(false); } else if (object.ReferenceEquals(this, obj)) { return(true); } else if (obj is RadixNumeral) { RadixNumeral radNum = (RadixNumeral)obj; return( this.Base == radNum.Base && this.Value == radNum.Base && RadixNumeral.GetHashString(this) == RadixNumeral.GetHashString(radNum) ); } else { return(false); } }
private static List <RadixNumeral> ConvertListToRadixNumeralList(List <BigInteger> numeralSystemDefinition, List <Dictionary <BigInteger, string> > symbolDictionaryList) { if (numeralSystemDefinition == null) { throw new ArgumentNullException("NumberSystemDefinition"); } if (numeralSystemDefinition.Count < 1) { throw new ArgumentException("List cannot be empty.", "NumberSystemDefinition"); } int index = 0; RadixNumeral rLast = RadixNumeral.Empty; List <RadixNumeral> result = new List <RadixNumeral>(); foreach (BigInteger radixBase in numeralSystemDefinition) { RadixNumeral radNew = RadixNumeral.Empty; if (symbolDictionaryList == null) { radNew = new RadixNumeral(radixBase, index); } else { radNew = new RadixNumeral(radixBase, index, symbolDictionaryList[index]); } if (rLast == RadixNumeral.Empty) { radNew.Previous = RadixNumeral.Empty; } else { rLast.Next = radNew; radNew.Previous = rLast; result.Add(rLast); } rLast = radNew; index += 1; } rLast.Next = RadixNumeral.Empty; result.Add(rLast); if (result.Count > 0) { return(result); } else { throw new Exception("result.Count < 1"); } }
public static bool operator ==(RadixNumeral a, RadixNumeral b) { if (RadixNumeral.ReferenceEquals(a, null)) { return(RadixNumeral.ReferenceEquals(b, null)); } return(a.Equals(b)); }
public override int GetHashCode() { unchecked { BigInteger hash = this.Value ^ this.Base ^ RadixNumeral.GetHashString(this).GetHashCode(); if (hash > int.MaxValue) { hash = hash % int.MaxValue; } return((int)hash); } }
private static string GetHashString(RadixNumeral radNum) { //int counter = 0; //string symbolString = "{EMPTY}"; //if (radNum.SymbolDictionary.Count > 0) //{ // symbolString = string.Join(",", radNum.SymbolDictionary.Values.Select(v => string.Format("{0}:{1}", counter++, v))); //} string result = string.Format("{0}[{1}]:{2}", radNum.Value, radNum.Base, radNum.SymbolicValue); //, symbolString, radNum.SymbolDictionary.Count); return(result); }
public string GetPolynomialFormat() { RadixNumeral current = Digits.Last(); List <string> coefficients = new List <string>(); int counter = Digits.Count - 1; while (current != RadixNumeral.Empty) { coefficients.Add($"{current.Value}*{current.Base}^{counter}"); counter--; current = current.Previous; } return(string.Join(" + ", coefficients)); }
private static string GetHashString(RadixNumeral radNum) { //int counter = 0; //string symbolString = "{EMPTY}"; //if (radNum.SymbolDictionary.Count > 0) //{ // symbolString = string.Join(",", radNum.SymbolDictionary.Values.Select(v => string.Format("{0}:{1}", counter++, v))); //} string result = string.Format("{0}[{1}]:{2}", radNum.Value, radNum.Base, radNum.SymbolicValue);//, symbolString, radNum.SymbolDictionary.Count); return result; }