wyhong3103's blog

By wyhong3103, history, 17 months ago, In English

Hello Codeforces,

I wanted to share with you a web application I recently developed. The application filters out unsuccessful contests you have participated in on Codeforces and predicts your rating today based on the performance of the contests you have participated in. The primary purpose of this web application is to help users discover their true potential, serving as a source of inspiration and motivation to empower them to persevere in their endeavors. Initially, my idea was to greedily select contests that have a positive delta based on the current rating, using the rating formula mentioned in this blog post. However, due to slow API calls, I was almost ready to give up on the project. Nevertheless, I decided to proceed for the sake of completeness.

To my surprise, when I completed the application, I found the results to be quite interesting. Additionally, I added a mode that computes the rating using a simple O(1) formula: $$$ delta = (performance - rating) / 4 $$$. I found that not only did this computation take less time, but the results were also convincing.

I thought it would be valuable to share this application with you, as it may provide insights and assistance to Codeforces users in predicting their ratings based on their contest performances.

Without further ado, let me introduce you to

What If I Never Brick

To use the application:

  1. Enter the website.
  2. Enter your Codeforces handle.
  3. Select a calculation mode: either "Fast" or "Slow".
    • The fast mode is incredibly fast because it fetches only the necessary data, which includes your rating changes in every contest, in a single API call.
    • The slow mode takes more time as it needs to fetch all the contest data you have participated in, and each API call takes 2 seconds
  4. Click on the "GO" button and wait for the result.


Thank you for your time.

If you have any further questions or suggestions about this application, please feel free to leave a comment or reach out to me via Codeforces.

Also, feel free to contribute, this is the link to the GitHub Repository.


Updates
  • Vote: I like it
  • +404
  • Vote: I do not like it

| Write comment?
»
17 months ago, # |
  Vote: I like it +16 Vote: I do not like it

Auto comment: topic has been updated by wyhong3103 (previous revision, new revision, compare).

»
17 months ago, # |
  Vote: I like it +4 Vote: I do not like it

ScarletS is red. orz.

»
17 months ago, # |
  Vote: I like it -39 Vote: I do not like it

¿And why filter out contests with poor performance? I think it's more natural and less misleading if contests with low performance are also included, since that is the natural growth of each user at that time.

As a suggestion, I think you should add a button to include or exclude contests with poor performance, and keep both graphs so that the user always considers their true progress and can "speculate" with a more probable future.

  • »
    »
    17 months ago, # ^ |
      Vote: I like it +154 Vote: I do not like it

    If only there was a graph which includes all your performances and gave rating based on that....

»
17 months ago, # |
  Vote: I like it +3 Vote: I do not like it

if tourist never bricked he would have been a 4,121 according to the fast calculation (slow mode is not working for 10 mins :/ )

  • »
    »
    17 months ago, # ^ |
    Rev. 2   Vote: I like it +5 Vote: I do not like it

    Expected.
    In slow mode, the api is called for each contest.
    tourist have given around 250 contests.
    so their is atleast 250 api calls for slow calculation!

»
17 months ago, # |
  Vote: I like it +35 Vote: I do not like it

tourist would have had a rating of 4121!

»
17 months ago, # |
  Vote: I like it +6 Vote: I do not like it

Thanks for making my day :P

»
17 months ago, # |
  Vote: I like it +39 Vote: I do not like it

I don't think this considers rating restrictions for contests. Like for me, it's saying I gained rating from a div 2 contest, even though I was above 2100 already.

»
17 months ago, # |
  Vote: I like it 0 Vote: I do not like it

Auto comment: topic has been updated by wyhong3103 (previous revision, new revision, compare).

»
17 months ago, # |
Rev. 2   Vote: I like it +1 Vote: I do not like it

tourist at 4115 goes crazy

»
17 months ago, # |
Rev. 2   Vote: I like it +5 Vote: I do not like it

Of course the app "What if I never brick?" was made by someone with name "I like to brick" LOL

»
17 months ago, # |
  Vote: I like it +68 Vote: I do not like it

My rating ends up worse than what it is now

  • »
    »
    17 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Thank you, I figured out what's the issue and will fix it asap.

  • »
    »
    17 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Same here lol

»
17 months ago, # |
  Vote: I like it +12 Vote: I do not like it

You should check out rainboy's

»
17 months ago, # |
  Vote: I like it 0 Vote: I do not like it

