예제 #1
0
        /// <summary>
        /// 从Response中解析JudgeTask
        /// </summary>
        /// <param name="jsonStr"></param>
        /// <returns></returns>
        private JudgeContext[] ParseTask(string jsonStr)
        {
            JArray jArray = JArray.Parse(jsonStr);

            if (jArray.Count == 0)
            {
                return(new JudgeContext[0]);
            }

            JObject jObject = jArray[0] as JObject;

            if (!CheckTaskJObject(jObject))
            {
                return(new JudgeContext[0]);
            }

            SDNUOJTaskEntity taskEntity = jObject.ToObject <SDNUOJTaskEntity>();

            JudgeContext task = JudgeContextFactory.Create(
                int.Parse(taskEntity.SubmitId), int.Parse(taskEntity.ProblemId), taskEntity.DataVersion,
                taskEntity.Language.Substring(0, taskEntity.Language.Length - 2), taskEntity.SourceCode,
                taskEntity.Author, int.Parse(taskEntity.TimeLimit), int.Parse(taskEntity.MemoryLimit),
                false, false, bool.Parse(taskEntity.DbJudge));

            return(new[] { task });
        }
예제 #2
0
        private JudgeContext CreateJudgeContext(string submitId)
        {
            GetSolutionInfo(submitId, out string problemId, out string author, out string lang);
            GetProblemInfo(problemId, out int timeLimit, out int memoryLimit, out bool spj);
            string sourceCode = GetSolutionSourceCode(submitId);
            string dataMd5    = GetTestDataMd5(problemId);

            JudgeContext context = JudgeContextFactory.Create(
                submitId, problemId, dataMd5, lang, sourceCode,
                author, timeLimit, memoryLimit, false, spj);

            UpdateSolution(submitId, 3, 0, 0, 0.0);

            return(context);
        }
예제 #3
0
        /// <summary>
        /// 根据SubmitID获取JudgeTask
        /// </summary>
        private JudgeContext GetJudgeTask(string submitId)
        {
            GetSolutionInfo(submitId, out string problemId, out string author, out string lang);
            string sourceCode = GetSolution(submitId);

            GetProblemInfo(problemId, out int timeLimit, out int memoryLimit, out bool spj);
            string dateMd5 = GetTestDataMd5(problemId);

            JudgeContext task = JudgeContextFactory.Create(
                submitId, problemId, dateMd5, lang, sourceCode,
                author, timeLimit, memoryLimit, false, spj);

            Authenticator.Instance.UpdateSolution(submitId, 3, 0, 0, 0.0);

            return(task);
        }
예제 #4
0
        private JudgeContext[] CreateJudgeContexts(string jsonResp)
        {
            JArray taskJArray = JArray.Parse(jsonResp);

            if (taskJArray.Count == 0 || !(taskJArray[0] is JObject))
            {
                return(new JudgeContext[0]);
            }

            SdnuojJudgeTask task = taskJArray[0].ToObject <SdnuojJudgeTask>();

            if (task == null)
            {
                return(new JudgeContext[0]);
            }

            JudgeContext context = JudgeContextFactory.Create(
                task.SubmitId, task.ProblemId, task.DataVersion,
                task.Language.Substring(0, task.Language.Length - 2), task.SourceCode,
                task.Author, int.Parse(task.TimeLimit), int.Parse(task.MemoryLimit),
                false, false, bool.Parse(task.DbJudge));

            return(new[] { context });
        }
예제 #5
0
        /// <summary>
        /// 从Response中解析Task
        /// </summary>
        /// <param name="data">来自服务器的JObject任务数组</param>
        /// <returns>JudgeContexts</returns>
        private JudgeContext[] CreateTaskContexts(JToken data)
        {
            InnerJudgeTask[] innerJudgeTasks = data.ToObject <InnerJudgeTask[]>();

            if (innerJudgeTasks == null || innerJudgeTasks.Length == 0)
            {
                return(new JudgeContext[0]);
            }

            List <JudgeContext> judgeTasks = new List <JudgeContext>();

            foreach (var item in innerJudgeTasks)
            {
                JudgeContext task = JudgeContextFactory.Create(
                    item.SubmitId, item.ProblemId, item.DataVersion,
                    item.Language, item.SourceCode, item.Author,
                    item.TimeLimit, item.MemoryLimit,
                    item.JudgeAllCases, item.JudgeType);

                judgeTasks.Add(task);
            }

            return(judgeTasks.ToArray());
        }