Exemple #1
0
 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);
     }
 }
Exemple #2
0
        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");
            }
        }
Exemple #3
0
            public static bool operator ==(RadixNumeral a, RadixNumeral b)
            {
                if (RadixNumeral.ReferenceEquals(a, null))
                {
                    return(RadixNumeral.ReferenceEquals(b, null));
                }

                return(a.Equals(b));
            }
Exemple #4
0
 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);
     }
 }
Exemple #5
0
            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);
            }
Exemple #6
0
        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;
 }