8
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

Codewars というサイトをご存知でしょうか
いろんな言語のアルゴリズム問題を解くことができるサイトです。

類似するサイトで有名なものだと「AtCoder」や「Paizaラーニング」があります。

Codewarsのオススメな点

個人的には、アルゴリズム問題サイトで一番オススメです。

時間制限がないから、学習に集中できる

PaizaラーニングやAtCoderは時間が計測されます
また、Paizaラーニングでは時間制限があります

私的な話になりますが、時間が計測されていると集中ができません。

また、

  • 「雑に書いても早くしたい」
  • 「ミスの可能性とトレードオフに、スピードを求める」

ということが起こります。

これは学習とは真逆です。

また、実際の開発においても不要な考えだと思います。

この点、CodeWarsには時間制限がないため、のびのびと学ぶことができます。

トライ&エラーできて、学びの効率が良い

PaizaラーニングとAtCoderはどちらも提出してからテストが入ります
提出してみないと正しいかどうかがわかりません。

学習という面から見れば、非効率的です。

「トライ&エラーのコストが低い」というのはプログラミングの良いところです。

Codewarsではテストコードが用意されており、いつでもテストをすることができます。

また、テストコードを書き足すこともできます。

「間違いながら学ぶ」ことができる環境です。

他ユーザーの回答から学べる

Codewarsでは他のユーザーの回答を見ることができます。
さらに、いわゆる「いいね」ボタンが2種類あります。

Best Practice(実用的)」と「Clever(天才)」ボタンです。

スクリーンショット 2024-07-02 18.15.06.png

例題です。

与えられた配列から「最大値」と「最小値」を除き、合計してください
ただし、「要素が一つだけ」「空の配列」や「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 の回答を見てみましょう

Best Practice

def sum_array(arr)
  if arr.kind_of?(Array) and arr.length > 2
    arr.inject(:+) - arr.min - arr.max
  else
    0
  end
end
  • arr.kind_of?(Array)
    arr.nil? / arr.empty? の2つをスマートにまとめた上、意図が伝わりやすい
  • 0を返すケースを個別に記述しないことで、スリムなコードになっている

Clever

def sum_array(arr)
  arr.nil? || arr.empty? ? 0 : arr.sort[1..-2].reduce(0, :+)
end
  • わかりやすさを多少犠牲にしながらも、超スリム
  • sortしてから1から-2を指定することで、0番目とlast(最大と最小)を除外

たくさんの点で発見があり、楽しく学ぶことができます

Paizaラーニングでは、他の回答を見ることができず、せっかく問題を解いても振り返りや学びができません。

オススメ理由まとめ

  • 時間制限がないから、学習に集中できる
  • トライ&エラーできて、学びの効率が良い
  • 他ユーザーの回答から学べる

Paizaラーニングは 「スキルをアピールしたい就活者」と「事前にスキルを知りたい企業」をマッチングさせる面が強いです。

AtCoderは「競技プログラミング」の本場であり、「学習」がメインではありません。

その点で、学習を主眼にするならCodewarsがオススメです。

Codewarsの欠点

Codewarsにも欠点があります。

ALL英語
「プログラミング + 英語」のハードルが高いかなと思います。
やってみると、慣れ & 翻訳で気にならないレベルです。

チュートリアルが少ない / 使い方がわからない
この記事がオススメです。

取り組むべき問題

1kyu(難しい)から8kyu(簡単)までの難易度があります。

個人的には、8kyu・7kyuでも十分だと思います。

問題は簡単でも、他の回答から学べるものが多いです。

4kyu以上はバケモノの領域です。
5kyuも人かどうか怪しいです。
頑張って6kyuで十分だと思います。

特に初学者の方は8kyuからやるのがオススメです。

できれば「人気なもの」から取り組むのがオススメです。

スクリーンショット 2024-07-02 20.26.23.png
(上記画像の各数字が大きいもの)

最後に

念の為、チュートリアル記事を改めて掲載しておきます。

アルゴリズムを実践的に学ぶならCodewarsがオススメです。

2024/07/04 追記
コメントにて「解けそうな4kyuもあるよ!」と教えていただきました。
記事も書きましたので、よければご覧ください。

8
11
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?