Auto comment: topic has been updated by wyhong3103 (previous revision, new revision, compare).

»
17 months ago, # |
  Vote: I like it 0 Vote: I do not like it

You can instead find a subsequence of contests which maximizes your rating and add back the restrictions

  • »
    »
    17 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    The solution is given by the greedy algorithm, somewhat unsurprisingly

    • »
      »
      »
      17 months ago, # ^ |
        Vote: I like it +29 Vote: I do not like it

      Suppose you have 2100 rating and then get a negative delta. Now the Div. 2 rounds are gonna be rated for you. So if you get a huge positive delta in Div. 2, you will end up with a higher rating

      • »
        »
        »
        »
        17 months ago, # ^ |
          Vote: I like it +24 Vote: I do not like it

        Thank you for the suggestion. I also noticed this while trying to determine an optimal algorithm for the task. However, implementing such a solution would require allowing the user to "brick," which would contradict the purpose of the web application as implied by its title. I will consider what to do with this matter once I am free from my school assignments.

»
17 months ago, # |
  Vote: I like it 0 Vote: I do not like it

Hey, nice tool!! But when I tried the SLOW option, it gave me a lower rating than my maximum rating (TT)

  • »
    »
    17 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    I also noticed that while playing around with the formula provided by Mike, it appears to yield significantly different results compared to the actual outcomes on Codeforces. I began to wonder if the formula is outdated, so I double-checked my implementation and found no issues. Here is the link to the rating calculator; please feel free to point out any problems if you come across them.

    • »
      »
      »
      17 months ago, # ^ |
        Vote: I like it +11 Vote: I do not like it

      It might be because of the users who haven't given 5 contests yet. I think Codeforces API only shows their visible rating, not the true one. This causes the sum of deltas to be larger than it is and that's why it is subtracted from the top contestants

»
17 months ago, # |
  Vote: I like it +11 Vote: I do not like it

Nice nice

Maybe you could add a progress bar when using the „Slow” mode

  • »
    »
    17 months ago, # ^ |
      Vote: I like it +3 Vote: I do not like it

    Good suggestion, I will add it when I have time!

  • »
    »
    17 months ago, # ^ |
      Vote: I like it +3 Vote: I do not like it

    A progress bar is added to the slow mode. Thank you for the suggestion!

»
17 months ago, # |
  Vote: I like it +44 Vote: I do not like it

Well yes our rainboy would have been a LGM!

»
17 months ago, # |
Rev. 3   Vote: I like it +3 Vote: I do not like it

the slow version is way too slow. it takes forever to do Um_nik's graph

»
17 months ago, # |
  Vote: I like it 0 Vote: I do not like it

I don't understand. It says i will have 1900 rating, but i have only done 3 or so contests with 1900 performance out of 80 contests in total. How does this "potential predictor" work?

  • »
    »
    17 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    On my end, it says your optimal rating would be 1876 and 1778 on fast and slow respectively. It's just a simple greedy algorithm. If the delta is positive for round x based on the current optimal rating then it is always optimal to take.

    • »
      »
      »
      17 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      Oh. I get what ur trying to do but doesn't that seem quite innacurate? Ur assuming that negative delta based on current optimal rating is a "bricked" contest, whereas it could just be a normal contest based on actual skill level.

      But I do understand how it could show one's potential becos it is, after all, based on the performance of contests uve given.

»
17 months ago, # |
Rev. 2   Vote: I like it +3 Vote: I do not like it

It calculates the rating changes wrong. It shows that my non-brick rating is 1533 (I have never bricked) even though I am currently 1706

»
17 months ago, # |
  Vote: I like it 0 Vote: I do not like it

My rating wouldn't change much even if I didn't brick.

»
17 months ago, # |
  Vote: I like it +8 Vote: I do not like it

Auto comment: topic has been updated by wyhong3103 (previous revision, new revision, compare).

»
17 months ago, # |
  Vote: I like it 0 Vote: I do not like it

why slow version is not showing any graph ?

»
17 months ago, # |
  Vote: I like it 0 Vote: I do not like it

a good improvement would be to add more info about each contest, like performance, rating gain, expected rank etc.

  • »
    »
    17 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Thank you for the suggestions. I have implemented some of the things you suggested.

»
17 months ago, # |
  Vote: I like it 0 Vote: I do not like it

Auto comment: topic has been updated by wyhong3103 (previous revision, new revision, compare).