public Pair <int, List <IAnswer> > ExtractAnswers(ICodebook codebook, DataTable answers, IEnumerable <ColumnInfo> journalInfoColumns) { var results = new List <IAnswer>(); var missingVars = new List <string>(); foreach (DataRow row in answers.Rows) { Answer answer = new Answer(); var variables = new List <IVariable>(); // add journalInfo foreach (var info in journalInfoColumns) { var col = info.Column; var columnType = info.Datatype; var columnWidth = info.ColumnWidth; if (answers.Columns[col] != null) { var value = row[col].ToString(); variables.Add(new CodeAnswer(new Code(0, 0, 0, 0, col, col, "", columnType, col, columnWidth), value)); } } // add answers foreach (var code in codebook.Codes) // read each column in row { if (answers.Columns[code.Name] != null) { var value = row[code.Name].ToString(); IVariable codeAnswer = new CodeAnswer(code, value); variables.Add(codeAnswer); } else { var miss = "Missing var: {0} - survey: {1} row,col,sur,qId: {2},{3},{1},{4} Q:{5}".F(code.Name, codebook.Id, code.Row, code.Column, code.QuestionId, code.QuestionNumber); if (!missingVars.Contains(miss)) { missingVars.Add(miss); } } } answer.Variables = variables; answer.Id = codebook.Id; answer.AnswerMetadata = AnswerMetadata.GetJournalInfo(row); // Key to group by (pid, follow_up) answer.SetKey(answer.AnswerMetadata.Pid, answer.AnswerMetadata.FollowUp); answer.Projekt = answer.AnswerMetadata.Projekt; results.Add(answer); } foreach (var miss in missingVars) { Console.Out.WriteLine(miss); } results = results.OrderBy(r => r.Key).ToList(); return(new Pair <int, List <IAnswer> >(codebook.Id, results)); }
private void GedCodeResult(Question _question, CodeAnswer codeAnswer, ref uint count) { var question = _question as CodeQuestion; //.Include(a => a.Question) //.ThenInclude(q => (q as CodeQuestion).Code) //.Include(a => a.Code).Include(a => a.Option) _context.Entry(question).Reference(x => x.Code).Load(); _context.Entry(codeAnswer).Reference(x => x.Code).Load(); var userCode = codeAnswer.Code?.Value == null ? "" : codeAnswer.Code.Value; var creatorCode = question.Code.Value; var creatorArgs = question.Code.Args; var userOutput = Compile(userCode, creatorArgs); var creatorOutput = Compile(creatorCode, creatorArgs); var code = _context.Codes.SingleOrDefault(c => c.Answer == codeAnswer); if (code == null) { code = (_context.Add(new Code() { Answer = codeAnswer, Value = userCode })).Entity; codeAnswer.Code = code; _context.Update(codeAnswer); } code.Args = creatorArgs; code.Output = userOutput; _context.Codes.Update(code); if (userCode != null) { if (userOutput == creatorOutput) { codeAnswer.Score = codeAnswer.Question.Score; count++; codeAnswer.Result = AnswerResult.Right; } else { codeAnswer.Result = AnswerResult.Wrong; codeAnswer.Score = 0; } } else { codeAnswer.Result = null; codeAnswer.Score = 0; } _context.Update(codeAnswer); }
private void CheckLetter() { foreach (var letter in CodeAnswer) { var letterLow = Char.ToLower(letter); if (letterLow == Char.ToLower(PotentialLetter)) { MessageBox.Show("Ви вже вгадали цю літеру...", "Атата"); return; } } var arrayOfObject = _answerCheckManager.CheckLetter(PotentialLetter, ListOfTasks[_questionNumber].Answer, _codeAnswer); var coutOfPoint = Convert.ToInt32(arrayOfObject[1]); CodeAnswer = Convert.ToString(arrayOfObject[0]); if (CodeAnswer.IndexOf('*') == -1) { MessageBox.Show("Вітаю, ви вгадали слово", "Вітаю"); UserScore = 100 + coutOfPoint; ListOfTasks[_questionNumber].Asked = true; SetQuestion(); } if (coutOfPoint == 0) { UserScore -= 1; MessageBox.Show("Нажаль, ви помилились :(", "Оу(("); } else { UserScore += coutOfPoint; MessageBox.Show("Вітаю, ви вгадали букву", "Вітаю"); } PotentialLetter = ' '; }
public async Task <IActionResult> Start(int testResultId, ErrorViewModel model) { var user = await _userManager.GetUserAsync(HttpContext.User); var testResult = await _context.TestResults .Include(tr => tr.Test) .ThenInclude(t => t.Questions) .SingleAsync(t => t.Id == testResultId); if (testResult == null) { return(NotFound()); } if (!testResult.Test.IsEnabled) { return(Forbid()); } var questions = testResult.Test.Questions.Where(q => !q.IsDeleted).ToList(); if (questions.Count() == 0) { return(NotFound()); } if (_context.Answers.Any(a => a.TestResult == testResult)) { return(RedirectToAction("Answer", "Answer", new { testResultId = testResult.Id, answerId = _context.Answers.Where(a => a.TestResult == testResult) .SingleOrDefault(a => a.Order == 1).Id })); } var answers = new List <Answer>(); Answer answer = null; if (testResult.Test.Count != 0 && testResult.Test.Count < questions.Count && testResult.Test.Shuffled) { var order = new ushort[testResult.Test.Count]; for (var i = 0; i < order.Length; i++) { order[i] = (ushort)(i + 1); } if (testResult.Test.Shuffled) { Shuffle(order); } var j = 0; Shuffle(questions); for (var k = 0; k < order.Length; k++) { var question = questions[k]; switch (question.QuestionType) { case "SingleChoiceQuestion": answer = new SingleChoiceAnswer(); break; case "MultiChoiceQuestion": answer = new MultiChoiceAnswer(); break; case "TextQuestion": answer = new TextAnswer(); break; case "DragAndDropQuestion": answer = new DragAndDropAnswer(); break; case "CodeQuestion": answer = new CodeAnswer(); break; } if (answer == null) { throw new NullReferenceException(); } answer.Result = null; answer.Question = question; answer.Score = 0; answer.TestResult = testResult; answer.Order = order[j++]; await _context.Answers.AddAsync(answer); answers.Add(answer); await _context.SaveChangesAsync(); } } else { var order = new ushort[questions.Count()]; for (var i = 0; i < order.Length; i++) { order[i] = (ushort)(i + 1); } if (testResult.Test.Shuffled) { Shuffle(order); } var j = 0; foreach (var question in questions) { switch (question.QuestionType) { case "SingleChoiceQuestion": answer = new SingleChoiceAnswer(); break; case "MultiChoiceQuestion": answer = new MultiChoiceAnswer(); break; case "TextQuestion": answer = new TextAnswer(); break; case "DragAndDropQuestion": answer = new DragAndDropAnswer(); break; case "CodeQuestion": answer = new CodeAnswer(); break; } if (answer == null) { throw new NullReferenceException(); } answer.Question = question; answer.Score = 0; answer.TestResult = testResult; answer.Order = order[j++]; await _context.Answers.AddAsync(answer); answers.Add(answer); await _context.SaveChangesAsync(); } } testResult.StartedOn = DateTime.UtcNow; _context.TestResults.Update(testResult); await _context.SaveChangesAsync(); // TODO: redirect to first answer (question) //throw new NotImplementedException(); return(RedirectToAction("Answer", "Answer", new { testResultId = testResult.Id, answerId = answers.SingleOrDefault(a => a.Order == 1).Id })); }
private void StartTest(User user, TestResult testResult, Test test) { var answers = new List <Answer>(); Answer answer = null; var questions = testResult.Test.Questions.Where(q => !q.IsDeleted).ToList(); testResult.TotalQuestions = (uint)questions.Count; if (test.Count != 0 && test.Count < test.Questions.Count && testResult.Test.Shuffled) { var order = new ushort[testResult.Test.Count]; for (var i = 0; i < order.Length; i++) { order[i] = (ushort)(i + 1); } var j = 0; for (var k = 0; k < order.Length; k++) { var question = questions[k]; switch (question.QuestionType) { case "SingleChoiceQuestion": answer = new SingleChoiceAnswer(); break; case "MultiChoiceQuestion": answer = new MultiChoiceAnswer(); break; case "TextQuestion": answer = new TextAnswer(); break; case "DragAndDropQuestion": answer = new DragAndDropAnswer(); break; case "CodeQuestion": answer = new CodeAnswer(); break; } if (answer == null) { throw new NullReferenceException(); } answer.Result = null; answer.Question = question; answer.Score = 0; answer.TestResult = testResult; answer.Order = order[j++]; _context.Answers.Add(answer); answers.Add(answer); _context.SaveChanges(); } } else { var order = new ushort[questions.Count()]; for (var i = 0; i < order.Length; i++) { order[i] = (ushort)(i + 1); } var j = 0; foreach (var question in questions) { switch (question.QuestionType) { case "SingleChoiceQuestion": answer = new SingleChoiceAnswer(); break; case "MultiChoiceQuestion": answer = new MultiChoiceAnswer(); break; case "TextQuestion": answer = new TextAnswer(); break; case "DragAndDropQuestion": answer = new DragAndDropAnswer(); break; case "CodeQuestion": answer = new CodeAnswer(); break; } if (answer == null) { throw new NullReferenceException(); } answer.Question = question; answer.Score = 0; answer.TestResult = testResult; answer.Order = order[j++]; _context.Answers.Add(answer); answers.Add(answer); _context.SaveChanges(); } } testResult.StartedOn = DateTime.UtcNow; _context.TestResults.Update(testResult); _context.SaveChanges(); }