kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Cyber-Dojo で Fizz Buzz の次におすすめするエクササイズ5選

環境構築に悩むことなくペアプログラミング・モブプログラミングの練習ができるので「Cyber-Dojo」をよく使っていて,モブプログラミング未経験のチームに導入を支援するときにも使っている👌 Cyber-Dojo には数年前に紹介した「結果予測機能」もあってテスト駆動開発の練習に使うこともできる❗️

cyber-dojo.org

Cyber-Dojo では多くのプログラミング言語とテストフレームワークの組み合わせから選べるだけでなく,さらに「60 種類」のエクササイズ(アルゴリズム)から選べるという特徴がある.

Cyber-Dojo の create a new practice 画面

まずは Fizz Buzz と Fizz Buzz Plus から

もしプログラミング初学者やモブプログラミング未経験者に教える場合,1番使いやすいのは Fizz Buzz だと思う.アルゴリズムは単純だし,初学者にも理解しやすく,テストコードも含めて程よく楽しめる.

🎲 Fizz Buzz

与えられた数値をそのまま出力しつつ,もし数値が 3 の倍数なら "Fizz" を出力し,5 の倍数なら "Buzz" を出力する.もし 3 と 5 の倍数なら "Fizz Buzz" を出力する.有名な入門アルゴリズムで難易度は低めだと思う.

🎲 Fizz Buzz Plus

Fizz Buzz を少し発展させて,もし数値が 3 を文字列として含むときは "Fizz" を出力し,5 を文字列として含むときは "Buzz" を出力する.よって,31 や 32 は Fizz Buzz Plus だと "Fizz" になるし,52 や 56 は Fizz Buzz Plus だと "Buzz " になる.同じく難易度は低めだと思う.最初から Fizz Buzz Plus を選んでも良いし,まず Fizz Buzz を実装してから,仕様変更があったというストーリーで Fizz Buzz Plus に移行していくのも良いと思う.

ちなみに1年以上前の話だけど,2022年8月に YouTube でライブ配信を担当した 「AWS Developer Live Show: モブプログラミング超入門ライブ!」でもモブプログラミングのテーマとして Fizz BuzzFizz Buzz Plus を選んだ❗️

モブプログラミング中のイメージ図

Cyber-Dojo で Fizz Buzz の次におすすめするエクササイズ5選

Cyber-Dojo を使ってモブプログラミングの導入を支援しているときに Fizz Buzz の次に試すエクササイズのおすすめはあるー?と聞かれることがある.基本的にどのエクササイズでも良いと思うけど,聞かれたときに答えている個人的におすすめのエクササイズ5選を紹介したいと思う.Cyber-Dojo 自体のコードは GitHub に公開されていて,エクササイズ情報(説明文など)は cyber-dojo/exercises-start-points リポジトリで管理されている.

github.com

🎲 Leap Years

与えられた年が「閏年」かどうかを判定する.アルゴリズム的には与えられた年が 4 で割り切れるなら閏年とする.しかし与えられた年が 100 で割り切れて,400 で割り切れない場合は閏年ではないという例外がある.難易度は低めだと思うので,Fizz Buzz の次に試してみると良いかなーと👌

また Python だと calendar モジュールに isleap() 関数が用意されているため,実際に使われている実装とテストコードと答え合わせするのもおすすめ〜 \( 'ω')/

🎲 Anagrams

与えられた文字列から作れる組み合わせを出力する.例えば biro を入力すると biorbrio など他にも多くの組み合わせを出力する.難易度は低めだとは思うけど,与えられた文字列の文字数を固定にするのかどうかや,与えられた文字列に重複した文字があるのかどうかによっても難易度は少し変わると思う.

biro bior brio broi boir bori
ibro ibor irbo irob iobr iorb
rbio rboi ribo riob roib robi
obir obri oibr oirb orbi orib

🎲 ISBN

与えられた ISBN コードが規格に沿っているかどうかを判定する.最後の一桁がチェックディジットになっていて,そこを正しく計算できているかどうかがポイントになる.Fizz Buzz と比べると少し難易度は高くなると思う.

ISBN-10:
0471958697
0 471 60695 2
0-470-84525-2
0-321-14653-0

ISBN-13:
9780470059029
978 0 471 48648 0
978-0596809485
978-0-13-149505-0
978-0-262-13472-9

🎲 Harry Potter

ハリー・ポッターの書籍を同時に複数冊買うと割引になるというカートの計算をする.2冊買うと 5% 割引!というのは誰しも体験したことがあるはずで,イメージしやすいエクササイズだと思う.とは言え,Fizz Buzz と比べると少し難易度は高くなると思う.

2 copies of the first book
2 copies of the second book
2 copies of the third book
1 copy of the fourth book
1 copy of the fifth book

このエクササイズは Coding Dojo の Kata に Potter という名前で載っていて,テストコードも参考になる📕(実は Coding Dojo に Leap Years や Anagram また次に紹介する Bowling も載っている💡)

codingdojo.org

🎲 Bowling Game

ボーリングのスコアを計算する.倒したピンの本数だけではなくストライク・スペアによってスコアが変化するところがポイントで,さらに10ゲーム目は最大3回投げられるという例外もある.ボーリングをしたことがあればイメージしやすいエクササイズだと思うけど,Fizz Buzz と比べると少し難易度は高くなると思う.

  • X : ストライク
  • / : スペア
  • - : 失敗
  • | : 境界線
  • || : 最終フレームのボーナス投球

まとめ

Cyber-Dojo で Fizz Buzz の次におすすめするエクササイズ5選を紹介した❗️他にも良いエクササイズがあったらまた紹介したいと思う \( 'ω')/