algonote

There's More Than One Way To Do It

HackerRankでWrite Code Every Day

HackerRankで遊んだメモ

f:id:hiromichinomata:20200808190233j:plain:w200

HackerRankとは

HackerRankはプログラミングの問題を解いて学べる学習サイト。この手のサイトは普通のWeb開発系と競技プログラミング系の一方に特化していることが多いが、HackerRankは競技プログラミングの問題とプログラミング言語自体の学習をカバーしており、競プロ特化よりは少し範囲が広い。

AtCoderなどはリアルタイムの競技性を重視しているがHackerRankは非同期的学習に重きを置いている.

この問題を3ヶ月くらい毎日解いてみたというのが今回の趣旨.

学べること

  • Algorithms

いわゆる競技プログラミングの問題

  • Data Structures

データ構造を再実装

  • Mathematics

いわゆる競技プログラミングの問題

  • C
  • C++
  • Java
  • Python
  • Ruby

まんま

  • Linux Shell

bash

  • Functional Programming

LispだったりClojureだったりを任意の関数型言語を選べる

  • Artificial Intelligence

ゲームロジックの実装

  • SQL

まんま

  • Databases

集合演算とか

  • Regex

正規表現

これらのカテゴリとは別に30 Days of Codeというごっちゃ煮の最初に解くべき30問という括りがあります。

いいところ

  • 程よい時間の長さ

難しめの競技プログラミングの問題を解くと1時間くらいかかることもしばしば。easyの問題なら15分くらいで終わるものがほとんどなので毎日コードを書く(Write Code Every Day)を達成しやすい

  • レコメンド

今までといた問題をベースに次にこの問題を解いたらとオススメメールが届きます。意思の弱い人には良さそう。

  • 解説同梱

HackerRankは問題を解けるとポイントがもらえポイントを集めるとバッジがもらえます。基本的にはこれが学習のモチベになります。

ただたまに本当に難しい問題に出会うこともあるでしょう。そんな時はEditorialをポチるとポイントはもらえなくなりますが解説が読めます。Discussionsは読んでも特にマイナス要素ないので他の人のはまっている話を読んでヒントがないことを確認してからEditorialに行くのを推奨。

悪いところ

  • 古い言語ver前提の問題文

言語の実行環境は割合新しめのものが使えるようなのですが、問題文がPython 2系だったり、Ruby1系のものがたまにありました。それ新しい言語verのxxで簡単に書けるならもうそれでいいのでは。

  • 難易度のぶれ

easyの問題の中に難しい言語仕様の問題が入っていること多数。問題を読んだことによる減点がないようなので敷居が高くて誰も提出しない問題だと正答率が上がり結果easyになっている気がする...

  • 言語間のサポートレベルの差

前述の通りRuby, Python, C++などはそのコースを解くとバッジがもらえますが、マイナーな言語でAlgorithmsを解いてもその言語としてのポイントやバッジはもらえないようです。

今更C++, Javaか... となったので新しめの言語のサポートを増やして欲しいなと思いました。

所感

難しいタスクをやっていると思うように進捗が出ないこともありますが、HackerRankは簡単な分、毎日何かしら進捗が出るのは楽しいですね。一方で世の中への貢献感は少ないのでそういう人はオープンソースプロジェクトにプルリク送る方が向いているのかなと思いました。

Future Work

  • LeetCode