はじめに
Codewars というサイトをご存知でしょうか
いろんな言語のアルゴリズム問題を解くことができるサイトです。
類似するサイトで有名なものだと「AtCoder」や「Paizaラーニング」があります。
Codewarsのオススメな点
個人的には、アルゴリズム問題サイトで一番オススメです。
時間制限がないから、学習に集中できる
PaizaラーニングやAtCoderは時間が計測されます。
また、Paizaラーニングでは時間制限があります。
私的な話になりますが、時間が計測されていると集中ができません。
また、
- 「雑に書いても早くしたい」
- 「ミスの可能性とトレードオフに、スピードを求める」
ということが起こります。
これは学習とは真逆です。
また、実際の開発においても不要な考えだと思います。
この点、CodeWarsには時間制限がないため、のびのびと学ぶことができます。
トライ&エラーできて、学びの効率が良い
PaizaラーニングとAtCoderはどちらも提出してからテストが入ります。
提出してみないと正しいかどうかがわかりません。
学習という面から見れば、非効率的です。
「トライ&エラーのコストが低い」というのはプログラミングの良いところです。
Codewarsではテストコードが用意されており、いつでもテストをすることができます。
また、テストコードを書き足すこともできます。
「間違いながら学ぶ」ことができる環境です。
他ユーザーの回答から学べる
Codewarsでは他のユーザーの回答を見ることができます。
さらに、いわゆる「いいね」ボタンが2種類あります。
「Best Practice
(実用的)」と「Clever
(天才)」ボタンです。
例題です。
与えられた配列から「最大値」と「最小値」を除き、合計してください
ただし、「要素が一つだけ」「空の配列」や「null
」の場合は0
を返してください
例
{ 6, 2, 1, 8, 10 } => 16
{ 1, 1, 11, 2, 3 } => 6
この問題、シンプルに解くと以下の形です
def sum_array(arr)
return 0 if arr.nil? # nilの場合は0を返す
return 0 if arr.empty? # emptyの場合は0を返す
return 0 if arr.length <= 1 # 要素数が1以下なら0を返す
min = arr.min
max = arr.max
arr.sum - (min + max) # 合計から最大値と最小値をマイナスする
end
では Best Practice
/ Clever
の回答を見てみましょう
たくさんの点で発見があり、楽しく学ぶことができます。
Paizaラーニングでは、他の回答を見ることができず、せっかく問題を解いても振り返りや学びができません。
オススメ理由まとめ
- 時間制限がないから、学習に集中できる
- トライ&エラーできて、学びの効率が良い
- 他ユーザーの回答から学べる
Paizaラーニングは 「スキルをアピールしたい就活者」と「事前にスキルを知りたい企業」をマッチングさせる面が強いです。
AtCoderは「競技プログラミング」の本場であり、「学習」がメインではありません。
その点で、学習を主眼にするならCodewarsがオススメです。
Codewarsの欠点
Codewarsにも欠点があります。
ALL英語
「プログラミング + 英語」のハードルが高いかなと思います。
やってみると、慣れ & 翻訳で気にならないレベルです。
チュートリアルが少ない / 使い方がわからない
この記事がオススメです。
取り組むべき問題
1kyu(難しい)から8kyu(簡単)までの難易度があります。
個人的には、8kyu・7kyuでも十分だと思います。
問題は簡単でも、他の回答から学べるものが多いです。
4kyu以上はバケモノの領域です。
5kyuも人かどうか怪しいです。
頑張って6kyuで十分だと思います。
特に初学者の方は8kyuからやるのがオススメです。
最後に
念の為、チュートリアル記事を改めて掲載しておきます。
アルゴリズムを実践的に学ぶならCodewarsがオススメです。
2024/07/04 追記
コメントにて「解けそうな4kyuもあるよ!」と教えていただきました。
記事も書きましたので、よければご覧ください。