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

Автор Balajiganapathi, история, 7 лет назад, По-английски

Hi all,

While practicing I always have difficulty choosing which problems to solve next. So, I coded a site to look at the user's submissions so far and recommend what all problems to solve next. Since the ICPC season is at peak now, it can also analyze multiple users and recommend practice problem for the whole team.

View the site here: Code drills.

So far, it only supports cf (EDIT: Now also supports codechef and spoj). I plan to add support for other sites later. Besides recommending, it will also show some statistics of your submissions so far. If you scroll down after entering your handle, you can view the practice recommendation. I will explain some of them here:

ICPC: Best to use this with team i.e. enter all your teammates' handles too. It will try to select problems from different topics. This and all other recommendations are based on your past submissions. So, the difficulty of the set will vary according to your past submissions (i.e if you have solved a lot of hard problems, then you will get harder problem recommendations, so tourist's easy problem will be very different from my easy problem recommendation :) )

Mini Contest: Best for individual coders. 5 problems are recommended, again based on the coders' past submission.

Daily Practice: Suggests only 2 problems — an easy and a hard. This is useful for those who don't have that much time to practice.

Warmup: 2 easy problems for solving before some contest.

Easy/Medium/Hard: 10 problems of the chosen difficulty.

Topic based: Select a topic and start solving from easy to hard problems on that topic.

This was all coded in one day, so expect some bugs :) . I will try to keep adding more features and other sites for analysis. Comments and suggestions are welcome.

  • Проголосовать: нравится
  • +583
  • Проголосовать: не нравится

»
7 лет назад, # |
  Проголосовать: нравится +28 Проголосовать: не нравится

I'm just curious, what's the algorithm you used to determine the best problem? Is it by solve rate, difficulty, etc?

And how to determine the "cutoffs" for easy/med/hard? (If some cutoff values are used to determine these problems)

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

    The cutoffs are relative — based on the coder's solved submissions difficulty. Difficulty of a problem is approximated by the number of users who solved that problem.

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

      Wouldn't it cause problems from a few years ago be considered hard as codefoces was less popular than?

      • »
        »
        »
        »
        7 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится +3 Проголосовать: не нравится

        Yes you are correct. Older problems may be considered harder. We are working on improving the recommendation algorithm to consider that. Interestingly, spoj has the exact opposite issue, older problems are solved more often so may be considered easier than they actually are.

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

          Another way to estimate difficulty would be to see the ratio of its solvers officially during contest vs the solvers of Div2A of that contest (this assumes that everyone who takes part is able to solve div2A easily). Div1 D and E can be compared with Div1 A (after appropriate scaling with respect to solvers of div2 C).

          This may give inaccurate results in case of Div2 E or Div1 D or E, which are sometimes easier but many weaker contestants only try them after contest. So another contributing factor can be to compare solvers after contest with the solvers div2 A after (or during) contest.

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

            Some contests have unusually difficult Div2As, I think that it would be better to compare it to the number of participants.

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

          You could try to approximate the difficulty of a problem based on the total number of AC submissions during a contest vs the total number of participants in that round.

»
7 лет назад, # |
  Проголосовать: нравится +13 Проголосовать: не нравится

Nice initiative!

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

