0.はじめに
こんにちは、中学3年生のsoraieです。
競技プログラミングをしていてAtCoder青だったりします。
記事で分からないことや不備などがあればTwitterで教えてください。
この記事では CodinGame
というサイトの Clash of Code
というコンテンツの楽しさを知ってもらい、皆さんに「始めたい」と思ってもらうのが目的です。
きっかけ
上でも書いた CodinGame
というサイトの Clash of Code
というコンテンツで日本一位をとりました。
今は結構抜かされて転落してしまっていますが、一瞬でも1位になることができてとても嬉しかったので Clash of Code
の楽しさを共有したいと思い、この記事を書くことにしました。
目次
章 | タイトル |
---|---|
0 | はじめに |
1 | CodinGameとは? |
2 | Clash of Codeとは? |
3 | Clash of Code を始めよう! |
4 | おわりに |
1. CodinGameとは?
CodinGame
は AtCoder
Codeforces
などのサイトのように出された問題を解くプログラムを作って他の人と競ったり、問題を解きながら技術を向上させることができるサイトです。たまに大規模な大会も開かれています。
問題はいくつかの分野に分かれていて具体的には
- AIを作って他人のものと競う
BOT programing
- アルゴリズムを使って問題を解く
ALGORITHMS
- 簡単な問題をルールに沿って解いて他人と競う
Clash of Code
などがあります。
BOT programing
BOT programing
はこの中で一番人気のあるコンテンツだと思います。自分の作ったAIが他の人と競い合うのを見るのはとても面白いです。大会が開かれるとき、問題は BOT programing
であることが多い気がします。
とても楽しいのですがかなり奥が深く、ここの記事に書こうとすると文が長くなりすぎてしまうことや、僕自身あまり詳しくないこともあるので、ここでは他の方の記事へのリンクを貼っておきます。
- 【CodinGame】ブラウザでコーディングの基礎からトレーニングできるサイト (疑似ゲーム開発環境を使って学べます。解答は25種類のプログラミング言語から選択して記述可能!)
- CodinGame はBOT(AIプログラム)でバトルするのが正しい楽しみ方かもしれません
ALGORITHMS
ALGORITHMS
の問題の難易度は AtCoder
Codeforces
などの競技プログラミングサイトと比べると非常に簡単になっています。
競技プログラミングを普段している人はつまらないと感じてしまうかもしれません。
しかし、問題によってはテストケースを実行するとそれに応じて左上の画面が動くものがあり、これは見ていて結構面白いです。
Clash of Code
これから説明します。出された問題を解くところは AtCoder
Codeforces
などと似ていますが、ルールが一風変わっていて普段競技プログラミングをしている人でも楽しめるようになっていると思います。
また、 CodinGame
の中には世界中の人と会話できるチャットもあり、分からないことがあれば質問をすることができます。結構優しい人が多いです。(体験談)
2. Clash of Codeとは?
上でも書いた通り出された問題をルールにしたがって解くものです。
毎回のゲームの結果(順位)に応じて自分のレートが上下します。
では Clash of Code
と AtCoder
Codeforces
の異なる点は何でしょうか?
それをいくつか説明します。
常時開催されている
Clash of Code
は 常時開催 されています。参加者が8人集まるとゲームが開始されます。いつでも好きな時に参加することができます。
モードが複数ある
出された問題に対してそれを解くプログラムを時間内に書くということは同じなのですが、それらに加えて以下の3つのモードのうちどれかが選択されます。
選択されたモードに応じてコードを書きます。
-
fastest mode
できるだけ速く問題を解く -
reverse mode
問題文が 与えられない のでテストケースだけを見て問題をできるだけ速く解く -
shortest mode
できるだけ短いコードで問題を解く
いわゆるコードゴルフ
fastest mode
は AtCoder
Codeforces
と似ていますね。
しかし shortest mode
,reverse mode
はあまり馴染みがないのではないでしょうか?
時間が短い
一般的なプログラミングコンテストは問題 3~9 問ほどを 1~2 時間で解くというものが多いと思いますが、Clash of Code
は問題1問を15分で解きます。15分の間にコードを書いたり、shortest mode
の場合にはもっとコードを短くできないかを検討したりします。
時間が短いので気軽に参加することができます。
作問がかなり気軽にできる
これは異なる点といっていいのか分かりませんが、 Clash of Code
では問題をかなり気軽に作ることができます。
問題を作って3人の人に認めてもらえばすぐにそれが出題されます。私は自分で作った問題がその日のうちに出題されるという経験をしたことがあります。
3. Clash of Code を始めよう!
ある程度他のサイトとの違いが分かったと思うので、ここからは Clash of Code
を始めるに当たってのサポートをしたいと思います。
3-1. ゲームの流れ
ゲームの流れとしては、
-
Clash of Codeのページに行き、
Join a 5min coding battle!
というところをクリック -
8人集まるかホストがスタートするとゲームが始まります
-
始まったら問題とモードを確認する
-
問題を解いて手元でテストケースを確認する
-
提出して自分の結果を確認
という感じです。
- 左上にモードと残り時間
- その下に問題文
- 左下に他の人の状況
- 右にIDE(コードを書く場所)
- コードを書き終わったら右下の
PLAY ALL TESTCASES
でテスト
という感じです。
今回のゲームのモードは fastest mode
なので他の人よりも速くコードを書かなければいけません。
「これで大丈夫!」というコードが書けて、テストケースも全て試したら SUBMIT
ボタンを押して結果を確認しましょう。
結果画面はこんな感じです。
負けてますが何か!?!?!?!?
結果画面では他の人の結果、もしその人が許可しているならばその人のコードを見ることができます。
今回私は8人中3位で多分これはレートが下がってしまいます。
しかし、レートが下がったところで一回のゲーム時間は高々15分なのでまた別のゲームに参加してレートを戻すことができるのですのです。
ですので、ここでレートが下がったところで痛くもかゆくもありません。(嘘)
3-2. 実践的なこと
さて、ここまでの説明で Clash of Code
がどのようなものか、ゲームの流れはどんな感じか、ということがなんとなく分かったかと思います。
ここからは Clash of Code
で上位に入っていくためにしたこと、各モードにおける基本的な戦略を書いておきます。
もちろん、以下に書いている戦略に無理に従う必要はありません。以下に書いてあることはあくまで私がしたことです。
新しく言語を学んだ
これは Clash of Code
のために学んだという訳ではないのですが、Python
,Ruby
を少し書けるようになりました。
普段 AtCoder
のコンテストでは 多くの人が C++
でコードを書いています。しかし、C++
では Clash of Code
の上位に入っていくのは少し難しいかもしれません。
これは、C++
ではコードを書く時間が他の言語と比べて長くなってしまう、コードが長くなってしまうためです。
shortest mode
ではこの影響は顕著に現れます。また、このほかのモードでもかなりの影響があります。
コードを書くときに C++
以外の言語のほうが多くのメソッドがあり、有利だと実感することが多いです。例えば、入力された n の各桁の和を求めたいときに
C++
だと
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
int sum_of_digits = 0;
while(n){
sum_of_digits += n % 10;
n /= 10;
}
cout << sum_of_digits << endl;
}
と書かなければいけませんが、
ruby
では
p gets.to_i.digits.sum
と書くだけでいいです。
Clash of Code
は問題があまりにも単純なので、 C++
で速くコードを書くことに自信がある人も勉強してでも別の言語をほうが順位が伸びやすいかもしれません。
強い言語
Clash of Code
で強い言語をいくつか書いておきます。
Python
Ruby
Perl
Javascript
これらの言語が書けるととても強いです。
CodinGame
では Javascript
の入出力をサポートをする readline
関数と print
関数があり、これがかなり強いです。
各モードの戦略
fastest mode
まず問題文を読まずにテストケースを少し見てみます。テストケースからどんな問題か分かった場合はコードを書きましょう。テストケースを見ても分からない場合に問題文を見ればいいです。
問題文を読むときは Output
の部分を見ると出力しなければいけないものが書いてある場合があります。
このモードでは Python
で提出することが多いです。
たまに正規表現が使いたい時に Ruby
で提出します。
shortest mode
15分フルに使えるのでとりあえず問題を読みながらどうすれば短いコードを書けるかを考えます。
自分の知ってるメソッドを頭に思い浮かべて書いてみて色々な言語で書いたり他の解法で書いたりします。
このモードでは Python
,Ruby
で提出することが多いです。たまに Bash
を使うこともあります。
Perl
を使う人も多少いるようです。
言語名 コードゴルフ
で調べるとその言語でコードを短く書くテクニックが出てきますので調べてみるとよいでしょう。
また、近いうちに同級生の @souta_1326 君が shortest mode
の攻略記事を出すらしく、その記事が出たらこの下にリンクを貼るのでそれも見てみてください。
2021/6/8 22:06 追記 記事が出されました!
リンク
reverse mode
このモードが一番好きです。何故なら問題文がないので英語を読む必要がないからです!!(英弱ですみませんでした)
テストケースを見て解法を考えます。これに関してては勘だけが頼りで、結構ギャンブル要素が強いです。
このモードでは Python
で提出することが多いです。
総合的なこと
説明していませんでしたが、これらのモードではいずれも正答数が第一です。速く解こうと意識しすぎてミスをしてしまっては良い順位は出ず、本末転倒です。
これを防ぐためにテストケースは絶対に全部試しましょう。試さないと大変なことになります。(自戒)
また、 shortest mode
で短く書こうと意識しすぎて結局コードが書き終わらないということもあってはなりません。
4. おわりに
Clash of Code
はとても単純で面白いゲームです。ごくたまにヤバい問題(語彙力)が来たり、途中で回線が切れたり(これは自分の責任です)するとキレますがとても楽しいです。
普段競技プログラミングをしている人なら簡単にレートが上がると思いますので是非一度息抜き感覚で遊んでみてはいかがでしょうか?
それではまた別の記事で会いましょう!良い競技プログラミングライフを!