Esempio n. 1
0
    public override void Begin()
    {
        base.Begin();

        // Pick number of pieces of code
        progress    = 0;
        MaxProgress = numCodeToReview;

        // Generate all the code we will show
        codeToReview = new List <int[]>();
        codeValid    = new List <bool[]>();
        codeApproved = new bool[MaxProgress];
        currentCode  = 0;

        for (int i = 0; i < MaxProgress; i++)
        {
            // Choose whether this should be correct
            bool correct = Random.Range(0, 10) > 5;

            // Pick code length
            int codeLength = Random.Range(minCodeLength, maxCodeLength);

            // Generate the code
            int[] code = correct ? ProgrammingTask.GetSnippetOrder(codeLength, codeSnippets.Length) : ProgrammingTask.GetRandomSnippets(codeLength, codeSnippets.Length);
            codeToReview.Add(code);

            // Decide which pieces of code are correct
            bool[] codeCorrect = new bool[codeLength];
            for (int j = 0; j < code.Length; j++)
            {
                // If it is supposed to be correct, just set it to true
                if (correct)
                {
                    codeCorrect[j] = true;
                }
                else
                {
                    // For first 2 and last, they should be a fixed thing
                    if (j == 0 && code[j] != 0)
                    {
                        codeCorrect[j] = false;
                    }
                    else if ((j == 1 || j == code.Length - 1) && code[j] != 1)
                    {
                        codeCorrect[j] = false;
                    }
                    else
                    {
                        codeCorrect[j] = Random.Range(0, 10) > 5;
                    }
                }
            }

            codeValid.Add(codeCorrect);
            codeApproved[i] = false;
        }

        // Place the first piece of code
        PlaceCode(codeToReview[0], codeValid[0]);
    }
        public async Task <IActionResult> Create(ProgrammingTaskCreationModel model)
        {
            const string actionViewPath = ViewsDirectoryPath + nameof(Create) + ".cshtml";

            if (!ModelState.IsValid)
            {
                return(View(actionViewPath, model));
            }

            var programmingTask = new ProgrammingTask
            {
                Title       = model.Title,
                Description = _localizer["Перейти на темну сторону сили!"],

                VisibleInFreeMode        = model.VisibleInFreeMode,
                VisibleInCompetitionMode = model.VisibleInCompetitionMode,

                Difficulty = 0,

                Created      = DateTime.UtcNow,
                LastModified = DateTime.UtcNow
            };

            await _databaseContext.ProgrammingTasks.AddAsync(programmingTask);

            await _databaseContext.SaveChangesAsync();

            return(RedirectToAction(nameof(EditDetails), new { programmingTaskId = programmingTask.Id }));
        }
Esempio n. 3
0
 protected override async Task OnInitializedAsync()
 {
     int.TryParse(Id, out int id);
     if (id != 0)
     {
         Task = await TaskService.GetProgrammingTask(id);
     }
 }
        public async Task <ProgrammingTask> CreateProgrammingTask(ProgrammingTask task)
        {
            var result = await dbContext.ProgrammingTasks.AddAsync(task);

            await dbContext.SaveChangesAsync();

            return(result.Entity);
        }
 public async Task <ProgrammingTask> CreateProgrammingTask(ProgrammingTask task)
 {
     task.CreatedAt = DateTime.Now;
     if (task.Id == 0)
     {
         return(await taskRepository.CreateProgrammingTask(task));
     }
     return(null);
 }
        public async Task <ProgrammingTask> UpdateProgrammingTask(int id, ProgrammingTask task)
        {
            var taskToUpdate = await GetProgrammingTask(id);

            if (taskToUpdate != null)
            {
                mapper.Map <ProgrammingTask, ProgrammingTask>(task, taskToUpdate);
                taskToUpdate.UpdatedAt = DateTime.Now;
                return(await taskRepository.UpdateProgrammingTask(taskToUpdate));
            }
            return(null);
        }
Esempio n. 7
0
        public async Task <ProgrammingTask> GetById(IIdentifier identifier)
        {
            ProgrammingTask task = null;

            var fileName = Path.Combine(_directoryPath, identifier.StringPresentation + ".pt");

            if (File.Exists(fileName))
            {
                task = await GetTaskFromFile(fileName);
            }

            return(task);
        }
Esempio n. 8
0
        public async Task <int> GetScore(string code, ProgrammingTask task)
        {
            var response = await RunCodeAsync(code, task.InputParams);

            if (!response.IsSuccessStatusCode)
            {
                return(0);
            }

            var responseContent = await response.Content.ReadAsStringAsync();

            var sucessfullResponse = JsonConvert.DeserializeObject <SuccesfullResponse>(responseContent);

            return(CalculateScore(sucessfullResponse, task.ExpectedOutput));
        }
