marat.snowbear's blog

By marat.snowbear, 10 years ago, In English

Hi!

I'd like to introduce my project to Codeforces community. My project's name is 'Codeforces achievements' and as you can probably guess it is about achievements! Your achievements on Codeforces site. For those who do not like my long posts I should mention that the link to the site is at the end of this post.

Introduction

Last summer I left my last job, so I have quite a lot of spare time which I could invest in my hobby. Also I decided to learn something more or less new for me (for last several years my job was to write desktop software for Windows), so I decided to put my hands on some modern popular web-framework. At that point I chosen Python and Django, cause it was matching one position I applied. So I had a time and I wanted to learn Django. The best way to learn something is to practice in it, so I started looking for the idea for the site to create (didn't want to write yet another forum engine). Luckily at that point I ran into I_love_Tanya_Romanova's comment:

System> tourist unsuccessfully challenged LeBron's 250-point problem.
Achievement unlocked:)

That was it! I like the idea of achievements in the games and I decided that I want to something similar for Codeforces. That achievement Bohdan mentioned in his comment became the first achievement I implemented in my CF-achievements.

Achievements

The original idea was to have more funny & unusual achievements and less hard time-consuming achievements like 'solve XXX problems'. I think I didn't really succeed in that, there are not that many achievements there but I still have a couple of ideas for the future (of course I'm open to your ideas as well). Generally at the moment there are two types of achievements implemented. First one is something like 'language expert', in order to get this one you need to solve 50 problems in some particular programming language or language family. The second type of achievements can be rewarded for something you did in a single contest. For example tourist might try to hack your solution and if he doesn't succeed you get a You didn't even scratch me! achievement. Unfortunately Gennady won't be able to get this achievement himself, I apologise for that.

I was trying to come up with funny & interesting names for achievements, if you do not get the point in some achievement's name feel free to Google it or ask about it in the comments.

I should also mention here that all the achievements are given only for the online round you take part in, there is nothing for solving the problems after the round has finished. Also some achievements might take only rated rounds into account. There is a description for each achievement on how to get it.

Technical side

The site at the moment is not automated much, I need to manually start achievement crawling jobs after each contest so please do not blame me if you don't see your achievement two minutes after contest is over. It might take around 10-15 minutes after the system test phase for me to run all the scripts. I might also be in the gym, stay patient then :-) I'm working on automating the site.

And finally...

Finally the link: CF-achievements

Link to 'You didn't even scratch me!' achievement

You start point should be the main page and the user search textbox there, type in your CF handle and see what you have earned.

I should say that the project is in the beta stage at the moment, there is a lot to be done, I just wanted to involve the community into it, get some feedback and maybe some support. I'm open to all ideas about this project, please feel free to post them as comments here. Also you can see that the site was designed by a programmer (me), if you are more talented designer that I am, I would appreciate your help.

Initially I was going to let you know about it after CF round 288, but looks like Div. 1 part of it was cancelled so I decided to introduce it immediately. Also in the last round I_love_Tanya_Romanova got his achievement in CF, the idea of this site was born when I saw his comment so I decided it's good sign to start.

Hope you enjoy it,
Marat.

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

»
10 years ago, # |
Rev. 2   Vote: I like it +14 Vote: I do not like it

It should be added to Codeforces!!))

And it will be great if for every achievement there will be badge for example.

  • »
    »
    10 years ago, # ^ |
      Vote: I like it +19 Vote: I do not like it

    I'd like to have badges myself, but I need somebody to draw them.

»
10 years ago, # |
  Vote: I like it +6 Vote: I do not like it

