Untitled
unknown
plain_text
2 years ago
5.7 kB
5
Indexable
using Flee.PublicTypes; string ChangeRomanNumbersToArabic(string s) { var ans = ""; var i = 0; while (i < s.Length) { int j = 0; if (Char.IsLetter(s[i])) { j = i + 1; while (Char.IsLetter(s[j])) j++; int num; if (j > 0) { num = ToArabic(s.Substring(i, j - i)); ans += num.ToString(); i = j - 1; } } else { ans += s[i]; } i++; } return ans; } int ToArabic(string romanNumber) { Dictionary<char, int> RomanMap = new Dictionary<char, int>() { { 'I', 1 }, { 'V', 5 }, { 'X', 10 }, { 'L', 50 }, { 'C', 100 }, { 'D', 500 }, { 'M', 1000 } }; int number = 0; for (int i = 0; i < romanNumber.Length; i++) { if (i + 1 < romanNumber.Length && RomanMap[romanNumber[i]] < RomanMap[romanNumber[i + 1]]) { number -= RomanMap[romanNumber[i]]; } else { number += RomanMap[romanNumber[i]]; } } return number; } string SolveMath(string taskResponse) { var str = SolveFunctionInMath(taskResponse); var array = new List<string>(); var start = 0; var oneExp = ""; while (start < str.Length) { if (str[start] != '\"') { while (start < str.Length && str[start] != ' ') { oneExp += str[start]; start++; } array.Add(oneExp); oneExp = ""; start++; } else if (str[start] == '"') { start++; while (start < str.Length && str[start] != '"') { oneExp += str[start]; start++; } array.Add(oneExp); oneExp = ""; start += 2; } } var ans = ""; foreach (var expression in array) { ExpressionContext context = new ExpressionContext(); context.Imports.AddType(typeof(Math)); var newString = ChangeRomanNumbersToArabic(expression); newString = AddLInMathString(newString); IDynamicExpression eDynamic = context.CompileDynamic(newString); long result = Convert.ToInt64(eDynamic.Evaluate()); ans += "\""+ result+"\"" + " "; } return ans.Trim(); } string AddLInMathString(string s) { var newString = s[0].ToString(); for (int i = 1; i < s.Length; i++) { if (Char.IsDigit(s[i - 1]) && !Char.IsDigit(s[i])) newString += "L" + s[i]; else newString += s[i]; } return newString; } string SolveFunctionInMath(string s) { if (s.Contains("right") || s.Contains("left") || s.Contains("max") || s.Contains("min") || s.Contains("sum") || s.Contains("mul")) { var start = 0; var functions = new string[] { "right", "left", "mul", "max", "min", "right", "sum", "right", "left", "mul", "max", "min", "right", "sum", "right", "left", "mul", "max", "min", "right", "sum" }; foreach (var func in functions) { start = 0; while (s.IndexOf(func, start) != -1) { var ind = s.IndexOf(func, start); start = ind + func.Length + 1; var a = ""; var b = ""; while (Char.IsDigit(s[start])) { a += s[start]; start++; } if (s[start] == ')' && s[start + 1] == '(' && Char.IsDigit(s[start + 2])) { start += 2; while (Char.IsDigit(s[start])) { b += s[start]; start++; } if (func == "right") s = ReplaceFirst(s, "right(" + a + ")(" + b + ")", b); else if (func == "left") s = ReplaceFirst(s, "left(" + a + ")(" + b + ")", a); else if (func == "mul") s = ReplaceFirst(s, "mul(" + a + ")(" + b + ")", (int.Parse(a) * int.Parse(b)).ToString()); else if (func == "max") s = ReplaceFirst(s, "max(" + a + ")(" + b + ")", Math.Max(int.Parse(a), int.Parse(b)).ToString()); else if (func == "min") s = ReplaceFirst(s, "min(" + a + ")(" + b + ")", Math.Min(int.Parse(a), int.Parse(b)).ToString()); else if (func == "sum") s = ReplaceFirst(s, "sum(" + a + ")(" + b + ")", (int.Parse(a) + int.Parse(b)).ToString()); start = 0; } else { start = start - func.Length + 1; } } } } return s; } string ReplaceFirst(string text, string search, string replace) { int pos = text.IndexOf(search); if (pos < 0) { return text; } return text.Substring(0, pos) + replace + text.Substring(pos + search.Length); } var s = Console.ReadLine(); Console.WriteLine(); Console.WriteLine(SolveMath(s));
Editor is loading...
Leave a Comment