Esempio n. 9
0
        public async Task <ProgrammingTask> Create(ProgrammingTask task)
        {
            var taskId = Guid.NewGuid();

            task.Identifier = new GuidIdentifier(taskId);
            var serialized = _serializer.Serialize(task);

            var newFilePath = Path.Combine(_directoryPath, $"{taskId}.pt");

            using (var writer = new StreamWriter(File.Create(newFilePath)))
            {
                await writer.WriteAsync(serialized);
            }

            return(task);
        }
Esempio n. 10
0
        private async Task <ProgrammingTask> GetTaskFromFile(string fileName)
        {
            ProgrammingTask progTask = null;

            using (var streamReader = new StreamReader(File.Open(fileName, FileMode.Open, FileAccess.Read)))
            {
                var fileContentsTask = streamReader.ReadToEndAsync();
                var pureFileName     = Path.GetFileNameWithoutExtension(fileName);
                var id = new GuidIdentifier(new Guid(pureFileName));

                var fileContents = await fileContentsTask;
                progTask            = _serializer.Deserialize(fileContents);
                progTask.Identifier = id;
            }

            return(progTask);
        }
        public async Task <ActionResult <ProgrammingTask> > CreateProgrammingTask(ProgrammingTask task)
        {
            try
            {
                if (task == null)
                {
                    return(BadRequest("Task cannot be null"));
                }
                var createdTask = await taskService.CreateProgrammingTask(task);

                if (createdTask != null)
                {
                    return(CreatedAtAction(nameof(CreateProgrammingTask), new { taskId = createdTask.Id }, createdTask));
                }
                return(BadRequest("Couldn't save the employee becuse it already had an ID."));
            }
            catch (Exception)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, "Error retrieving data from database"));
            }
        }
        public async Task <ActionResult <ProgrammingTask> > UpdateProgrammingTask(int id, ProgrammingTask task)
        {
            try
            {
                if (id != task.Id)
                {
                    BadRequest("Task ID mismatch.");
                }
                var updatedUser = await taskService.UpdateProgrammingTask(id, task);

                if (updatedUser == null)
                {
                    NotFound($"Task with ID {id} is not in the database");
                }
                return(updatedUser);
            }
            catch (Exception)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, "Error retrieving data from database"));
            }
        }
        public async Task <ProgrammingTask> UpdateProgrammingTask(ProgrammingTask task)
        {
            await dbContext.SaveChangesAsync();

            return(task);
        }
 public async Task <ProgrammingTask> CreateProgrammingTask(ProgrammingTask task)
 {
     return(await httpClient.PostJsonAsync <ProgrammingTask>("api/tasks", task));
 }
 public async Task <ProgrammingTask> UpdateProgrammingTask(int id, ProgrammingTask task)
 {
     return(await httpClient.PutJsonAsync <ProgrammingTask>($"api/tasks/{id}", task));
 }
Esempio n. 16
0
        public async Task <ProgTaskRunResult> Run(ProgrammingTask task, string userCode)
        {
            // Создание временного файла с кодом
            string tempSourceFileName = _tempFileProvider.CreateNewTempFile();

            var result = new ProgTaskRunResult()
            {
            };

            try
            {
                _fileWriter.Write(userCode, tempSourceFileName);

                foreach (var inpParam in task.ParamsAndResults)
                {
                    PrepareForRunning(tempSourceFileName);
                    var startInfo = GetProcessStartInfo();

                    Process = _processFactory.Start(startInfo);

                    _inpWriter.Configure(this);
                    _outReader.Configure(this);

                    foreach (var prm in inpParam.Params)
                    {
                        _inpWriter.Write(prm);
                        _inpWriter.Write(Environment.NewLine);
                    }

                    string results = null;

                    await Task.Run(() =>
                    {
                        results = _outReader.Read();
                        Process.WaitForExit();
                    });

                    if (Process.ExitCode != 0)
                    {
                        result.Results.Add(new RunnedTestResult {
                            Results = null, ParamsAndResults = inpParam, IsError = true, ErrorType = RunnedTaskErrorType.RuntimeException
                        });
                    }
                    else
                    {
                        result.Results.Add(new RunnedTestResult {
                            Results = results, ParamsAndResults = inpParam
                        });
                    }

                    CleanupAfterRunning();
                }
            }
            catch (CompilationFailedException)
            {
                result.SetRunError(TaskRunErrorType.CompilationFailed);
            }
            finally
            {
                _tempFileProvider.DeleteCurrentTempFile();
            }

            return(result);
        }