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:
- Enter the website.
- Enter your Codeforces handle.
- 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
- 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.
Auto comment: topic has been updated by wyhong3103 (previous revision, new revision, compare).
ScarletS is red. orz.
I am gonna kms ngl
¿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.
If only there was a graph which includes all your performances and gave rating based on that....
if tourist never bricked he would have been a 4,121 according to the fast calculation (slow mode is not working for 10 mins :/ )
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!
tourist would have had a rating of 4121!
Thanks for making my day :P
You're welcome!
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.
That is true! I will try to fix it.
Auto comment: topic has been updated by wyhong3103 (previous revision, new revision, compare).
tourist at 4115 goes crazy
tourist at 4182 (slow mode) goes even crazier
Of course the app "What if I never brick?" was made by someone with name "I like to brick" LOL
My rating ends up worse than what it is now
Thank you, I figured out what's the issue and will fix it asap.
Same here lol
You should check out rainboy's
Auto comment: topic has been updated by wyhong3103 (previous revision, new revision, compare).
You can instead find a subsequence of contests which maximizes your rating and add back the restrictions
The solution is given by the greedy algorithm, somewhat unsurprisingly
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
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.
Hey, nice tool!! But when I tried the SLOW option, it gave me a lower rating than my maximum rating (TT)
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.
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
Nice nice
Maybe you could add a progress bar when using the „Slow” mode
Good suggestion, I will add it when I have time!
A progress bar is added to the slow mode. Thank you for the suggestion!
Well yes our rainboy would have been a LGM!
the slow version is way too slow. it takes forever to do Um_nik's graph
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?
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.
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.
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
Check this comment.
ok thx
My rating wouldn't change much even if I didn't brick.
Auto comment: topic has been updated by wyhong3103 (previous revision, new revision, compare).
why slow version is not showing any graph ?
a good improvement would be to add more info about each contest, like performance, rating gain, expected rank etc.
Thank you for the suggestions. I have implemented some of the things you suggested.
Auto comment: topic has been updated by wyhong3103 (previous revision, new revision, compare).