vstrimaitis's blog

By vstrimaitis, history, 6 years ago, In English

Hi!

As you probably know, there are some great websites for examining various statistics about past Google Code Jam rounds (e.g. https://a2oj.com/CodeJamTools/ or https://www.go-hero.net/jam). However, the last rounds these sites have are from the year 2017. I don't know for sure, but this might have something to do with the fact, that in 2018 Google launched their new Code Jam system and probably changed their APIs as well.

Long story short, I spent some time reverse-engineering the APIs and created a simple script to retrieve some data about various Google Code Jam rounds using the new API, as well as a simple website for viewing some statistics of round from 2018 and up. You can find the website here: https://vstrimaitis.github.io/google_codejam_stats/.

Here are some features which are currently supported:

  • Some numerical stats (number of participants, number of perfect scores, etc.)
  • Some charts (Top countries by number of participants / average score / most top-scorers, score distribution)
  • Full scoreboard
  • Ability to filter by country

The website is still in its early development stages and supports only some basic stats. If you have any suggestions of what else could be added to the site, don't hesitate to share, or (even better) submit a pull request! The code can be found at https://github.com/vstrimaitis/google_codejam_stats.

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

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

You rock! Work great on Firefox and very user friendly, especially the search option. Kudos man

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

Are you reloading whole data from Google every time user requests to see data? If so, I recommend you to archive old contest data in your storage so it can be loaded faster.

  • »
    »
    6 years ago, # ^ |
    Rev. 3   Vote: I like it +5 Vote: I do not like it

    Round data is loaded from a locally saved json file. The reason for this is that Googe’s API (at least as much as I’ve tried) returns at most 200 entries in one request. So what I do right now is:

    1. Run a script to download the whole data for a round in 200 entry increments once
    2. Save all of the entries as a json file
    3. Use this file in the website to display the stats

    I know this is not the best way to go about it, but since I’m hosting on Github pages and it only allows static websites, I cannot use things like a database.

    Hope that clears things up :)

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

      That's great! I suggest adding submissions and task links as an improvement :)

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

        I will check if such data is available through the API when I have some spare time, thanks!

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

So long story short, you made the scoreboard usable? Sounds amazing :)

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

Great job vstrimaitis, finally someone did it!

IMHO a nice addition would be a table of countries with number of participants from each round, something like this: https://www.go-hero.net/jam/17/regions

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

    Thanks! I agree, this looks like an interesting slice on the data. I'm pretty sure this is doable, I'll try to get to it when I have some free time :)

»
6 years ago, # |
  Vote: I like it -15 Vote: I do not like it

can you tell how many from India qualified for round 2

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

    Click the link, choose India in the drop-down list and add the 3 numbers from 1A, 1B and 1C yourself.

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

    I got it thanks

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

Ačiū!

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

Can you please tell what all I need to learn to build something like this .thanks

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

Great job!

There is only one thing that I'm missing: the option to search for a user and see the results over different rounds.

As I don't see an efficient way to do this in pure JavaScript, I built my own: see here. It might take some seconds to load, when it was inactive for 30 minutes (free hosting) and the UI doesn't even look remotely as nice as yours. But it has a search function.

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

    Looks great, and works pretty fast, too :) How do you store the data to make it efficient like that?

    Also, maybe it would be possible to expose your part as a REST API endpoint and consume it from the UI, if you'd want to integrate into my stats page?

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

      It's a Django project with an SQLite database. I've never tried to open an API for something like that, but should be doable.

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

        Well, if you ever decide to do it and want to integrate, drop me a message (or submit a PR, whichever way you prefer)!