I have no idea how to get my self in the same room as tourist then make him unsuccessfully hack me

  • »
    »
    10 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Sorry, can't help with that :-) At least you're in Div. 1 so you have the chance.

  • »
    »
    10 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Simple math: usually number of div1 participants in div2 contests is less than number of contestants in div1 round, therefore you should not miss div2 rounds (in case you see tourist among registrants) — you'll have much better chances to be in same room with him in this case, compared with div1 rounds.

    • »
      »
      »
      10 years ago, # ^ |
        Vote: I like it +12 Vote: I do not like it

      I'm not worrying about the chances of being in the same room as tourist more than worrying about the chances of being unsuccessfully hacked by him :)

      • »
        »
        »
        »
        10 years ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        The chances are not that bad, this achievement was earned 45 times so far and some people even earned it twice during the same round for different problems.

        • »
          »
          »
          »
          »
          10 years ago, # ^ |
          Rev. 2   Vote: I like it 0 Vote: I do not like it

          nevertheless, this achievement is kind of achievements which all you can do to earn it is to just wait

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

            From my experience — you may write some shitty code that miraculously works, and it will increase your chances :)

        • »
          »
          »
          »
          »
          10 years ago, # ^ |
          Rev. 2   Vote: I like it +12 Vote: I do not like it

          Yeah, not that bad chances, tourist have +71/-3 hacking stats during 2014...

          8 occurrences during 2012, 7 occurrences diring 2013, 3 occurrences during 2014...

          I think there is higher probability that tourist will be in the same room with you at your birthday and he will decide to make unsuccessful hack — just as a birthday present :)

  • »
    »
    10 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    And how to get successfull hack by worse :)

»
10 years ago, # |
  Vote: I like it +11 Vote: I do not like it

You made my day:)

BTW, if there will be a lot of possible achievements for unrated participation (like You didn't even scratch me! — last contest was unrated both for me and tourist) — it may give additional motivation for div1 guys to participate in div2 contests from main account, instead of creating fake one. Those who compare CF with online games or say i want to see results of contest in my profile, that's why i am creating new accout — they should definitely like it :)

As an example — you can make language achievements with 50 problems in rated events or 100 problems in any events instead of 50 problems in rated events.

  • »
    »
    10 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Yeah, just thought about the same point five minutes ago. I would definitely like people chasing achievements instead of creating new accounts. I will probably need to reconsider my position about rated/unrated participation in terms of achievements. Originally I didn't want to give most of the achievements for the unofficial participation to avoid people hunting for achievements instead of actually participating in the round itself. I'll give it another thought.

»
10 years ago, # |
  Vote: I like it +8 Vote: I do not like it

Nice work :)
Also that would be also great if there was a "countdown" for achievements. Like how much problems in Java do I need to solve to unlock "Runs on billion of devices... Slowly"?

  • »
    »
    10 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Good idea, thanks! With regards to Java, looks like you still need 50 cause none of your Java submission were made in rated [for you] contests.

    • »
      »
      »
      10 years ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      Good point, thanks :) I didn't notice that, I thought I solved more.
      By the way, another idea is to have some number of achievements depending on how many problems of that specific language did I solve.
      And one more idea is to have pseudo-achievements like "Screwed up like newer before" for losing a lot of rating, or "Lucky" for, lets say, 5 unsuccessful hacks of the same guy in the same problem.

      • »
        »
        »
        »
        10 years ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        I consider adding pseudoachievements as well. Something like 'Lucky' is not considered because there is no easy way to grab the data for it. It will require to make a request for each participant, which would mean something like ~50K requests just to make the original snapshot.

  • »
    »
    10 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Added the progress indication. Now you can see text like 'XXX/YYY completed' on your profile page next to the achievements you have some any progress. For Java now you have 9 out of 50. Thanks for the idea.

    http://cfa.yuldashev.net/profile/Witalia

»
10 years ago, # |
  Vote: I like it +5 Vote: I do not like it

tourist will never get achievement "You didn't even scratch me!"

»
10 years ago, # |
  Vote: I like it +22 Vote: I do not like it

I love this project, especially the "Language does not matter" achievement! It's a shame that, having missed the first three Unknown Language Rounds, I don't have it and might never get it :-)

»
10 years ago, # |
  Vote: I like it +5 Vote: I do not like it

Thank you for the effort! The idea looks nice.

I'm surprised that "Polyglot" mentions only two languages. A rule like "the more, the better" would make more sense.

I used to enter Div2 contests (unofficial participation) using different languages for each problem, but so far didn't get five problems solved with that tactic. I'd be interested to see who made better progress on that.

  • »
    »
    10 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    In fact it does what you said, internally I store the 'level' field in achievements table. For 'Polyglot' achievement it means the number of languages used in one contest and 2 is the minimum number of languages to use and thus it gives the level 1 of that achievement. Though I store it in the database but I didn't decide where/how to show it.

    Here are three leaders of 'Polyglot' achievement:

    1. Parsee_Mizuhashi — 6 languages
    2. watashi — 5 languages
    3. ant.ermilov — 5 languages
    • »
      »
      »
      10 years ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      Yeah, I see, thank you for the stats.

      Impressive what people do in ranked contests!

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

      A natural idea would be to add levels to some of the achievements.

      For example, on TopCoder, there are achievements for solving 1, 10, 50, 200 and 500 Algorithm problems.

