public ActionResult Answer(CheckCodeUnambiguityModel model) { List <int> codewordLengths = new List <int>(); foreach (var codeword in model.InputData.Code.ElementaryCodes.Values) { codewordLengths.Add(codeword.Length); } int correctAnswer = 0; string comment = ""; if (CodeUnambiguityChecker.CheckMcmillanInequality(codewordLengths, model.InputData.CodeAlphabet.Length)) { if (CodeUnambiguityChecker.CheckPrefixProperty(model.InputData.Code)) { comment = "Код обладает свойством взаимной однозначности, " + "так как он обладает свойством префикса."; } else if (CodeUnambiguityChecker.CheckMarkovTheorem(model.InputData.Code)) { comment = "Код обладает свойством взаимной однозначности, " + "так как он соответствует критерию Маркова."; } else { correctAnswer = 1; comment = "Код не обладает свойством взаимной однозначности, " + "так как он не соответствует критерию Маркова."; } } else { correctAnswer = 1; comment = "Код не обладает свойством взаимной однозначности, " + "так как для него не выполняется неравенство Макмиллана."; } string checkMessage = "Верно. "; if (model.SelectedAnswer != correctAnswer) { checkMessage = "Неверно. "; } model.Comment = checkMessage + comment; return(View(model)); }
public ActionResult Upload(HttpPostedFileBase upload) { if (upload != null) { string format = Path.GetExtension(upload.FileName); if (format == ".txt") { try { using (var reader = new StreamReader(upload.InputStream)) { string alphabet = reader.ReadLine(); if (alphabet != null) { for (int i = 0; i < alphabet.Length - 1; i++) { for (int j = i + 1; j < alphabet.Length; j++) { if (alphabet[j] == alphabet[i]) { ViewBag.ErrorMessage = "Все символы алфавита должны быть различны!"; return(View("Index")); } } } Dictionary <char, string> codewords = new Dictionary <char, string>(); char[] separator = { ' ' }; while (!reader.EndOfStream) { string[] symbolArgs = reader.ReadLine().Split(separator, StringSplitOptions.RemoveEmptyEntries); if (symbolArgs.Length != 2) { ViewBag.ErrorMessage = "Пожалуйста, проверьте правильность введенных данных!"; return(View("Index")); } char symbol = Convert.ToChar(symbolArgs[0]); string codeword = symbolArgs[1]; for (int i = 0; i < codeword.Length; i++) { if (alphabet.IndexOf(codeword[i]) == -1) { ViewBag.ErrorMessage = "Кодовые слова должны использовать только символы алфавита!"; return(View("Index")); } } codewords.Add(symbol, codeword); } if (codewords.Count == 0) { ViewBag.ErrorMessage = "Пожалуйста, введите в файл данные для построения кода!"; } else { ViewBag.ErrorMessage = ""; Code code = new Code(codewords); List <int> codewordLengths = new List <int>(); foreach (var codeword in codewords.Values) { codewordLengths.Add(codeword.Length); } if (CodeUnambiguityChecker.CheckMcmillanInequality(codewordLengths, alphabet.Length)) { if (CodeUnambiguityChecker.CheckPrefixProperty(code)) { ViewBag.Answer = "Код обладает свойством взаимной однозначности, " + "так как он обладает свойством префикса."; } else if (CodeUnambiguityChecker.CheckMarkovTheorem(code)) { ViewBag.Answer = "Код обладает свойством взаимной однозначности, " + "так как он соответствует критерию Маркова."; } else { ViewBag.Answer = "Код не обладает свойством взаимной однозначности, " + "так как он не соответствует критерию Маркова."; } } else { ViewBag.Answer = "Код не обладает свойством взаимной однозначности, " + "так как для него не выполняется неравенство Макмиллана."; } } } else { ViewBag.ErrorMessage = "Пожалуйста, введите в файл данные для построения кода!"; } } } catch (FormatException) { ViewBag.ErrorMessage = "Пожалуйста, проверьте правильность введенных данных!"; } } else { ViewBag.ErrorMessage = "Пожалуйста, загрузите файл в формате .txt!"; } } else { ViewBag.ErrorMessage = "Пожалуйста, загрузите файл!"; } return(View("Index")); }