Блог пользователя marat.snowbear

Автор marat.snowbear, 9 лет назад, По-английски

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.

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

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

It should be added to Codeforces!!))

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

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

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

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

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

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 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.

    • »
      »
      »
      9 лет назад, # ^ |
        Проголосовать: нравится +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 :)

      • »
        »
        »
        »
        9 лет назад, # ^ |
          Проголосовать: нравится 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.

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

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

        • »
          »
          »
          »
          »
          9 лет назад, # ^ |
          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 :)

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

    And how to get successfull hack by worse :)

»
9 лет назад, # |
  Проголосовать: нравится +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.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 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.

»
9 лет назад, # |
  Проголосовать: нравится +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"?

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 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.

    • »
      »
      »
      9 лет назад, # ^ |
        Проголосовать: нравится 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.

      • »
        »
        »
        »
        9 лет назад, # ^ |
          Проголосовать: нравится 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.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 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

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

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

»
9 лет назад, # |
  Проголосовать: нравится +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 :-)

»
9 лет назад, # |
  Проголосовать: нравится +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.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 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:

    1. Parsee_Mizuhashi — 6 languages
    2. watashi — 5 languages
    3. ant.ermilov — 5 languages
»
9 лет назад, # |
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.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 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.

»
9 лет назад, # |
  Проголосовать: нравится +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.

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

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

»
9 лет назад, # |
  Проголосовать: нравится +14 Проголосовать: не нравится
 Oct. 25, 2010: tourist got Tourist's path for solving 50 problems in Pascal or Delphi 
»
9 лет назад, # |
  Проголосовать: нравится +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)

»
9 лет назад, # |
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.

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

Great idea!

»
9 лет назад, # |
  Проголосовать: нравится +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.

»
9 лет назад, # |
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)

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +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).

»
9 лет назад, # |
  Проголосовать: нравится +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.

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

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

»
9 лет назад, # |
  Проголосовать: нравится +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:

  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)

»
9 лет назад, # |
  Проголосовать: нравится +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?"

»
9 лет назад, # |
  Проголосовать: нравится +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)

»
9 лет назад, # |
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 -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.

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

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

»
9 лет назад, # |
  Проголосовать: нравится +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.

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

I think, we need an achievement for hacking tourist.

»
9 лет назад, # |
  Проголосовать: нравится 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!

»
9 лет назад, # |
  Проголосовать: нравится 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)

»
7 лет назад, # |
  Проголосовать: нравится +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?

  • »
    »
    7 лет назад, # ^ |
      Проголосовать: нравится +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!

»
7 лет назад, # |
  Проголосовать: нравится +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

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

That was close: less than 5 points needed to upgrade

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

Год назад я пилил свои ачивки, но бросил, так как код стал лапшой, а реализовать надо было больше, чем я написал к тому моменту.

Сейчас разбирал старые проекты и заметил, что проект до сих пор хостится. "World of Codeforces: Achievements" — https://shrek228.herokuapp.com/ (ну, лучше названия я не придумал для домена) Там для ачивок есть весь список юзеров, показ их ачивок, поиск. Вся информация актуальна на середину июня 2016 года. Вы просто можете посмотреть, какие ачивки могли бы быть в реализации marat.snowbear =)