»
10 years ago, # |
Rev. 2   Vote: I like it +13 Vote: I do not like it

Achievement names are really nice (as well as whole idea itself). As for new achievement ideas, how about time-related achievements? Like "Solve A in first 5 minutes" or so and maybe "First contestant who solve problemLetter". And you can add something like "Hack solution on language, that you didn't use during contest" to polyglot-type achievements.

  • »
    »
    10 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Yeah, I was thinking about smth like the first one you mentioned and I like a lot your second idea though it might be a bit tricky to implement. I might come back to it later when I'll refactor the data crawlers.

»
10 years ago, # |
  Vote: I like it +5 Vote: I do not like it

First of all, congratulations for your work :)

Similarly to the tourist's unsuccessful challenge achievement, maybe you could add the achievement of beating tourist / Petr in a rated contest or doing a problem they couldn't do: it rarely happens, but it can be pretty fulfilling.

»
10 years ago, # |
  Vote: I like it +28 Vote: I do not like it

Finally there is achievement in programming that tourist can't unlock:)

»
10 years ago, # |
  Vote: I like it +14 Vote: I do not like it
 Oct. 25, 2010: tourist got Tourist's path for solving 50 problems in Pascal or Delphi 
»
10 years ago, # |
  Vote: I like it +14 Vote: I do not like it

LOL, "Runs on billions of devices... Slowly" :)

can you pls, include /usr/dmr or sth like that in C-related achievements in honour of Dennis Ritchie.

btw, what would you name this specific achievement, "petrifying failure"? :) (sorry, Petr)

  • »
    »
    10 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Yeah, originally I was thinking about "Dedication to Dennis Ritchie" name for that achievement, but didn't really like it, too boring and official. Your idea sounds cool, thanks.

  • »
    »
    10 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Phew, I'm finally done with back-end refactoring and can get back to smaller changes. I liked your idea and renamed C achievement like you proposed: http://cfa.yuldashev.net/achievement/100

»
10 years ago, # |
Rev. 2   Vote: I like it +30 Vote: I do not like it

Ok, got one more achievement idea (looks like inventing achievements is easier than solving problems, meh..):

"Speck in your brother's eye" — successful hack AND failed system test on the same problem.

»
10 years ago, # |
  Vote: I like it +5 Vote: I do not like it

Great idea!

»
10 years ago, # |
  Vote: I like it +22 Vote: I do not like it

What about a "Better late than never" achievment?

You would get it by submitting a correct solution on the last minute(s) of the contest.

»
10 years ago, # |
Rev. 3   Vote: I like it +19 Vote: I do not like it

I also have few ideas; I am not very good in creating nice names for such stuff, so i'll post just some ideas/drafts. Maybe at least some of them are interesting:)

Few other achievements based on hacking are possible. Achievement for hacking more than 1 problem of some user, in case that person later fixes those solutions and passes system tests. Achievement for being that person with more than 1 problem hacked and later fixed :)

Few ideas about precision and accuracy. Maybe we can make an achievement for getting same place in two consecutive contests (this one will be easy for tourist); or for getting +0 to rating after a contest (stable contestant), or for getting +1 to rating (step by step), or for improving personal record of rating by 1 point, or for getting exactly minimal required rating for some rank/color.

Also achievement for being only person to solve some problem during contest looks nice)

  • »
    »
    10 years ago, # ^ |
      Vote: I like it +18 Vote: I do not like it

    Like your idea about achievement for being hacked and sending right solution after that. "With a little help from my friends" can be the name for it.

    And one more idea from me: "David and Goliath" — successfully hack solution of contestant with significantly higher rating (difference should probably be 500 or more).

»
10 years ago, # |
  Vote: I like it +21 Vote: I do not like it

When someone gets WA on the last test case or on a test case, which number is bigger than 100 (e.g. WA on test 139). That can be a Bad Luck Brian achievement.

  • »
    »
    10 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Good achievement! I've got WA on test 103 for problem 158B - Taxi. So I can give this achievement! :D

»
10 years ago, # |
  Vote: I like it +3 Vote: I do not like it

