OpenSiv3D Challenge 2022
OpenSiv3D Challenge 2022 について
- 開始日 2022 年 7 月 31 日(課題は毎週追加されます)
OpenSiv3D の新機能を作るいくつかのチャレンジ課題 の中から好きなものを選び、Siv3D Discord サーバ 内の専用のチャンネルに参加し、メンバーどうし協力 or 競争しながら実装の完成を目指すイベントです。優先的なコードレビューや実装のアドバイスなど、技術サポートを受けられます。
それぞれのチャレンジは目標が達成されるまで続きます。チャンネルにおいて何らかのアウトプットをした全員の名前が、OpenSiv3D 公式リポジトリのソースコード内に記載され、とくに顕著な貢献があった方はコミッタとして記録に残ります。
もし、ほかの参加者の実装が良さそうであっても、練習として自分なりに実装したオリジナルの成果をチャンネルに投稿してみることを推奨しています(貢献としてカウントされます)。チャレンジを盛り上げるため、実装した内容などを #Siv3D タグを使って Twitter に投稿しましょう。
昨年の OpenSiv3D Challenge 2021 では 9 つのチャレンジを実施し、うち 4 つの成果物が OpenSiv3D に実装されました。
Challenge 15 | 競プロの知見を Siv3D に! データ構造とアルゴリズム
競技プログラミングの世界で使われるような洗練されたデータ構造やアルゴリズムには、Siv3D によるアプリ・ゲーム開発においても便利で多くのユーザに役立つものが含まれています。
本課題では、具体的なデータ構造やアルゴリズムを取り上げ、
- Siv3D でどのようなアプリやプログラムを作るときに役立つか
- どのような API 設計(クラス / 関数のデザイン)で提供すると汎用的で使いやすいか
- どのような実装方法が高速であるか
について議論し、データ構造やアルゴリズムに関する複数の新機能を将来の Siv3D に導入することを目指します。
Discord サーバチャンネル
本課題に関する議論は、Siv3D Discord サーバの下記チャンネルで行います。
#ch15-データ構造とアルゴリズム
実装の提案方法
Main.cpp に、プロトタイプとなる実装と、そのテストやサンプルを記述し、提案してください。
初期実装はできるだけコンパクト(100~200 行以下)であることが望ましいです。
# include <Siv3D.hpp> // OpenSiv3D v0.6.4
namespace s3d
{
// ここに提案実装
}
void Main()
{
// 提案実装のテストやサンプルコード
while (System::Update())
{
// 提案実装のテストやサンプルコード
}
}
お役立ち情報
- OpenSiv3D v0.6.4 で実装された DisjointSet (Union-Find) クラスのコード
- その他実装済みのクラス
-
Array
,String
,HashSet
,HashMap
,KDTree
-
ポイント
- どのようなプログラムを作るときに便利であるのか説明・実演できると、そのデータ構造やアルゴリズムが採用されやすくなります
- Siv3D のクラスと親和性の高い API が望ましいです(
Array
やPoint
,Rect
などの使用) -
[[nodiscard]]
やnoexcept
など API の細かい部分は最後に仕上げを行うので、提案時に気を付ける必要はありません
より完成度を高めるために
- 参考: AC(AtCoder) Library (GitHub)