BLOGサブスレッドの日常

2022.09.01

2022夏合宿3日目研修②

torikai

夏合宿3日目研修②は、tama さんによる「名状しがたいフローチャートのようなもの」です。
研修が始まる前に、フリクションペンと付箋、そしてA3用紙が配られました。
つまり…フリクションペンで付箋に何かを記入し、A3用紙に貼り付けるセッションが行われるということです。

夏合宿3日目研修②のお題

「要件を整理して、どんな処理をするか・どんな処理が行われるかを考え処理の流れを図示する」
要件を聞いていきなりコーディングを始めたりテストシートを作ったり…まずは焦らず、落ち着いて何をするべきかを整理することが大切だよね、というお話から始まりました。
その整理するためのツールとして、今回使ってみようというのが「フローチャート」というわけです。
順番を入れ替えたりしやすいように付箋を使って、書き直しをしやすいようにフリクションペンを使って。
研修中で問題が、3つ出題されました。

問題1

Kick Start 2022 Round A で出題された内容です)
スピードタイパーであるバーバラはある文字列Tを入力します。
スピード重視で入力するため、一通り入力が終わるまで間違いを残したまま入力を続けます。

要件

  • 入力を終えた文字列Aから、何文字削除すれば正しい文字列Tになるかを出力する
  • 文字を削除してもAからTにならない時は IMPOSSIBLE と出力する

セッション

チュートリアル的に、「文字列Tが1文字の場合」「文字列Tに同じ文字しか含まれていない場合」といくつかのパターンで、どういったフローチャートになるかを学んでいき、最後に「文字列Tにさまざまな文字が含まれている場合」にどういったフローチャートになるかを参加者各々で考える時間がありました。

引き続き、問題2、3へと続き、出題された要件を満たすためのフローチャートを参加者各々で考え、提出された解答の紹介、説明の時間となりました。

気づきと学び

意外と苦戦しました! 説明立ててフローチャートに落とし込む時に色々考えてしまうと言いますか…実際にコーディングしはじめてしまいたい気持ちを抑えつつ、

  • どういう処理をするか
  • どういう判定が必要か
  • 冗長的な処理になっていないか、もしなっていたらどうすれば効率が良くなるか

…などを考えながら、付箋や紙に書き込んでは消し、あるいは付箋を紙に貼り…ということをしていました。
しかし、こうして整理して書き出してみると、いきなりコーディングを始めるより見通しが良い作業を進められるように感じました。
今後の開発作業に活かしていきたいと思います。

おまけ

せっかくなので、問題2と問題3がどんな内容だったかをご紹介します。
問題2、3では、片面だけ焼けたパンケーキが登場します。
焼き目が上=Happy side, 焼けていない面が上=Blank side としています。

問題2

Code Jam 2017 QR で出題された内容です)
鉄板の上にパンケーキが横1列に並べられています。
そして、N枚のパンケーキをまとめてひっくり返す幅広のコテがあります(※)。
※ ひっくり返せる枚数は固定です。例えば、N=3の場合、端っこの1枚だけをひっくり返すことはできず、端っこから3枚をまとめてひっくり返すことになります。

要件

  • 最低何回ひっくり返せば、鉄板の上のパンケーキがすべて Happy sideになるかを出力する
  • すべてのパンケーキを Happy side にできない場合は IMPOSSIBLE と出力する

問題3

Code Jam 2016 QR で出題された内容です)
重なる状態でパンケーキがお皿の上に乗っています。
重ねられたパンケーキごと、パンケーキの上下をひっくり返すヘラがあります。

要件

  • 最低何回ひっくり返せば、お皿の上のパンケーキがすべて Happy side になるかを出力する

この記事を書いた人

torikai