zenolus's blog

By zenolus, history, 13 months ago, In English

Hello, Codeforces community!

Before going into the details, I would like to give a huge thanks to the community for the interest and support. I'm really awestruck to see over a thousand user handles having been entered in the web app in just barely 30 hours. (At the time of writing this blog.) If you haven't gone through the previous blog, here it is.

There were some issues when I first made it live. I am sorry for that. I am no expert in the backend, so you guys had to face a lot of initial downtimes. Although I've applied a temporary fix, there's still work to be done. Keeping that aside, I would like to thank inputs from manish_joshi, arthurg, RestingRajarshi, -is-this-fft- and everyone who checked it out and gave their reviews. I have made some tweaks based on that and there's more to do.

Okay, so regarding how problems are categorized,

Step 1: While parsing the problem set, I put them in slabs according to their ratings. <1200, 1200-1600, 1600-1900, 1900-2100, 2100-2400 and >2400. The reasoning behind this is that as per my experience, I found people getting stuck often in these belts for long durations before their rating spikes up to the next block. This also helps determine which problem tags are more common and more useful to be practiced.

Step 2: We get the max rating of the user and according to that, all future calculations are done. The idea was plain and simple that the higher we reach, the harder we need to practice for a positive delta. Even if your rating falls, you should aim for a higher rating.

Step 3: All the previous submissions are analyzed and a solvability score is calculated which denotes that the user is most likely to be able to solve problems with that many AC submissions. The calculation is simple as well. Solvability = summation of (solved count * problem rating)/4000 for each AC submission. The constant 4000 comes from the fact that the highest-rated problems are of R3500.

Step 4: The problem set is scanned to get suggestions on the basis of the following with priority ratio 1:2:3

  1. The absolute difference of a problem's rating from the user's max-rating.

  2. The problem tags are compared with the slab's sorted tag list (more problems of a tag => solving a problem of that tag would be more beneficial) and a tag score is calculated.

  3. The ratio of the solved count of that problem to the highest solved problem in the range suitable for the user.

The section "UpSolve from last contest" doesn't see any of the above. However, the newly added "Recommended upsolves from past contests" section, based on this suggestion, undergoes the above processing.

The analysis section is rather simple. It follows similar processing, though not this vivid. However, the catch is that in order to determine strengths and weaknesses, all submissions except those that are SKIPPED by the online judge are taken into consideration. An AC gives you a +1 for that tag but again, any other verdict gives you a -0.2 relatively.

Anyone interested can check out the complete project on my GitHub profile — ReactJS Frontend and MongoDB-ExpressJS-NodeJS Backend. I'm sorry for the messy code. I am still a complete newbie who wants to get into web dev.

Regarding updates, here I have some.

  1. As previously mentioned, I am working on Team practice mode and tag whitelisting and blacklisting.

  2. Secondly, I have a new idea in my mind to make the analysis part more useable. We have a stopwatch for everyone to see how much time they take to solve a problem. How about storing that data to make an analysis of how much time you have taken to solve the problem of a certain rating over the last 5-10 problems of the same rating? For example, the times taken to solve 5 of R1500 problems were 15min, 25min, 20min, 30min, and 20min. You don't need to keep track of that. In the analysis section, there would be a combined graph of problem ratings vs last 5-10 times taken. I think it can help analyze what kinda problems one faces more difficulty/takes more time in solving.

  3. Lastly, as -is-this-fft- said in the last post, there may be quite some portion of people who prefer a simple motherfuckingwebsite.com format over a fancy UI. I was thinking, why not? I can retain all the functionality and make a side page plain and simple for such people to use.

Let me know your thoughts/suggestions in the comments. Thanks.

 
 
 
 
  • Vote: I like it
  • +60
  • Vote: I do not like it

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

The "recommended upsolves from past contests" sections suggested me also problems from contests I didn't take part to (1110E - Magic Stones). I'd only solved 1110D - Jongmah in practice mode before.

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

    If you go through the comment on the previous blog, that section is primarily for solving problems that we would like to do an honest virtual contest with. Like we solved some problems, be it practice or in contests but we want to solve the ones we left over that time.

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

Just wanted to say that I like the site, I used it last two days. Also would use the plain page version if available.

And a little suggestion: I parse the testcases on commandline, thatfore I need to see the contestnumber and letter of the prob. I can if I hoover over the link. But I need to hoover twice, since the first time another link is shown.

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

    Okay I'll fix that. And glad to know that you would like to use the plain version. I'll make it ready asap

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

Why it's not working for me. Whenever I enter my handle nothing happens.

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

    Probably because of Heroku's call limit. Please try again later. It's not down...

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

I've been using this for about a week now, and I love the timer feature. Although snooze is something I've not used yet, I think it will prove to be useful in the future.

Also, it would be amazing to have a section of random problems similar to suggested problems where I can set the difficulty and get a set of random problems to solve(as I felt while practicing that the problems that I got were some what similar in approach(not tags)).

Otherwise, it is amazing:)

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

    Thanks for your words. I have a list of things to work on in this and also, I have a new project in mind that'll probably help the community even more. Stay tuned!

»
6 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Hey is the site down now? It seems I'm unable to connect .