ASTERIA WarpでFizz Buzzを作成する。

Fizz Buzzとは

Fizz Buzzは1から順番に整数を表示しますが、以下の条件に当てはまる場合は特定の文字列を表示します:

  • 3で割り切れる数 → Fizz。
  • 5で割り切れる数 → Buzz。
  • 3でも5でも割り切れる数 (15の倍数)→ FizzBuzz。
  • 上記のどれにも当てはまらない場合は、値そのものを出力します。

例(兼今回想定する実行結果)

数:条件:実際に出力される値
1:どれにも当てはまらない:1
2:どれにも当てはまらない:2
3:3で割り切れる数:Fizz
4:どれにも当てはまらない:4
5:5で割り切れる数:Buzz
6:3で割り切れる数:Fizz
7:どれにも当てはまらない:7
8:どれにも当てはまらない:8
9:3で割り切れる数:Fizz
10:5で割り切れる数:Buzz
11:どれにも当てはまらない:11
12:3で割り切れる数:Fizz
13:どれにも当てはまらない:13
14:どれにも当てはまらない:14
15:3でも5でも割り切れる数:FizzBuzz
16:どれにも当てはまらない:16

使用するフロー

フローデザイナーで作成したフローでは以下の順番で判定を行います。

  1. 3でも5でも割り切れる数かどうか
  2. 3で割り切れる数かどうか
  3. 5で割り切れる数かどうか

読み込むファイルと出力するファイル

読み込むファイルは、1から16までの整数が記入されたファイル「number.csv」
値ごとの判定結果は「fizzbuzz.txt」に出力します。

フローの解説

最初の分岐(3と5の両方で割り切れるかの判定)

最初の分岐(下図部分)の解説になります。

先頭のRecordGetを使ってcsvファイルを1行ごとに読み込みます。1行ごとにループさせて処理を進めます。

最初のBranchStart前のマッパーで値が3と5の両方で割り切れるかを判定しています。
(※「15で割った余りが0かどうか」という15の倍数判定だと判定するマッパーでの処理が3回とも同じような処理になってしまうため、今回は「3と5の両方で割った余りが0かどうか」を採用しています)
割り切れるならフロー変数「Hantei」にtrueが入り、次のBranchStartで右側に分岐します。
そうでないなら分岐は行われず、読み込んだ整数が入っている「field1」を使って次の判定に進みます。

BranchStartで右側に分岐した場合は分岐直後のマッパーで次の設定を行います。3と5の両方で割り切れるということなので、読み込んだ整数が入っている「field1」に「FizzBuzz」を入れます。
fileputでファイルに出力した後に今のループを終了します。(下図参照)

2回目の分岐(3で割り切れるかを判定)

2回目の分岐(下図部分)の解説になります。

分岐(BranchStart)直前のマッパーで、3で割った余りが0かどうか(3で割り切れるかどうか)を判定しています。
割った余りが0ならフロー変数「Hantei」にtrueが入り、次のBranchStartで右側に分岐します。
そうでないなら分岐は行われず、読み込んだ整数が入っている「field1」を使って次の判定に進みます。

BranchStartで右側に分岐した場合は分岐直後のマッパーで次の設定を行います。3で割り切れるということなので、読み込んだ整数が入っている「field1」に「Fizz」を入れます。
fileputでファイルに出力した後に今のループを終了します。
(最初の分岐の際と比べて「field1」に入れる内容が異なるだけなので、画像は割愛します。)

3回目の分岐(5で割り切れるかを判定)

3回目の分岐(下図部分)の解説になります。

分岐(BranchStart)直前のマッパーで、5で割った余りが0かどうか(5で割り切れるかどうか)を判定しています。
割った余りが0ならフロー変数「Hantei」にtrueが入り、次のBranchStartで右側に分岐します。
(2回目の分岐の際と比べて割り切れるかどうかを判定する値が異なるだけなので、画像は割愛します。)
そうでないなら分岐は行われず、読み込んだ整数をそのまま出力します。

BranchStartで右側に分岐した場合は分岐直後のマッパーで次の設定を行います。5で割り切れるということなので、読み込んだ整数が入っている「field1」に「Buzz」を入れます。
fileputでファイルに出力した後に今のループを終了します。
(最初・2回目の分岐の際と比べて「field1」に入れる内容が異なるだけなので、画像は割愛します。)

フローの実行結果

出力した「fizzbuzz.txt」を確認すると、例(兼今回想定する実行結果)の値と同じ結果になっていることが確認できました。