Exemple #1
0
        public async Task <IActionResult> Submission(int cid, int sid,
                                                     [FromServices] ISubmissionStore submissions)
        {
            int teamid = Team.TeamId;

            var models = await submissions.ListWithJudgingAsync(
                predicate : s => s.ContestId == cid && s.SubmissionId == sid,
                selector : (s, j) => new SubmissionViewModel
            {
                SubmissionId   = s.SubmissionId,
                Grade          = j.TotalScore ?? 0,
                Language       = Languages[s.Language],
                Time           = s.Time,
                Verdict        = j.Status,
                Problem        = Problems.Find(s.ProblemId),
                CompilerOutput = j.CompileError,
                SourceCode     = s.SourceCode,
            });

            var model = models.SingleOrDefault();

            if (model == null)
            {
                return(NotFound());
            }
            return(Window(model));
        }
Exemple #2
0
        public async Task <IActionResult> Home(int cid,
                                               [FromServices] ISubmissionStore submits,
                                               [FromServices] IClarificationStore clars)
        {
            int teamid = Team.TeamId;
            var board  = await FindScoreboardAsync(teamid);

            ViewBag.Clarifications = await clars.ListAsync(cid,
                                                           c => (c.Sender == null && c.Recipient == null) ||
                                                           c.Recipient == teamid || c.Sender == teamid);

            ViewBag.Submissions =
                await submits.ListWithJudgingAsync(
                    predicate : s => s.ContestId == cid && s.Author == teamid,
                    selector : (s, j) => new SubmissionViewModel
            {
                Grade        = j.TotalScore ?? 0,
                Language     = Languages[s.Language],
                SubmissionId = s.SubmissionId,
                Time         = s.Time,
                Verdict      = j.Status,
                Problem      = Problems.Find(s.ProblemId),
            });

            return(View(board));
        }
Exemple #3
0
        public async Task <IActionResult> ProblemView(string prob,
                                                      [FromServices] ISubmissionStore submissions,
                                                      [FromServices] IProblemStore problems)
        {
            if (TooEarly && !ViewData.ContainsKey("IsJury"))
            {
                return(NotFound());
            }
            var problem = Problems.Find(prob);

            if (problem == null)
            {
                return(NotFound());
            }
            ViewBag.CurrentProblem = problem;

            var fileInfo = problems.GetFile(problem, "view.html");
            var view     = await fileInfo.ReadAsync();

            if (string.IsNullOrEmpty(view))
            {
                return(NotFound());
            }
            ViewData["Content"] = view;

            int pid = problem.ProblemId;
            int tid = Team?.TeamId ?? -1000;
            int cid = Contest.ContestId;

            var model = await submissions.ListWithJudgingAsync(
                s => s.ProblemId == pid && s.Author == tid && s.ContestId == cid);

            return(View(model));
        }
Exemple #4
0
        public async Task <IActionResult> Detail(string langid,
                                                 [FromServices] ISubmissionStore submissions)
        {
            var lang = await Store.FindAsync(langid);

            if (lang is null)
            {
                return(NotFound());
            }

            ViewBag.Language    = lang;
            ViewBag.Submissions = await submissions
                                  .ListWithJudgingAsync(s => s.Language == langid, limits : 100);

            return(View());
        }
Exemple #5
0
        public async Task <IActionResult> Submission(int cid, int sid,
                                                     [FromServices] ISubmissionStore submissions,
                                                     [FromServices] IJudgingStore judgings)
        {
            if (Team == null)
            {
                return(Forbid());
            }

            var models = await submissions.ListWithJudgingAsync(
                predicate : s => s.SubmissionId == sid && s.ContestId == cid,
                selector : (s, j) => new SubmissionViewModel
            {
                SubmissionId   = s.SubmissionId,
                Verdict        = j.Status,
                Time           = s.Time,
                Problem        = Problems.Find(s.ProblemId),
                CompilerOutput = j.CompileError,
                Language       = Languages[s.Language],
                SourceCode     = s.SourceCode,
                Grade          = j.TotalScore ?? 0,
                TeamId         = s.Author,
                JudgingId      = j.JudgingId,
                ExecuteMemory  = j.ExecuteMemory,
                ExecuteTime    = j.ExecuteTime,
            });

            var model = models.SingleOrDefault();

            if (model == null)
            {
                return(NotFound());
            }
            Dictionary <int, (int ac, int tot)> substat = ViewBag.TeamStatistics;

            model.TeamName = (await FindTeamByIdAsync(model.TeamId)).TeamName;

            if (model.TeamId != Team.TeamId)
            {
                if (Contest.StatusAvaliable == 2)
                {
                    if (substat.GetValueOrDefault(model.Problem.ProblemId).ac == 0)
                    {
                        return(Forbid());
                    }
                }
                else if (Contest.StatusAvaliable == 0)
                {
                    return(Forbid());
                }
            }

            var tcs = await judgings.GetDetailsAsync(model.Problem.ProblemId, model.JudgingId);

            if (!model.Problem.Shared)
            {
                tcs = tcs.Where(t => !t.Item2.IsSecret);
            }
            ViewBag.Runs = tcs;

            return(Window(model));
        }