private void setHintAndBlank(ReviewViewModel model) { string[] words = Regex.Split(model.ViewCard.Question, @"\s+"); string longestWord = words.OrderByDescending(w => w.Length).ToArray()[0]; var sbHint = new StringBuilder(); var sbBlank = new StringBuilder(); var rand = new Random(); char? blankAns = null; foreach (var w in words) { var hintAry = new char[w.Length]; var blankAry = Regex.Replace(w, "[a-zA-Z]", "*").ToCharArray(); Array.Copy(sourceArray: blankAry, destinationArray: hintAry, length: blankAry.Length); hintAry[0] = w[0]; hintAry[w.Length - 1] = w[w.Length - 1]; sbHint.Append(new string(hintAry)).Append(" "); if (blankAns == null && w == longestWord) { var min = w.Length < 3 ? 0 : 1; var max = w.Length < 3 ? w.Length - 1 : w.Length - 2; var r = rand.Next(min, max); // [min, max) blankAns = w[r]; blankAry[r] = '_'; } sbBlank.Append(new string(blankAry)).Append(" "); } model.Hint = sbHint.ToString().Trim(); model.Blank = sbBlank.ToString().Trim(); model.BlankAnswer = blankAns; }
// // GET: /Review/ public ActionResult Index(int page = 0, string reviewMode = "Fast") { #if DEBUG DateTime dt0 = DateTime.Now.AddMilliseconds(-6), dt1 = DateTime.Now.AddMilliseconds(-12), dt2 = DateTime.Now.AddSeconds(-3), dt3 = DateTime.Now.AddSeconds(-7), dt4 = DateTime.Now.AddSeconds(-14); #else DateTime dt0 = DateTime.Now.AddHours(-6), dt1 = DateTime.Now.AddHours(-12), dt2 = DateTime.Now.AddDays(-3), dt3 = DateTime.Now.AddDays(-7), dt4 = DateTime.Now.AddDays(-14); #endif int userId = (int)(Session["UserId"] ?? this.GetUserId()); ViewBag.ReviewModeList = createReviewModeList(); var cards = repository.Cards.Where(c => c.UserId == userId); cards = cards.Where(c => (c.ReviewLevel == 0 && c.ReviewedAt < dt0) || (c.ReviewLevel == 1 && c.ReviewedAt < dt1) || (c.ReviewLevel == 2 && c.ReviewedAt < dt2) || (c.ReviewLevel == 3 && c.ReviewedAt < dt3) || (c.ReviewLevel == 4 && c.ReviewedAt < dt4) ); cards = cards.OrderBy(c => c.ReviewLevel).ThenBy(c => c.ReviewedAt); var viewModel = new ReviewViewModel(itemsPerPage: 1, pageSkip: 5) { Cards = cards, Page = page, QuestionedAt = DateTime.Now, ReviewMode = reviewMode }; if (page > viewModel.LastPage) { viewModel.Page = viewModel.LastPage; } viewModel.ViewCard = viewModel.GetCardsInPage().SingleOrDefault(); if (reviewMode == "Typing" || reviewMode == "Blank") { setHintAndBlank(viewModel); } return View(viewModel); }