{"id":19523305,"url":"https://github.com/niklasb/ctf-glicko2","last_synced_at":"2026-03-02T07:01:31.764Z","repository":{"id":141703587,"uuid":"77794768","full_name":"niklasb/ctf-glicko2","owner":"niklasb","description":"Source code for Glicko-2 rating app for CTF teams 2016.","archived":false,"fork":false,"pushed_at":"2017-01-01T20:26:50.000Z","size":377,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-26T00:49:58.030Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://kitctf.de/glicko2/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/niklasb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-01-01T20:11:47.000Z","updated_at":"2020-04-01T13:31:42.000Z","dependencies_parsed_at":"2024-04-19T05:30:33.564Z","dependency_job_id":null,"html_url":"https://github.com/niklasb/ctf-glicko2","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/niklasb/ctf-glicko2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niklasb%2Fctf-glicko2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niklasb%2Fctf-glicko2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niklasb%2Fctf-glicko2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niklasb%2Fctf-glicko2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/niklasb","download_url":"https://codeload.github.com/niklasb/ctf-glicko2/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niklasb%2Fctf-glicko2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29994618,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-02T01:47:34.672Z","status":"online","status_checked_at":"2026-03-02T02:00:07.342Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-11T00:42:59.729Z","updated_at":"2026-03-02T07:01:31.616Z","avatar_url":"https://github.com/niklasb.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Experiments with Glicko-2 to Rate CTF Teams\n\nAuthor: [niklasb](https://twitter.com/_niklasb)\n\n![Example Glicko-2 CTF Rating 2016](https://kitctf.de/public/glicko2-example.svg)\n\nIf you want to play around with your own parameters and see the results, you can use\n[my web app](https://kitctf.de/glicko2/).\n\n## What is this?\n\nThis is an application of the\n[Glicko-2](http://www.glicko.net/glicko/glicko2.pdf) rating system to the\nCTFTime data from 2016, using the [multiplayer implementation by\nMatt Sewall](https://github.com/ms2300/multiplayer-glicko2). I scraped the\nscoreboards from all 2016 CTFs and applied the ranking to it.\n\nTo counter the fact that some teams play with vastly different numbers of\nplayers on different events, I applied some modification to the original\nscheme:\n\n* Only the top `max_top` teams are considered for each event. The assumption is\nthat these teams obviously *tried* to achieve a good result, so it's useful to\ncompare their result against other top teams.\n* Optionally, we can exclude teams that achieved less than `score_percentile`\npercent of the score achieved by the winning team\n* To counter some of the massive rating loss that some teams would experience\nby just a few bad events, we add a damping factor that only applies to\nnegative rating deltas. I.e. if a team would normally lose X rating points,\nwe multiply that by the damping factor before appying the delta. This leads\nto some rating inflation of course, depending on the value.\n\nMy own experiments and intuition show that these values might be a good\nstarting point for experimentation:\n\n* `max_top = 20`\n* `score_percentile = 0` (because `max_top` is small enough)\n* `negative_damping = 0.7` (negative deltas are only counted 70%)\n* `(initrat, initrd, initvol) = (1500, 100, 0.1)` (these are the standard\n  Glicko-2 parameters)\n\n\n## TODO + Known Limitations\n\n* Currently we don't order events by date, but by ID\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fniklasb%2Fctf-glicko2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fniklasb%2Fctf-glicko2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fniklasb%2Fctf-glicko2/lists"}