Every time I refresh my page, the recommended problems are changing frequently (Even though I didn't submit any solution). Is that a bug or a feature?

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

    The problems are chosen randomly after cutoffs, so it changes every time the page is refreshed. This is because, if you don't like a particular set, you can just refresh and get a new set. Also, due to this, I need not store anything in the backend :).

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

      Is it possible to save or download a particular problem set instead of manually adding each of them to favorites?

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

        That is a nice suggestion. We will add it in the next release (probably by creating a permalink for each problem set).

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

Codeforces shows that I have solved 748 problems, while the site shows that as 712. Any reason why?

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

    Yes I noticed the discrepancy in my data too. I am not sure why that happens. I just use the data codeforces returns in its API and count the total number of distinct AC problems. Still looking into it.

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

    Maybe Codeforces count Div1A and Div2C as two different problems?

»
7 лет назад, # |
  Проголосовать: нравится -63 Проголосовать: не нравится

I am a new programmer.Very few algorithms i knew.How I improve my coding skill and i will be a good programmer??

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

    practice practice and practice

  • »
    »
    7 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится -15 Проголосовать: не нравится

    Here is a big group in bangla for competitive programming! :) as you are Bengali, You need to join this group and read+follow the pinned post.

    https://www.facebook.com/groups/bengaliprogramming/

  • »
    »
    7 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    As you are new programmer. First you need to learn some essential algorithms.

    Competitive Programming 3 by Stevien & Felix Halim Is the best for beginner.

    Also you can learn from geeksforgeeks.com and so other sites. Just search google.

    And to improve your coding skills, you need to practice more and more :)

    • »
      »
      »
      7 лет назад, # ^ |
        Проголосовать: нравится -20 Проголосовать: не нравится

      Rezwan bro, direct 3? may I know why didn't you preferred 1st and 2nd part of this book?

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

        The newer editions are not intended to be read as sequels with regards to the previous editions-they are just that, newer and improved versions, containing everything the previous ones have, and much more.

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

The site looks awesome and is fast as hell.

But I'd request to include user's spoj performance for submission analysis for recommendations.

Thanks anyway!

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

    Thanks! I am planning to include other sites' data too. There are some issues to be solved in that (how to assign difficulty across sites) so I did not do it in this first iteration.

    • »
      »
      »
      7 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится -41 Проголосовать: не нравится

      CHOOSE ONE SITE AS STANDARD(E.G. CF RATING)

      X= NO OF USER GOT AC;

      Y= NO OF USER TRIED;

      M= SUM OF THOSE USERS WHO GOT AC THIER RATING ON STANDARD SITE

      DIFFICULTY= (X/Y)*SQUARE_ROOT(M);

      BEFORE THIS YOU HAVE TO ASSIGN DIFFICULTY IN SAME WAY TO ALL PROBLEMS OF STANDARD SITE

      NOW DO YOUR ALGORTHM WHAT YOU WERE DOING.

      TALK WITH ahmed_aly

      • »
        »
        »
        »
        7 лет назад, # ^ |
          Проголосовать: нравится -10 Проголосовать: не нравится

        why am i getting downvotes plz reply

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

          Because you need more practice :P

        • »
          »
          »
          »
          »
          7 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          • Everything is in caps
          • There are lot of typos, it's hard to understand and there is no formatting at all
          • For me it's not clear, what is M
          • Difficulty calculation makes no sense at all, no explanation, why it should be used and why this assignation will be right. For me it looks like random formula
»
7 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

The recommendation also includes solved problems. Is that intended?

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

where to view how many submissions i got ac ?

»
7 лет назад, # |
  Проголосовать: нравится -8 Проголосовать: не нравится

Have you used the Collaborative recommendation engine algorithm like "Programmer who solved Problem X also solved Problem Y." to provide suggestions ?

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

    No, we just consider the given coder's data. A collaborative recommendation engine will require a lot more infra and coding than this model. I can't decide if that will be useful here. The aim is to suggest problems to the coder which will be just beyond their difficulty level.

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

      Yes You're right. Programmer's growth is not guaranteed in Collaborative model.

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

      It would be nice if we can see what all problems were solved under each category if we click on the category in that pie chart.that will also help someone following others to see what problems others have solved under that category so that we can follow some experienced coders

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

        Nice idea, will try to implement it. Will take some time as we need to start storing data in db for that to work.

»
7 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Wow, this is awesome thank you for your hardwork. I wish you good luck. but I have 2 questions: first : on the daily practice tag it shows two problems a div 2 A and a div 1 E that is not good for practice I mean seriously div 1 E??? second : on the chart of submissions it shows 10 submissions as challenged what does it mean ??? :-)

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

    Hi, the intention behind daily practice is to solve a hard problem daily. The hard problem is chosen to be just beyond the coder's level. If we keep solving problems that are within our level, we can't improve. The easy problem is just there for warm up.

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

      Yes you are right we should solve harder problems but we shouldn't jump a head of our selfs like for example I can solve div 2D usually so the problems that should be in daily practice are div 2 E anyway that's just what I think thank you for this hard work but... you still hadn't answered my second question :-)

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

        Challenged is when a submission in a contest gets hacked by others.

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

        About that div2 E recommendation, we only consider the number of coders who solved a problem as the indicator of the problem difficulty. So this particular div2 E may have been as easy or just beyond an average Div2 D and so has been recommended to you.

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

