問題概要

問題概要PDFのダウンロード用リンク


API仕様

以下の5種類のAPIを使用してゲームに参加します。

GET /api/game
GET /api/stage/<game_id>
GET /api/claim/<token>/<game_id>/<row>-<col>-<size>
GET /api/areas/<token>/<game_id>
GET /api/ranking/<token>/<game_id>

<token> は ポータルサイトトップに記載されています。


GET /api/game

進行中のゲーム情報を取得するAPIです。

リクエストの例
GET /api/game
レスポンス

レスポンスは以下の形式で返却されます。

game_id
T

game_id, T は整数です。
game_id は進行中のゲームのIDを表します。進行中のゲームが存在しない場合、 game_id-1 となります。
T はそのゲームの残り時間をミリ秒単位で表します。

レスポンスの例
2
102486

GET /api/stage/<game_id>

マップ情報を取得します。
返却される内容はゲーム中に変化しません。

リクエストの例
GET /api/stage/2
レスポンス

レスポンスは以下の形式で返却されます。

N
V[0][0] V[0][1] ... V[0][N-1]
V[1][0] V[1][1] ... V[1][N-1]
      :     :           :
V[N-1][0] V[N-1][1] ... V[N-1][N-1]

N, V[i][j] は整数です。 V[i][j]i 行目 j 列目の領域の価値を表します。

制約
  • N は 20
  • V[i][j] は 1 以上 1000 以下
レスポンスの例
20
836 70 348 327 722 549 289 924 189 389 72 445 881 151 280 71 43 181 68 155
640 886 299 166 833 235 611 846 631 650 759 236 497 861 394 806 776 525 464 561
335 356 768 365 603 656 550 285 568 597 619 820 360 489 555 538 79 752 161 368
476 693 228 268 871 663 361 761 457 677 777 213 987 5 695 596 526 477 144 68
518 351 268 470 510 101 972 331 859 672 171 393 591 351 402 56 802 633 985 179
48 372 684 784 889 683 866 434 994 685 127 453 351 345 214 741 592 39 702 137
156 431 159 424 503 140 389 490 829 734 113 643 686 175 232 124 723 401 858 390
724 815 161 413 898 271 444 889 228 369 808 781 511 859 591 459 678 63 672 10
528 226 439 212 452 855 214 147 140 515 683 303 40 461 519 978 686 753 558 895
465 50 121 84 732 400 350 479 251 521 493 859 520 552 277 853 684 720 844 285
250 850 517 266 624 702 424 684 129 360 35 985 860 853 340 618 161 877 624 463
326 627 834 157 186 662 925 327 523 813 983 181 115 198 876 880 853 485 479 75
135 643 891 976 782 310 680 344 100 799 921 26 850 723 286 706 627 849 990 633
885 888 742 296 535 349 471 62 699 646 20 422 665 724 996 13 154 55 32 752
95 603 248 999 547 806 784 926 662 786 298 978 499 883 614 390 63 779 44 442
534 753 70 474 799 775 496 406 370 396 342 935 161 219 466 421 630 264 225 76
10 288 315 571 471 746 519 817 45 348 98 499 267 936 649 691 835 311 40 777
450 66 465 398 472 272 245 229 365 575 142 195 936 314 313 957 824 12 111 956
974 609 460 269 64 12 348 457 788 206 949 60 409 372 650 799 946 72 121 346
140 288 434 844 132 998 572 176 659 590 726 102 290 614 104 432 761 162 732 418

GET /api/claim/<token>/<game_id>/<row>-<col>-<size>

領域を取得するAPIです。
row 行目から (row+size-1) 行目の、 col 列目から (col+size-1) 列目の領域を取得します。

row, col は 0 オリジン であることに注意してください。

領域取得の後、領域取得時間が経過するまで次の領域取得ができません。
領域取得時間は (size+1)*(size+1)*125 ミリ秒です。
サーバは、次の領域取得が可能になるまでの時間が 4000 ミリ秒以下だった場合、可能になるまで領域取得の処理開始を待ちます。
サーバは領域取得が完了するとレスポンスを返します。

