Register
Submit a solution
The challenge is finished.

Challenge Overview

Welcome to Topcoder - Marathon Match New System Improvements.
 

Contest Details

   

Project Background

 
  • Topcoder is updating its API and one of the APIs being updated is the Submission API.
  • One of the scenarios that we are taking care of here is that when a user uploads a submission to Topcoder for a Marathon Match challenge.
  • An app (not relevant for this contest) creates a message that contains details about this submission and sends it to an Apache Kafka instance.
 

Technology Stack

 
  • Nodejs
  • Kafka
  • Java, C#, and C++
 

Individual Requirements

 
1. Add to the system the ability to accept custom Gradle build script for Java submission to allow external dependencies. One possible solution is to make the Gradle template project expect another subproject called submission. Inside this subproject and add an empty Gradle file that can be overwritten by a file coming from the member submission zip file.

2. Ability to have a formula as a part of Verification object in DynamoDB. This formula will be used to calculate the score of the submission for each input. A library like https://silentmatt.com/javascript-expression-evaluator/ or http://mathjs.org/examples/expressions.js.html can be used to implement this feature. Eventually, the verification script will be fixed and only the formula to calculate the score will be configurable. The formula will take into account the submission output and optionally the provided output, the max memory and the execution time.

3. The final score for each submission should be calculated. This will be the average of the score for all inputs.

4. After the final score is calculated, the Submission API must be called to create the review record. The submission endpoint to be used to create review is "POST http://api.topcoder-dev.com/v5/reviews". The swagger can be found here https://tc-submission-api-dev.herokuapp.com/docs/#/Reviews/createReview.

The endpoint is protected by JWT token. See example here https://github.com/topcoder-platform/legacy-sub-processor/blob/develop/src/services/NewSubmissionService.js on how to post to submission endpoint.

5. Existing Marathon Match scoring system has two input types - Normal and System Tests. The new system must also support that. You must:

a) Add to the Verification object two new properties called systemInputs and systemOutputs. They will hold the system test inputs and optional outputs.

b) Detect which input type should be used by listening to Kafka messages. If coming from Submission API (current implementation) use normal test inputs if coming from Auto Pilot use system test inputs. The AutoPilot Kafka message is detailed below:
  • topic: notifications.autopilot.events
  • originator: auto_pilot
  • payload (phaseTypeName = "Review", state = "START", projectId = "<challengeId>"). Example:
{
  "date": "2018-11-07T06:01:47Z",
  "projectId": 30073445,
  "phaseId": 974537,
  "phaseTypeName": "Review",
  "state": "START",
  "operator": "22841596"
}

6. Existing code: http://github.com/topcoder-platform/mm-processor, branch: develop.
 

Deployment Guide and Validation Documentation


You will need to update the deployment guide (README.md) and validation document (Validation.md). 
  • The README.md created must show how to: configure the application Build application 
  • The Validation.md created must show all the steps necessary to verify the application (new functionalities): How to run and validate the code using the test example provided


Final Submission Guidelines

  • Zip file with the updated code
  • Required Documentation

ELIGIBLE EVENTS:

Topcoder Open 2019

Review style

Final Review

Community Review Board

Approval

User Sign-Off

ID: 30076411