We were inspired to create this chrome extension because we often use the website Codeforces.com to practice competitive programming. However, since Codeforces has such a variety of problems to choose from (over 6000 problems!) we often struggle with finding the next problem to work on. It is difficult to find a problem that is at our right skill level yet also helps us work on the skills we need to practice most. Therefore, we decided to create a chrome extension that will perform this challenging task for us through the power of computation.
What it does
We built a chrome extension to suggest relevant problems on Codeforces. Clicking on the extension icon will bring up a popup menu that allows users to generate recommended problems based upon their skill levels and their chosen categories.
How we built it
First, we scanned through the Codeforces website and established a difficulty rating for each problem using a ranking formula with binary search and uploaded the results to a server. Then, we took into account the category each problem falls into (ex: "dp", "data structures"). For each specific user, we use the data on his/her past submissions to establish a specific user rating for each category. We then combine all of our data to suggest a recommended problem that the user can solve next.
Challenges we ran into
The most difficult task we encountered was integrating two separate pieces of software designed by different developers to create a functional product (frontend and backend). Fine tuning the mathematical model behind our problem recommendation algorithm also presented a significant challenge.
Accomplishments that we're proud of
What we learned
What's next for Codeforces Companion (Coco)
After more fine tuning on the mathematical model and incorporating periodic updates to our database, we will publish this extension onto the Chrome Web Store. Currently, the user's category ratings are not displayed; in future versions, the user will be able to access this information to pinpoint their competitive programming weaknesses more accurately.