### marat.snowbear's blog

By marat.snowbear, 7 years ago,

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...

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.

• +333

 » 7 years ago, # | ← Rev. 2 →   +14 It should be added to Codeforces!!))And it will be great if for every achievement there will be badge for example.
•  » » 7 years ago, # ^ |   +19 I'd like to have badges myself, but I need somebody to draw them.
 » 7 years ago, # |   +6 I have no idea how to get my self in the same room as tourist then make him unsuccessfully hack me
•  » » 7 years ago, # ^ |   0 Sorry, can't help with that :-) At least you're in Div. 1 so you have the chance.
•  » » 7 years ago, # ^ |   0 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.
•  » » » 7 years ago, # ^ |   +12 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 :)
•  » » » » 7 years ago, # ^ |   0 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.
•  » » » » » 7 years ago, # ^ | ← Rev. 2 →   0 nevertheless, this achievement is kind of achievements which all you can do to earn it is to just wait
•  » » » » » » 7 years ago, # ^ |   +13 From my experience — you may write some shitty code that miraculously works, and it will increase your chances :)
•  » » » » » » » 7 years ago, # ^ |   +3 by the way , how can tourist get this achievement unlocked?
•  » » » » » 7 years ago, # ^ | ← Rev. 2 →   +12 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 :)
•  » » 7 years ago, # ^ |   0 And how to get successfull hack by worse :)
 » 7 years ago, # |   +11 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.
•  » » 7 years ago, # ^ |   0 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.
 » 7 years ago, # |   +8 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"?
•  » » 7 years ago, # ^ |   0 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.
•  » » » 7 years ago, # ^ |   0 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.
•  » » » » 7 years ago, # ^ |   0 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.
•  » » 7 years ago, # ^ |   0 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
 » 7 years ago, # |   +5 tourist will never get achievement "You didn't even scratch me!"
 » 7 years ago, # |   +22 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 :-)
 » 7 years ago, # |   +5 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.
•  » » 7 years ago, # ^ |   0 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: Parsee_Mizuhashi — 6 languages watashi — 5 languages ant.ermilov — 5 languages
•  » » » 7 years ago, # ^ |   0 Yeah, I see, thank you for the stats.Impressive what people do in ranked contests!
•  » » » » 7 years ago, # ^ |   0 Hi, I have added a tab 'by Level' for 'Polyglot' achievement: http://cfa.yuldashev.net/achievement/3Now you can see the leaders yourself.
•  » » » 7 years ago, # ^ |   +13 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.
 » 7 years ago, # | ← Rev. 2 →   +13 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.
•  » » 7 years ago, # ^ |   0 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.
 » 7 years ago, # |   +5 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.
 » 7 years ago, # |   +28 Finally there is achievement in programming that tourist can't unlock:)
 » 7 years ago, # |   +14  Oct. 25, 2010: tourist got Tourist's path for solving 50 problems in Pascal or Delphi 
 » 7 years ago, # |   +14 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)
•  » » 7 years ago, # ^ |   0 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.
•  » » 7 years ago, # ^ |   0 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
 » 7 years ago, # | ← Rev. 2 →   +30 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.
•  » » 7 years ago, # ^ |   +8
 » 7 years ago, # |   +5 Great idea!
 » 7 years ago, # |   +22 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.
 » 7 years ago, # | ← Rev. 3 →   +19 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)
•  » » 7 years ago, # ^ |   +18 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).
 » 7 years ago, # |   +21 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.
•  » » 7 years ago, # ^ |   0 Good achievement! I've got WA on test 103 for problem 158B - Taxi. So I can give this achievement! :D
 » 7 years ago, # |   +3 "THIS IS SPARTA!!!" — successful hack of locked solution that worth 1300 or more points. Exact threshold is debatable, ofc.
 » 7 years ago, # |   +19 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: Get more points for hacking in a problem then the problem costs. Compete in N rounds in a row Random strange idea: For getting lucky place (place number consists only of 4s and 7s)
 » 7 years ago, # |   +20 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?"
•  » » 7 years ago, # ^ |   +10 Last time tourist win 150+ rating is in Codeforces Beta Round #8, and worse never lose 150+ rating in a contest. :P
•  » » » 7 years ago, # ^ |   +5 It can be "Worse then worse". Or streak of 5/10/20 consecutive rating decreases.
 » 7 years ago, # |   +24 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)
 » 7 years ago, # | ← Rev. 3 →   +46 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 -50The 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.
•  » » 7 years ago, # ^ |   +8 I think I_love_*** will not accept "I love Tanya Romanova".
•  » » 7 years ago, # ^ |   0 I think that only Dreamoon will be "Dreamoon fan" ^3
•  » » 7 years ago, # ^ |   0 http://cfa.yuldashev.net/achievement/6 Variety is the spice of lifeThanks for the idea, though I reduced it to 5 languages, there are only a couple of guys who were solving problems in 10+ languages. Interesting fact: one of them during Coder-Strike 2014 — Qualification Round implemented his solution for A problem in 15 languages.
•  » » » 7 years ago, # ^ |   +10 Oh, I just did that problem in all languages, which were available on CF at that momentAnd it was very exciting to do it!
 » 7 years ago, # |   0 Unlucky Luck: Fail in system test of a contest for at least 3 problems!
 » 7 years ago, # |   +27 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.
 » 7 years ago, # |   +42 I think, we need an achievement for hacking tourist.
•  » » 7 years ago, # ^ |   +16 Darn, I didn't see your comment before posting! D:
•  » » 7 years ago, # ^ |   +13 Yeah, one should be really talented to understand his code.
 » 7 years ago, # |   0 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!
 » 7 years ago, # |   0 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)
 » 6 years ago, # |   +26 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?
•  » » 6 years ago, # ^ |   +8 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!
 » 6 years ago, # |   +21 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
 » 6 years ago, # |   0 That was close: less than 5 points needed to upgrade