public void GenerateSolves() { Solves.Clear(); for (int col = 0; col < Width; col++) { Visit(true, 0, col, 0, new Sequence()); } }
private async Task DeleteSolveAsync(SolveViewModel solveViewModel) { IsBusy = true; var repositoryResponse = await _solvesRepository.DeleteSolveAsync(solveViewModel.Model).ConfigureAwait(false); if (repositoryResponse.IsSuccesfull is false) { _snackbarViewModel.EnqueueSchedule("Podczas usuwania ułożenia wysątpił błąd."); IsBusy = false; return; } Solves.Remove(solveViewModel); IsBusy = false; }
public Sequence Solve() { // It's already solved if there's nothing to solve for if (Sequences.Count == 0) { return(null); } GenerateSolves(); CompareSolves(); return(Solves .OrderByDescending(s => s.Value) .ThenByDescending(s => s.SolvedValues.Count) .ThenByDescending(s => s.Used) .First()); }
public void Visit(bool visitRow, int row, int col, int depth, Sequence path) { var cell = Matrix[row][col]; cell.Visited = true; path.Cells.Add(cell); // If we're visiting a cell at our buffer depth, stop processing and this 'solve' if (depth == BufferSize - 1) { Solves.Add(new Sequence(path)); goto done; } // Recurse down into the solving sequence int limit = (visitRow ? Height : Width); for (int i = 0; i < limit; i++) { if (visitRow) { // Don't visit previously visited cells if (Matrix[i][col].Visited) { continue; } Visit(false, i, col, depth + 1, path); } else { // Don't visit previously visited cells if (Matrix[row][i].Visited) { continue; } Visit(true, row, i, depth + 1, path); } } done: // Reset our visit after we're done for the next iteration cell.Visited = false; // Also remove us from the list (pass by reference) path.Cells.RemoveAt(path.Cells.Count - 1); }
public ActionResult SolvingTask(int id, string Answer) { SolveTaskModel Model = new SolveTaskModel(); ApplicationDbContext DB = new ApplicationDbContext(); Model.Task = DB.Tasks.First(c => c.UserTaskID == id); Model.Answers = DB.Answers.Where(c => c.TaskID == id).AsEnumerable(); Model.Tags = DB.Tags.Where(c => c.TaskID == id).AsEnumerable(); Model.UserName = DB.Users.First(c => c.Id == Model.Task.UserID).UserName; Model.Comments = DB.Comments.Where(c => c.TaskID == id).AsEnumerable(); string CurrentUserID = DB.Users.First(c => c.UserName == User.Identity.Name).Id; Model.Rating = 0; if (DB.Ratings.Any(c => c.UserID == CurrentUserID && c.TaskID == id)==true) Model.Rating = DB.Ratings.First(c => c.UserID == CurrentUserID && c.TaskID == id).RatingValue; Model.Solved = -1; if (DB.Tasks.Any(c => c.UserID == CurrentUserID && c.UserTaskID == id) == true) Model.Solved = -2; else { if (DB.Solves.Any(c => c.UserID == CurrentUserID && c.TaskID == id) == true) { Model.Solved = -3; } else { if (Answer != "" && Answer != null) { if (DB.Answers.Where(c => (c.TaskID == id) && (c.AnswerText == Answer)).ToList().Count != 0) { Model.Solved = 1; Solves NewSolve = new Solves(); NewSolve.TaskID = id; NewSolve.UserID = CurrentUserID; DB.Solves.Add(NewSolve); DB.Tasks.First(c => c.UserTaskID == id).SolveCount++; DB.Entry(NewSolve).State = System.Data.Entity.EntityState.Added; DB.SaveChanges(); } else Model.Solved = 0; } } } return View(Model); }
public string CompanionSolvingTask(string Answer, int id, string UserID) { ApplicationDbContext DB = new ApplicationDbContext(); if (DB.Answers.Any(c => c.AnswerText == Answer && c.TaskID == id) == true) { if (Answer != "" && Answer != null) { if (DB.Answers.Where(c => (c.TaskID == id) && (c.AnswerText == Answer)).ToList().Count != 0) { Solves NewSolve = new Solves(); NewSolve.TaskID = id; NewSolve.UserID = UserID; DB.Solves.Add(NewSolve); DB.Tasks.First(c => c.UserTaskID == id).SolveCount++; DB.Entry(NewSolve).State = System.Data.Entity.EntityState.Added; DB.SaveChanges(); } } return "success"; } else return "fail"; }
private async void UpdateIndexesAsync(object?sender, EventArgs e) { var tasks = Solves.Select(solve => Task.Run(() => solve.Index = $"{Solves.Count - Solves.IndexOf(solve)}.")); await Task.WhenAll(tasks).ConfigureAwait(false); }