Блог пользователя wyhong3103

Автор wyhong3103, история, 17 месяцев назад, По-английски

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
  • Проголосовать: нравится
  • +404
  • Проголосовать: не нравится

»
17 месяцев назад, # |
  Проголосовать: нравится +16 Проголосовать: не нравится

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

»
17 месяцев назад, # |
  Проголосовать: нравится +4 Проголосовать: не нравится

ScarletS is red. orz.

»
17 месяцев назад, # |
  Проголосовать: нравится -39 Проголосовать: не нравится

¿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 месяцев назад, # ^ |
      Проголосовать: нравится +154 Проголосовать: не нравится

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

»
17 месяцев назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

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 месяцев назад, # ^ |
    Rev. 2   Проголосовать: нравится +5 Проголосовать: не нравится

    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 месяцев назад, # |
  Проголосовать: нравится +35 Проголосовать: не нравится

tourist would have had a rating of 4121!

»
17 месяцев назад, # |
  Проголосовать: нравится +6 Проголосовать: не нравится

Thanks for making my day :P

»
17 месяцев назад, # |
  Проголосовать: нравится +39 Проголосовать: не нравится

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 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

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

»
17 месяцев назад, # |
Rev. 2   Проголосовать: нравится +1 Проголосовать: не нравится

tourist at 4115 goes crazy

»
17 месяцев назад, # |
Rev. 2   Проголосовать: нравится +5 Проголосовать: не нравится

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

»
17 месяцев назад, # |
  Проголосовать: нравится +68 Проголосовать: не нравится

My rating ends up worse than what it is now

»
17 месяцев назад, # |
  Проголосовать: нравится +12 Проголосовать: не нравится

You should check out rainboy's

»
17 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

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

»
17 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

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

  • »
    »
    17 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    The solution is given by the greedy algorithm, somewhat unsurprisingly

    • »
      »
      »
      17 месяцев назад, # ^ |
        Проголосовать: нравится +29 Проголосовать: не нравится

      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 месяцев назад, # ^ |
          Проголосовать: нравится +24 Проголосовать: не нравится

        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 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

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

  • »
    »
    17 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    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 месяцев назад, # ^ |
        Проголосовать: нравится +11 Проголосовать: не нравится

      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 месяцев назад, # |
  Проголосовать: нравится +11 Проголосовать: не нравится

Nice nice

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

»
17 месяцев назад, # |
  Проголосовать: нравится +44 Проголосовать: не нравится

Well yes our rainboy would have been a LGM!

»
17 месяцев назад, # |
Rev. 3   Проголосовать: нравится +3 Проголосовать: не нравится

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

»
17 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

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 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    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 месяцев назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      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 месяцев назад, # |
Rev. 2   Проголосовать: нравится +3 Проголосовать: не нравится

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 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

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

»
17 месяцев назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

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

»
17 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

why slow version is not showing any graph ?

»
17 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

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

  • »
    »
    17 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

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

»
17 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

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