Nice one. I was looking for the same to practice .I have a query, Suppose a problem involves two categories (say dp and number theory) , did you include this problem in both categories ?

»
7 лет назад, # |
  Проголосовать: нравится +10 Проголосовать: не нравится

I was looking for something like that for so long ... thank you for your efforts :)

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

wow... amazing

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

I went for warm-up suggestion, and the website suggested me a Div1-C and a Div1-E...

Anyway, I like the idea of this website. It would come handy for every competitive programmer.

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

Every time I open the site and enter my user handle, I see a different list than what I saw the last time. So the site picks up random problems based on their difficulty level and are the problems solved or not. It's a really great initiative. Try to include spoj in it.

»
7 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

Wow, fantastic website. Hope daily pratice will have more problems because I am going in to take part in VOI so I need to pratice more and more. Or simply, I can chose how many problem to deal a day.

Anyway, thank you a lot Balajiganapathi.

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

    Hi, thanks :). If you have more time to practice daily, then "Mini contest" is the recommended one. "Daily Practice" is for those who want to solve just one problem a day.

»
7 лет назад, # |
  Проголосовать: нравится +11 Проголосовать: не нравится

Awesome website and it's very fast. Thanks Balajiganapathi for this amazing site.

»
7 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

nice ! and thanks a lot :)

»
7 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

That's cool.

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

it is suggesting me to solve a Div1A problem that i've already solved in Div2C. if you can solve this bug it would be much helpful. :) Balajiganapathi

»
7 лет назад, # |
  Проголосовать: нравится +11 Проголосовать: не нравится

Very good site in my opinion, but one thing you should consider is not to show Surprise type rounds. For example my daily practice included this problem.

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

Great work Sir. Please include Codechef too. It will be helpful.

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

Excellent idea. But I'm facing some serious issues here. I've solved problems from multiple handles. :( Now the recommendation will be 1/n times as accurate as it should be, where n=no. of my handles. Does inserting various handles produce a cumulative result, or average, median, etc.?

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

I noticed a bug: If we try to input the name of a user whose submission(s) is(are) "in queue", the site gives this error. I know it's a minor issue since the problems generally tend to stay in the queue for a very short period of time, but I thought I'd report the same.

»
7 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

I think that there is a small bug: your site suggests me solving this Div1 C problem but I have already solved this problem as Div2 E.
Anyway, great site.

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

This doesn't work for codechef anymore :/

»
7 лет назад, # |
  Проголосовать: нравится +31 Проголосовать: не нравится

just curious here, how are strong areas and weak areas determined?

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

Nice job! Are you planning open-source your codes on your github page?

»
7 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

Hasn't been working for the past 2 or 3 days :( It says RTE

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

The site doesn't work for CodeForces handles, but works for other Online Judges handles. It is nice. I wish it would categorize many problems according to topics. Including Problems solved from UVa and Open Kattis would be a great feature.

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

    Fixed it for cf handles. CF changed their API response format hence the error. I will look into adding UVa and open kattis — should not be hard to add.

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

Hey ! Wonderful work ! The website is useful to me and is helping me find new problems ...

Just one suggestion — Try to include Hacker Rank and Hacker Earth handles for analysis as well !

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

The site has been down for a few days now! Can you please look into it?

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

Is the site down? I am unable to open my Codeforces Account in it

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

your site isn't working, can you fix it? it shows:

Oops! Something went wrong while processing your request. Mark this as a RTE against us :(

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

Sorry for reviving the dead blog, how accurate is the algorithm, since the problem of old questions being (considered) harder is true. Anyone who uses it regularly?

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

This site is down for long days. Is there any update regarding this problem?