Challenge Overview

This is the Hard - 750 point problem of RDM-Practice
Consolidated Match Leaderboard is available here.

Please Note - The files linked in the specs will only be accessible after you register for the challenge.

An advanced Artificial Intelligence named Bill gained consciousness and now wants to experience the world. Being a tech-guy himself, he is good at programming and is interested in being a gig-worker with the help of Topcoder. He goes through the gigs listed at https://www.topcoder.com/gigs and is interested in taking up a gig, where he can use his skills and make some money, which he’ll use to experience the world. 

Your task is to build a simple web app based chatbot which people can interact with to better understand and benefit from the opportunities at Topcoder gigs. 

Requirements

Use this API to pull all Topcoder Gigs data: https://www.topcoder.com/api/recruit/jobs?job_status=1
 

Curate the following fields from the job record of every gig work opportunity
  • Gig url: Topcoder URL
  • Gig Title: name
  • Skills: Technologies
  • Location: country
  • Payment: min_annual_salary, max_annual_salary, salary_type
  • Time duration: Duration
  • Required years of experience: minimum_experience, maximum_experience

 

Build a chatbot as a web app for gig opportunities recommendations

Chatbot Screen

  • The chatbot screen will be the index page of your web app.
  • On the chatbot screen, there should be a scrollable field for showing chat messages and a text field for typing text.
  • The user can press "Enter" to send a message. If they want to input a new line, they should press "Shift+Enter".

A sample layout for your reference.

image

 

Users can type any text into the chat area. You need to extract the info from the typed text and recommend gigs from your scraped data.
The following conditions need to be considered for recommendations. Conditions can be combined arbitrarily.
  • Skills
  • Location
  • Payment
  • Time duration
  • Required years of experience.

If there are multiple different requirements of years of experience, choose the shortest one.

