皆さんは楽しくプログラミングできていますか?
私はプログラミングが大好きなのですが、それでもやはりマンネリズムを感じることは多々あります。
そんな時におすすめなのがこのCodewarsです!
https://www.codewars.com/
問題があり、それをプログラムで解決する学習用サイトなのですが、これが非常に面白い!
全て英語なので、英語の勉強にもなって一石二鳥です。
自分の得意な言語で戦うことができます。
Codewarsでは問題のことを”Kata(型)”と呼び、ランクのことを”4kyu(4級)”のように表現されます。他にも同じ処理をする互いのコードを戦わせる”Kumite(組手)”などがあります。
私は”Kata”しかやったことがありませんので”Kumite”の方はようわかりません。
ダッシュボードはこんな感じ。
私はjavascript
で4kyu
までたどり着きましたが、ここから先の問題はめちゃくちゃ難しいです。
英語なもんですから問題文を理解するまでに時間がめちゃくちゃかかります。
せっかくだし簡単なやつを何か一問見てみましょう!
Write a simple parser that will parse and run Deadfish.
Deadfish has 4 commands, each 1 character long:
i
increments the value (initially 0
)d
decrements the values
squares the valueo
outputs the value into the return arrayInvalid characters should be ignored.
parse("iiisdoso") => [ 8, 64 ]
まず”Deadfish”って何やねんって感じでしょ?
Deadfishってのは4つのコマンドを持つジョークプログラミング言語なんです。
初期値を0として
i
現在の値に1足すd
現在の値から1引くs
現在の値を2乗するo
現在の値を配列に追加っていう処理をするプログラミング言語です。
つまり与えられたDeadfishコードである"iiisdoso"
を読み解くと
ってことで、このDeadfishコードは8と64の入った配列を示しています。
この”Kata”はDeadfishコードをパースして正しい値を出力するプログラムを書けと言っているわけです。
“Deadfishを泳がせる”とはよく言ったものです。
function parse( data )
{
let ret = []
let v = 0
for (let i = 0, l = data.length; i < l; i++) {
switch (data.charAt(i)) {
case "i":
v++
break
case "d":
v--
break
case "s":
v*=v
break
case "o":
ret.push(v)
break
}
}
return ret
}
シンプルに1文字ずつ確認して演算していけばクリアできます。
“Kata”をクリアすると、こんな画面に飛びます。
この画面では他の人の解法をみることができ、めちゃくちゃ勉強になりますよ!
やっぱりだいたい私と同じやり方をしている人が多いですね。
難しい問題になってくるとここが本当に様々でして、ここ見ながら3時間くらいはお酒飲めますね。
簡単な問題であれば、1ライナーを極めてる人がいたりしてそれも面白いです。
ユーザーページ的なところでスタッツの確認ができます。
有料プランに登録するともっと色々なことができるのかもしれません。
5ドル払ってみました。
そうしたら”Streaks”っていうのが表示されるようになりましたね。
あと言語ごとのクリア回数なども表示されるようにもなりました。
他にも広告の非表示、”Kata”の回答コード実行時間の短縮(タイムアウトしづらくなる)などがあるようです。
上位の問題になってくると実行時間の短縮が命です。
アルゴリズムを考えてみたり、コードの最適化をしてみたりと試行錯誤するわけですが、お金を払って実行時間の短縮が可能になるとは…
でもまぁこれで快適なCodewarsライフが送れるのは間違いありません。
競技プログラミングで有名なAtCoderですが、私は競技に参加せず過去問をひたすら解いてます。これがまた楽しいんだ。
こっちは日本語ですので、問題文の理解に苦労することはないでしょう。
久しぶりにパーミュテーションとかコンビネーションとかやりましたよ。
ということで皆さんも日々のプログラムにマンネリズムを感じたら、パズル感覚でCodewarsやAtCoderの問題に手を出してみてはいかがでしょう?
熱中しすぎると1日とか一瞬で過ぎ去るのでお気をつけを!
それではまた来週!お身体に気をつけてくださいねー!
コータ=ザッカーバーグ
@kota_zuckerberg
バイクとプログラミングをこよなく愛する編集部の後方支援担当。 愛車はSUZUKI GSR250。 Illustratorの自動化からWEB制作、インフラの整備などをこなしていくうちに いつの間にかフルスタックエンジニアになっちゃった。 主な使用言語はphp, javascript, go, applescript。最近はjsに傾倒ぎみ。