日記

のみろぐ

主に競プロ日記です

AtCoderにおける言語ごとの提出率

まえがき

調査結果

  • 下の円グラフは、AtCoderでACした提出の言語ごとの割合です。
  • C++は6割を占める圧倒的シェア数です。

言語ごとの提出割合(円グラフ)

C++競技プログラミングをすることの利点

結論


  • この下はおまけ

提出言語ランキング詳細

  • 以下の表はAtCoderでACした提出の言語ごとのランキング詳細です。
  • ACした提出は全部で1413562個でした。
順位 言語 提出数 割合(%)
1 C++ 895284 63.335
2 Python 193847 13.713
3 Java 96232 6.808
4 C 54129 3.829
5 Ruby 42918 3.036
6 C# 35346 2.5
7 Haskell 17511 1.239
8 Rust 10057 0.711
9 D 8873 0.628
10 PyPy 6509 0.46
11 Go 6186 0.438
12 PHP 5652 0.4
13 JavaScript 4399 0.311
14 Scala 4385 0.31
15 Perl 3992 0.282
16 OCaml 3440 0.243
17 Kotlin 3093 0.219
18 Pascal 2806 0.199
19 Bash 2786 0.197
20 Nim 2652 0.188
21 Text 2416 0.171
22 Common Lisp 1437 0.102
23 Awk 1365 0.097
24 Brainfuck 830 0.059
25 Julia 740 0.052
26 Fortran 732 0.052
27 Scheme 728 0.052
28 Sed 551 0.039
29 Perl6 528 0.037
30 Octave 515 0.036
31 F# 439 0.031
32 Visual Basic 423 0.03
33 Clojure 355 0.025
34 IOI-Style C++ 328 0.023
35 Crystal 305 0.022
36 TypeScript 264 0.019
37 Swift 243 0.017
38 Standard ML 238 0.017
39 COBOL - Free 232 0.016
40 Objective-C 210 0.015
41 Lua 178 0.013
42 MoonScript 152 0.011
43 LuaJIT 88 0.006
44 COBOL - Fixed 63 0.004
45 Ceylon 54 0.004
46 Unlambda 51 0.004

調査について

調査したもの

  • AtCoderにおける言語ごとの提出率

使用したもの

調査方法

  • プログラムでAPIを叩いて結果を集計した。
  • 言語はGoを使用した

ソースコード

package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "sort"
)

// 言語ごとのAC数を表す構造体。APIを叩いて受け取るJSONがこの形式
type AcceptedCountForEachLanguages struct {
    UserID   string `json:"user_id"`
    Language string `json:"language"`
    Count    int    `json:"count"`
}

// 最終結果の構造体
type Result struct {
    Language string
    Count    int
}

func main() {
    // GETリクエストを送る
    response, err := http.Get("https://kenkoooo.com/atcoder/atcoder-api/info/lang")
    if err != nil {
        log.Fatal(err)
    }

    // JSONを構造体のスライスにパースする
    var acceptedCountForEachLanguages []AcceptedCountForEachLanguages
    byteArray, _ := ioutil.ReadAll(response.Body)
    json.Unmarshal(byteArray, &acceptedCountForEachLanguages)

    // 言語ごとの提出数をカウントする
    languageCount := make(map[string]int)
    for _, user := range acceptedCountForEachLanguages {
        languageCount[user.Language] += user.Count
    }

    // ソートするために構造体の配列を作る
    var results []Result
    for language, count := range languageCount {
        results = append(results, Result{Language: language, Count: count})
    }

    // resultをカウントが多い順にソートする
    sort.Slice(results, func(i, j int) bool {
        return results[i].Count > results[j].Count
    })

    // 結果を出力する
    for _, result := range results {
        fmt.Println(result.Language, result.Count)
    }

}