public override string Process(string input, Dictionary <string, string> currencyConverters, Dictionary <string, float> materials)
        {
            input = input.TrimEnd('?');
            var parts          = input.Split(new[] { " is " }, StringSplitOptions.RemoveEmptyEntries);
            var predicate      = parts[1];
            var predicateParts = predicate.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
            var materialkey    = predicateParts[predicateParts.Length - 1];

            if (!materials.ContainsKey(materialkey))
            {
                return(Program.ERROR_MESSAGE);
            }
            var roman = string.Empty;

            for (int i = 0; i < predicateParts.Length - 1; i++)
            {
                var currencyKey = predicateParts[i];
                if (!currencyConverters.ContainsKey(currencyKey))
                {
                    return(Program.ERROR_MESSAGE);
                }
                roman += currencyConverters[currencyKey];
            }
            try
            {
                // NOTE: would normally Inject this converter from IoC
                var multiplier = new RomanConverter.Converter().GetIntFromRoman(roman);
                var total      = materials[materialkey] * multiplier;
                return(string.Format("{0} is {1} Credits", predicate, total));
            }
            catch (Exception)
            {
                return(Program.ERROR_MESSAGE);
            }
        }
예제 #2
0
        public override string Process(string input, Dictionary <string, string> currencyConverters, Dictionary <string, float> materials)
        {
            var parts        = input.Split(new[] { " is " }, StringSplitOptions.RemoveEmptyEntries);
            var subjectParts = parts[0].Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
            var materialkey  = subjectParts[subjectParts.Length - 1];
            var roman        = string.Empty;

            for (int i = 0; i < subjectParts.Length - 1; i++)
            {
                var currencyKey = subjectParts[i];
                if (!currencyConverters.ContainsKey(currencyKey))
                {
                    return(Program.ERROR_MESSAGE);
                }
                roman += currencyConverters[currencyKey];
            }
            int multiplier = 0;

            try
            {
                // NOTE: would normally Inject this converter from IoC
                multiplier = new RomanConverter.Converter().GetIntFromRoman(roman);
            }
            catch (Exception)
            {
                return(Program.ERROR_MESSAGE);
            }
            var totalString = parts[1].Replace(" credits", "");
            int total       = 0;

            if (!int.TryParse(totalString, out total))
            {
                return(Program.ERROR_MESSAGE);
            }
            if (multiplier == 0 || total == 0)
            {
                return(Program.ERROR_MESSAGE);
            }
            var value = total / (float)multiplier;

            if (materials.ContainsKey(materialkey))
            {
                materials.Remove(materialkey);
            }
            materials.Add(materialkey, value);
            return(string.Empty);
        }
        public override string Process(string input, Dictionary <string, string> currencyConverters, Dictionary <string, float> materials)
        {
            var parts    = input.Split(new[] { " is " }, StringSplitOptions.RemoveEmptyEntries);
            var currency = parts[0];
            var roman    = parts[1];

            try
            {
                var val = new RomanConverter.Converter().GetIntFromRoman(roman);
                if (currencyConverters.ContainsKey(currency))
                {
                    currencyConverters.Remove(currency);
                }
                currencyConverters.Add(currency, roman);
                return(string.Empty);
            }
            catch (Exception)
            {
                return("I have no idea what you are talking about");
            }
        }