Rustコトハジメ

プログラミング言語Rustと競プロに関する情報をお届けします。

おれの競プロライブラリが一日に1回くらいクローンされてる件に感謝

競技プログラミングは、外野がおそらくそう想像しているように、ライブラリを組み合わせてはい終わりという問題はほぼないものの、一方で、その解法の中で特定のデータ構造がないと解けないということがよくあります。例えば、セグメントツリーなんかは、コンテスト中に実装することはほぼ無理です。グラフアルゴリズムDijkstra法とかKraskal法(これにはUnion Findが必要ですが)くらいだったらささっと実装出来るかも知れませんが、最大流問題あたりになるとコンテスト中にアルゴリズムを実装することはほぼ不可能ですし、なにより不毛です。

というわけで、コンテストに参加する人はおのおの、競プロライブラリを持っているわけですが、おれのライブラリは一日で平均すると1回くらいはクローンされています。ありがたいことです。1回というのは少ないようですが、競プロの人口を考えると結構多いと思います。

github.com

おれの方針としては、これは抽象化して持っておくと便利だなと思ったら、必ずライブラリ拡充に手を戻しておくことにしています。そもそもおれは、競プロの、「一枚のソースコードで提出せよ」方針は、現実的にはそうするしかないということはわかりますが、良いものと思っていませんし、同じようなコードを何度も書くことは無価値なことだと思っているため、出来るだけ手数が少なく書きたいと思っています。それが、今おれはAtCoderが1000程度でCFが1500程度ですが、それに比べるとライブラリの充実度はより高レート臭がすると思います。

そのため、今の段階ではライブラリ拡充に時間がとられて問題埋めが進まないということがあるのですが、それはしょうがないコストだと思っています。例えばこの前は、自前でスキップリストを作っていました。Rust標準のBTreeMapがバージョン1.15の段階では機能不足だからです。

www.rustforbeginners.com

しかしそんな中でも、クローンされることは励みになっています。

競プロという比較的言語知識が不要な分野からRustを広めることが目標の一つでもあるからです。

cargo-snippetsの存在も、Rustで競プロの普及には大いに貢献していることでしょう。おれのライブラリもこれを使っているため、VSCodeでライブラリのスニペット入力が出来ます。これはとても快適なことです。

www.rustforbeginners.com

次は、プルリクエストがあると良いなと思います。待ってますね。