For example, for https://www.topcoder.com/gigs/22515610, it requires two different requirements of years of experience.
  • 5+ years of experience .Net/.Net Core/C# , ASP.Net MVC, AngularJS 1.x/2.x, WebAPI, MS SQL Server, Entity Framework, Javascript, Jquery, Json/REST, HTML/CSS
  • 2+ years of experience in software development using Microsoft stack (C#, ASP.NET, SQL Server, etc.)
So if the user only mentioned that he has 2 years of experience, then the chatbot should recommend this opportunity to him/her.


Each opportunity should be displayed as a link. The link text is the title of the opportunity. Clicking the link should open a new browser window to the page of the specific gig opportunity (such as https://www.topcoder.com/gigs/22515610).

 

Here are some sample scenarios for your reference:

Scenario 1: Recommend by location and skillsets

Hi, my name is XXX, I'm in <Country>, I'm good at <skill sets>

Scenario 2: Recommend by the location and the expected payment

Hi, I'm at <Country>, my skill sets are <<skill sets>, I want to earn at least <minimum money> per week

Scenario 3: Recommend by the years of experience and expected payment.

Hi, I have <number> years of experience, I want to earn <>

Scenario 4: Recommend by the years of experience and expected payment.

Hi, I want to find a gig work that is no more than <number> months, can you help me?

 

Some edge cases:
  • If there are no gig opportunity matches, the chatbot should respond: Sorry, we don't have good opportunities for you now. Please come to us later.
  • If some conditions the user uses the indeterministic words, ignore it. For example, Hi, my name is Alice, I am from Austria and I have some experience with C++. I am looking for a high paying job in Germany. I am available to start working in 2 months, then the condition experience and payment can be ignored, only the conditions location Austria, skill sets C++, gig duration 2 months are counted.
  • If the user's input doesn't include any valid conditions, the chatbot should respond: Sorry, it's out of my knowledge, can you rephrase again?. 


Hints for you:

  • Knowledge of NLP is not necessary. You can implement it by simply extracting the keywords from the input message. However, if you prefer to use an NLP solution you are welcome to use NLP libs.
  • You can assume that users will never use negative words like bad, not good etc. For example, the user will never input the text I'm bad in C++, can you recommend some gig opportunities?.
UI Requirements:
  • Wrap the chatbot area using id #chatbot-window
  • Set textarea to send message to chatbot using id #chatbot-input 
  • Chatbot needs to be able to detect and interpret what user type even if the characters are using lowercasetitle case, or uppercase format and return the correct gig results.
  • Gig title needs to be an exact match with data from 'https://www.topcoder.com/gigs'.
  • Gig opportunities need to use a href tag with a URL that links to the correct gig detail page.
  • In case you are submitting a static HTML solution, you need to provide a script to serve the static HTML/JS/CSS files on port 8080. 

 

Sample Test Cases

These are sample test cases to check your solution:

  • Input = hey my name is bill i am in china i am good at qa automation can you help me? 

  • Gig Respond (need show list with link) = 

    • Hey, these are great opportunities for you: 

      • https://www.topcoder.com/gigs/22629850 : QA Automation Engineer

      • https://www.topcoder.com/gigs/22154647 : Automation Tester - Java, Selenium

      • https://www.topcoder.com/gigs/22161305 : Testing Lead/ Architect

  • Input = hi my name is Linda i live in india i am good at python

  • Gig Respond (need show list with link) = 

    • Hey, these are great opportunities for you : 

      • https://www.topcoder.com/gigs/22368199 : Full Stack Developer

      • https://www.topcoder.com/gigs/22081475 : C++ Developer

      • https://www.topcoder.com/gigs/22074829 : Cloud Testing Lead 

  • Input =  hi i am at europe my skill sets are aws i want to earn at least 2750 per week

  • Gig Respond (need show list with link) = 

    • Hey, these are great opportunities for you: 

      • https://www.topcoder.com/gigs/24636746 : European Azure / AWS Specialists

  • Input =  hallo i live in canada and i am looking for gig with net and java skill

  • Gig Respond (need show list with link) = 

    • Hey, these are great opportunities for you: 

      • https://www.topcoder.com/gigs/22522322 : Senior Developer - Node.js

      • https://www.topcoder.com/gigs/22508899 : Application Architect

  • Input =  hi i live in india and have experiences using hadoop aws postgresql and docker

  • Gig Respond (need show list with link) = 

    • Hey, these are great opportunities for you:

      • https://www.topcoder.com/gigs/22771369 : AWS & Hadoop Data Engineer

  • Input = hi i am at usa only want to find a gig work that no more than 6 months

  • Lead Analytics Consultant

    • Hey, these are great opportunities for you:

      • https://www.topcoder.com/gigs/21803204 : Lead Analytics Consultant
         

Sample Submission

This challenge uses a purely automated testing approach to score the submissions so we are providing a sample submission and an automated tester with a basic test case assembled in a way that simulates the final testing. Docker is used to achieving this. Please read the README.md file to find out how to run the setup.

The sample submission will be in the code folder and it should be extended to implement the requirements. The README.md file contains some guidelines on how to extend the sample submission.

Sample submission with local tester for this challenge: hard-sample-and-tester.zip
Sample Submission to submit on the platform: hard-sample-submission.zip



Final Submission Guidelines

Submission Deliverables

Your submission must be a single ZIP file not larger than 10 MB containing just the code folder with the same structure as the one from the sample submission. The sample tester should not be included in the submission. Also make sure you don't submit any build folders generated locally like node_modulesdist etc.

You must follow this submission folder structure so our automated test process can process your scoring:

  • Create a folder with “code” as the folder name then zip. 
  • Inside the “code” folder, there needs to be a file named Dockerfile. This is the docker file used to build the user’s submission. Refer to the provided Docker file in Sample Submission for each level.
  • Zip that “code” folder and submit to the challenge.

Execution Details and Submission Logs

Each time you submit, the platform will leverage Docker to run your code. The execution logs will be saved as “Artifacts” that can be downloaded from the Submission Review App: https://submission-review.topcoder.com/.

RDM-Execution-logs

RDM-Execution-Logs-2

Checking Passing and Failing Test Cases

Using the Submission Review App (https://submission-review.topcoder.com/), navigate to the specific challenge, then to your submission, and then to the Artifacts for your submission. The zip file you download will contain information about your submission including a result.json file with the test results.

Docker Structure

Make sure you can run your submission with Docker from a clean slate. Your Docker needs to expose port: 8080. It needs to build on a completely clean machine when the platform runs your submission. If you are using something locally to build and run your submission, make sure it’s included as part of your Docker configuration as well. Please look at the sample submission to understand the structure better.

ELIGIBLE EVENTS:

2021 Topcoder(R) Open

REVIEW STYLE:

Final Review:

Community Review Board

Approval:

User Sign-Off

SHARE:

ID: 30162209