Example #1
0
 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;
        }
Example #3
0
        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());
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
 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);
 }