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.
It should be added to Codeforces!!))
And it will be great if for every achievement there will be badge for example.
I'd like to have badges myself, but I need somebody to draw them.
I have no idea how to get my self in the same room as tourist then make him unsuccessfully hack me
Sorry, can't help with that :-) At least you're in Div. 1 so you have the chance.
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.
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 :)
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.
nevertheless, this achievement is kind of achievements which all you can do to earn it is to just wait
From my experience — you may write some shitty code that miraculously works, and it will increase your chances :)
by the way , how can tourist get this achievement unlocked?
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 :)
And how to get successfull hack by worse :)
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.
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.
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"?
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.
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.
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.
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
tourist will never get achievement "You didn't even scratch me!"
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 :-)
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.
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:
Yeah, I see, thank you for the stats.
Impressive what people do in ranked contests!
Hi, I have added a tab 'by Level' for 'Polyglot' achievement: http://cfa.yuldashev.net/achievement/3
Now you can see the leaders yourself.
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.
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.
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.
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.
Finally there is achievement in programming that tourist can't unlock:)
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)
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.
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
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.
Speck in your brother's eye
Great idea!
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.
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)
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).
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.Good achievement! I've got WA on test 103 for problem 158B - Taxi. So I can give this achievement! :D
"THIS IS SPARTA!!!" — successful hack of locked solution that worth 1300 or more points. Exact threshold is debatable, ofc.
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:
Random strange idea: For getting lucky place (place number consists only of 4s and 7s)
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?"
Last time tourist win 150+ rating is in Codeforces Beta Round #8, and worse never lose 150+ rating in a contest. :P
It can be "Worse then worse". Or streak of 5/10/20 consecutive rating decreases.
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)
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.I think I_love_*** will not accept "I love Tanya Romanova".
I think that only Dreamoon will be "Dreamoon fan" ^3
http://cfa.yuldashev.net/achievement/6
Variety is the spice of life
Thanks 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.
Oh, I just did that problem in all languages, which were available on CF at that moment
And it was very exciting to do it!
Unlucky Luck
: Fail in system test of a contest for at least 3 problems!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.
I think, we need an achievement for hacking tourist.
Darn, I didn't see your comment before posting! D:
Yeah, one should be really talented to understand his code.
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!
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)
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?
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!
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 contestThat was close
: less than 5 points needed to upgradeГод назад я пилил свои ачивки, но бросил, так как код стал лапшой, а реализовать надо было больше, чем я написал к тому моменту.
Сейчас разбирал старые проекты и заметил, что проект до сих пор хостится. "World of Codeforces: Achievements" — https://shrek228.herokuapp.com/ (ну, лучше названия я не придумал для домена) Там для ачивок есть весь список юзеров, показ их ачивок, поиск. Вся информация актуальна на середину июня 2016 года. Вы просто можете посмотреть, какие ачивки могли бы быть в реализации marat.snowbear =)