public bool Match(string input)
        {
            string romanAlphabet = RomanSymbol.GetAlphabet();

            string[] parts = Regex.Split(input, Constant.ExpressionSplitter, RegexOptions.IgnoreCase);

            if (parts.Length != 2)
            {
                return(false);
            }

            string roman = parts[1];
            bool   found = false;

            for (int i = 0; i < romanAlphabet.Length; i++)
            {
                if (String.Equals(roman, romanAlphabet[i].ToString(), StringComparison.OrdinalIgnoreCase))
                {
                    found = true;
                    break;
                }
            }

            return(found);
        }
Exemple #2
0
        public bool Match(string input)
        {
            string romanAlphabet = RomanSymbol.GetAlphabet();

            string[] parts = input.ToUpper().Split(new string[] { " IS " }, StringSplitOptions.RemoveEmptyEntries);

            if (parts.Length != 2)
            {
                return(false);
            }

            string roman = parts[1];
            bool   found = false;

            for (int i = 0; i < romanAlphabet.Length; i++)
            {
                if (String.Equals(roman, romanAlphabet[i].ToString(), StringComparison.OrdinalIgnoreCase))
                {
                    found = true;
                    break;
                }
            }

            return(found);
        }
Exemple #3
0
        public bool IsMatch(string symbols)
        {
            var romanSymbols = RomanSymbol.GetRomanSymbols();
            var parts        = symbols.Split(" is ", StringSplitOptions.RemoveEmptyEntries);

            if (parts.Length != 2)
            {
                return(false);
            }
            return(romanSymbols.Contains(parts[1]));
        }
        public void CanDeclareConstant()
        {
            var interpreter = new LineInterpreter();

            interpreter.ParseAndExecute("glob is I");
            var globSymbol = new ConstantSymbol("glob");
            var iSymbol    = new RomanSymbol("I");

            Assert.IsTrue(interpreter.Processor.ConstantsTable.ContainsKey(globSymbol));
            Assert.AreEqual(iSymbol, interpreter.Processor.ConstantsTable[globSymbol]);
        }
        public bool Execute(string input)
        {
            for (int i = 0; i < input.Length; i++)
            {
                if (i < input.Length - 1)
                {
                    if (RomanSymbol.IsSmaller(input[i].ToString(), input[i + 1].ToString()) && !RomanSymbol.IsSubtractionAllowed(input[i].ToString()))
                    {
                        Console.WriteLine("InvalidSubtraction Rule has been violated");
                        return(false);
                    }
                }
            }

            return(true);
        }
Exemple #6
0
        public Symbol GetNextSymbol()
        {
            Symbol ret;

            if (_arguments.Length == _currentReadPosition)
            {
                return(null);
            }

            var lastArg = _arguments[_currentReadPosition];

            switch (lastArg)
            {
            case Keywords.Operators.Is:
                ret = new Symbol(lastArg, SymbolKind.Operator);
                break;

            case Keywords.Qualifiers.QueryCommandQualifier:
                ret = new Symbol(lastArg, SymbolKind.QueryQualifier);
                break;

            case Keywords.RomanSymbols.I:
            case Keywords.RomanSymbols.V:
            case Keywords.RomanSymbols.X:
            case Keywords.RomanSymbols.L:
            case Keywords.RomanSymbols.C:
            case Keywords.RomanSymbols.D:
            case Keywords.RomanSymbols.M:
                ret = new RomanSymbol(lastArg);
                break;

            case Keywords.Statements.How:
                ret = new Symbol(lastArg, SymbolKind.Statement);
                break;

            case Keywords.SubStatements.Many:
            case Keywords.SubStatements.Much:
                ret = new Symbol(lastArg, SymbolKind.SubStatemant);
                break;

            default:
                ret = GetDeclarationSymbol(lastArg);
                break;
            }
            _currentReadPosition++;
            return(ret);
        }
Exemple #7
0
        public bool CheckViolation(string input)
        {
            if (input.Length < 3)
            {
                return(true);
            }

            for (int i = input.Length - 1; i >= 2; i--)
            {
                if (RomanSymbol.IsSmaller(input[i - 1].ToString(), input[i].ToString()) &&
                    RomanSymbol.IsSmaller(input[i - 2].ToString(), input[i].ToString()))
                {
                    Console.WriteLine("SingleSubtraction Rule has been violated");
                    return(false);
                }
            }

            return(true);
        }
Exemple #8
0
        private int CalculateAbsoluteValue()
        {
            int         resultValue = 0;
            RomanSymbol current     = RomanSymbol.Null;

            for (int i = Text.Length - 1; i >= 0; i--)
            {
                RomanSymbol before = (RomanSymbol)Enum.Parse(typeof(RomanSymbol), Text[i].ToString());
                if (before >= current)
                {
                    resultValue += (int)before;
                }
                else
                {
                    resultValue -= (int)before;
                }
                current = before;
            }

            return(resultValue);
        }
        private static IEnumerable <RomanSymbol> ExtractSymbolPart(ArabicNumber arabic, RomanSymbol romanSymbol)
        {
            if (SpecialRomanSymbols.ContainsEquivalent(arabic))
            {
                return(SpecialRomanSymbols.GetItemsFromEquivalent(arabic));
            }
            var repetition = RomanSymbolRepetition.FromOcurrancesOfSymbol(romanSymbol, arabic);

            return(repetition.Equals(RomanSymbolRepetition.Empty)
                ? new RomanSymbol[0]
                : repetition.Items);
        }
 public int DevidedBy(RomanSymbol romanSymbol) =>
 Value / romanSymbol.ArabicValue;
 private int ToNegative(RomanSymbol romanSymbol) =>
 romanSymbol.ArabicValue * -1;
 public bool IsNegativeRoman(RomanSymbol romanSymbol) =>
 Value == ToNegative(romanSymbol);
 public bool IsGreaterOrEqualTo(RomanSymbol romanSymbol) =>
 Value == romanSymbol.ArabicValue ||
 IsGreaterThan(romanSymbol);
 public bool IsGreaterThan(RomanSymbol romanSymbol) =>
 Value > romanSymbol.ArabicValue;
 public void CleanTestData()
 {
     romanSymbol = null;
     irregularSymbolsDefinition.Clear();
 }
 public void Init()
 {
     romanSymbol = new RomanSymbol("I", 1, "VX", true, true);
     irregularSymbolsDefinition = new System.Collections.Generic.Dictionary <string, RomanSymbol>();
     irregularSymbolsDefinition.Add("glob", romanSymbol);
 }