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 })); }
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); }
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); }
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)); }
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); }
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)); }
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); }