リクエストの例
GET /api/claim/0b0a6879d1d7b.../2/2-3-10
レスポンス(成功時)
ok
レスポンス(時間制限に抵触した場合)
claim_time_limit

次の領域取得が可能になるまでの時間が 4000 ミリ秒を超える場合、 claim_time_limit を返します。
また、処理開始を待っている間に他の領域取得が行われた場合、 claim_time_limit を返します。

レスポンス(ゲーム終了時)
game_finished

既にゲームが終了している場合、 game_finished を返します。
また、領域を取得しようとする時刻からゲーム終了までの時間が、領域取得時間未満だった場合、 game_finished を返します。


GET /api/areas/<token>/<game_id>

領域の取得状況を取得するAPIです。

リクエストの例
GET /api/areas/0b0a6879d1d7b.../2
レスポンス

レスポンスは、時間制限に抵触していない場合、以下の形式で返却されます。

ok
A[0][0] A[0][1] ... A[0][N-1]
A[1][0] A[1][1] ... A[1][N-1]
      :     :           :
A[N-1][0] A[N-1][1] ... A[N-1][N-1]
B[0][0] B[0][1] ... B[0][N-1]
B[1][0] B[1][1] ... B[1][N-1]
      :     :           :
B[N-1][0] B[N-1][1] ... B[N-1][N-1]

A[i][j], B[i][j] は整数です。
A[i][j] は、 i 行目 j 列目の領域を自分を含めて A[i][j] 人が取得していることを表します。
B[i][j] は、 i 行目 j 列目の領域を自分が取得しているかを表します。取得している場合は 1 、取得していない場合は 0 となります。

時間制限に抵触している場合、以下の形式で返却されます。

too_many_request
時間制限

この API は 500 ミリ秒に 2 回に制限されます。
ビジュアライザは、およそ 1000 ミリ秒に 1 回このAPIを使用するのでご注意ください。

レスポンスの例
ok
1 1 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0
1 1 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0
0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0
0 0 0 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 2 2 2 2 2 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 2 2 2 2 2 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 2 2 2 2 2 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 2 2 2 2 2 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 2 2 2 2 2 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 2 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

GET /api/ranking/<token>/<game_id>

特定のゲームのランキング上位を取得します。
ビジュアライザが表示するランキング情報です。

リクエスト例
GET /api/ranking/0b0a6879d1d7b.../2 
レスポンス

レスポンスは、時間制限に抵触していない場合、以下の形式で返却されます。

ok
user_id
N
U[0] P[0]
U[1] P[1]
:
U[N-1] P[N-1]
R
S

user_id, U[i] は文字列 (user_id) です。
N, R は整数です。
P[i], S は実数です。

user_id は自分の user_id です。
N はレスポンスで返す人数を表します。
P[i] は、そのゲームにおける U[i] のスコアを表します。
R は自分の順位(1オリジン)を表します。
S は自分のスコアを表します。

スコア計算には数秒の遅延があります。

時間制限に抵触している場合、以下の形式で返却されます。

too_many_request
制約
  • N は 10 以下
時間制限

この API は 500 ミリ秒に 2 回に制限されます。
ビジュアライザは、およそ 1000 ミリ秒に 1 回このAPIを使用するのでご注意ください。

レスポンス例
ok
user10080
10
user47059 1329.9749999999999
user86289 1143.375
user79607 1143.375
user77170 1143.375
user61900 1143.375
user43790 1143.375
user27781 1143
user25676 1143
user99997 941.79999999999995
user97142 941.79999999999995
15
683.83333333333

サンプルコード

マスをランダムに取得し、点数を計算するサンプルプログラムです。

TOKEN 変数を書き換えて実行してください。


Go, Python, C#, C++(通信はPython) のサンプルコードがあるリポジトリはこちら