"THIS IS SPARTA!!!" — successful hack of locked solution that worth 1300 or more points. Exact threshold is debatable, ofc.

»
10 years ago, # |
  Vote: I like it +19 Vote: I do not like it

I'd add some "basic" achievements like "solved problem [letter]div[division]" (but if unrated round do not count it's not that good idea to give them for div2 because it's not good idea to encourage persons to go to div2 like dreamoon_love_AA), "won round", "won room?", "solved all problems"

Some less "default" ideas:

  1. Get more points for hacking in a problem then the problem costs.
  2. Compete in N rounds in a row

Random strange idea: For getting lucky place (place number consists only of 4s and 7s)

»
10 years ago, # |
  Vote: I like it +20 Vote: I do not like it

There could also be achievements for big rating gain/loss like:

Win 150+ rating in a contest — "Are you a tourist?"

Lose 150+ rating in a contest — "Are you getting worse?"

  • »
    »
    10 years ago, # ^ |
      Vote: I like it +10 Vote: I do not like it

    Last time tourist win 150+ rating is in Codeforces Beta Round #8, and worse never lose 150+ rating in a contest. :P

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

      It can be "Worse then worse". Or streak of 5/10/20 consecutive rating decreases.

»
10 years ago, # |
  Vote: I like it +24 Vote: I do not like it

I'd add one more achievement idea "Godspeed Mode (Kanmuru)" for solving a problem in less than 1 minute (getting the full score of a problem)

»
10 years ago, # |
Rev. 3   Vote: I like it +46 Vote: I do not like it

Some ideas:

Flash in the pan — Being in a higher ranking just for once. For example IM -> GM -> IM.

Dreamoon fan — Go from Master+ to Expert (Decreasing should be in consecutive contests)

Beatoriche Sequacious — Having a contribution lower than -50

The sky is the limit — Have a rating more than 3000.

Where is my Jaguar? — Get 228+ positives from a comment.

I milked the ram — No change in your rating in a contest.

I love Tanya Romanova — Have 3500+ accepted submissions.

Icing on the cake — Get positive ranking for 5+ consecutive contests.

Variety is the spice of life — Have accepted codes in 10+ programming languages.

»
10 years ago, # |
  Vote: I like it 0 Vote: I do not like it

Unlucky Luck: Fail in system test of a contest for at least 3 problems!

»
10 years ago, # |
  Vote: I like it +27 Vote: I do not like it

Guys, I'd like to thank everybody for your ideas. At the moment I want to focus on automating back-end a bit to make crawling process simpler and faster, after today's contest it took a bit longer time to update all the achievements and I want to fix that. After that I will get back to your ideas, I will respond to each of you.

»
10 years ago, # |
  Vote: I like it +42 Vote: I do not like it

I think, we need an achievement for hacking tourist.

  • »
    »
    10 years ago, # ^ |
      Vote: I like it +16 Vote: I do not like it

    Darn, I didn't see your comment before posting! D:

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

    Yeah, one should be really talented to understand his code.

»
10 years ago, # |
  Vote: I like it 0 Vote: I do not like it

Can we add an achievement for hacking tourist? I'm guessing this wasn't an achievement because it didn't seem possible. It finally happened in round 290. o_o Congrats to mkirsche!

»
10 years ago, # |
  Vote: I like it 0 Vote: I do not like it

Marat, what do you think about achievements for consecutive participating in rounds? It could be for consecutive 5, 10, 25 or something like this.

One of the possible names — "No Lifer" (http://www.urbandictionary.com/define.php?term=No+Lifer)

»
8 years ago, # |
  Vote: I like it +26 Vote: I do not like it

I like the idea of achievements!!
Thanks for taking your time and creating achievements site.

but it's not been updated since Oct. 3, 2016!
Could you please start achievement crawling jobs?

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

    Thank you for your interest! I ran the jobs and achievements should be up to date now. There was a problem updating the ratings though (because of some CF API error) so at the moment ratings and colours on the site are outdated. Enjoy!

»
8 years ago, # |
  Vote: I like it +21 Vote: I do not like it

jump through the roof you get it when you get move from one color to two colors above i.e: a newbie gets to cyan in one contest

»
8 years ago, # |
  Vote: I like it 0 Vote: I do not like it

That was close: less than 5 points needed to upgrade