自動化に興味がある方へ、ショートカットアプリの使い方が体系的にまとめられた画期的なテキストをご紹介します。
初心者でもアプリ間の連携ができるレベルまで習得できる
をモットーに作られたテキストです。
今すぐ詳細をチェック

AppleのショートカットアプリでFizzBuzz問題やってみた

Appleショートカット
記事内に広告が含まれています。

こんにちは、スタディPRIMEのしろです。

私は「はじめてでも出来るApple Shortcutsのテキスト」という有料マガジンを執筆しています。

その中でifの執筆をしていて、FizzBuzzを例題として使おうとすると、少々難しい点があったので今回の記事を執筆しました。

なお、マガジンの方にはFizzBuzzは掲載していないため、マガジンを購入してくださった方も安心してご覧ください。

FizzBuzz問題とは

FizzBuzz問題とは、プログラミングの初学者向けに広く用いられる典型的な練習問題の一つで、条件分岐やループ処理の基本的な理解を試すために使用されます。

問題の内容は非常にシンプルですが、コードの可読性や効率性を問う発展問題としても応用されることがあります。

🔹 基本的なFizzBuzz問題の内容

1から100までの数を順に出力し、以下のルールに従って表示内容を変える:

  • 数字が3の倍数のとき → Fizzと表示
  • 数字が5の倍数のとき → Buzzと表示
  • 数字が3の倍数かつ5の倍数のとき → FizzBuzzと表示
  • それ以外の場合は、そのまま数字を表示

ショートカットアプリでFizzBuzz問題を解く際に直面した課題

ショートカットアプリで実際にFizzBuzzを解く際に、次のような難しい側面があることが分かりました。

  • 剰余演算
  • else ifの不在
  • テキストの結合

剰余演算

結論
剰余計算は、計算式アクションで、[数字] % [割る数]と入力するのが楽

私が執筆しているマガジンは初心者向けであるということもあり、計算は計算アクションを基本としており、計算式アクションは応用に位置付けています。

しかし、計算アクションには剰余演算が存在しません。

そのため、これまでは次のような手続きで剰余演算を行なっていました。

  1. 計算アクションで割り算を実行
  2. 端数を処理アクションで端数を切り捨て
  3. 2で求めた商に割る数をかける
  4. 差を求める

式にするとこうです。

しかし、このやり方だとどうしても長くなるし見通しも悪い。

そこでどうにかならないかとやってみたところ、計算式アクションで%演算子が使えました。

計算式アクションの研究不足が課題であると感じた一瞬ですね……

else ifの不在

【結論】ifをネストして頑張る
🙇‍♂️ むしろ、良い回避方法を知ってる方は教えて欲しい……

Javaなど多くのプログラミング言語は、elseの後に来るのがstatementになっているので、statementであるifもブロックも受け入れられる、という構造になっています。

しかし、ショートカットアプリはそれが出来ません。これはIf文の終了が挿入されることに起因します。

一般に、if-endif形式になっているプログラミング言語は、elseifが一緒に提供されることが多いのですが、ショートカットにはそれがないんですねぇ……

(Appleさん、そこんとこ頼みます)

じゃあどうするの? と言われますと、私はパワー系解決しか思いつきませんでした。

要は、elseの中にifをネストして、else-ifにしてしまうというものです。

しかし、もう少しスマートな解決策があったっていい。どなたかご助力お願い致します。

テキストの結合

【結論】ショートカットの繰り返しアクションは、各ループの最後の値をリストに格納して結果を返してくれるので、それをテキストを結合アクションに渡せば良い。

FizzBuzzの結果を出力する段階で、テキストを結合したいと思いませんか。思いますよね!

一般的なプログラミングであれば、標準出力にそのまま出しちゃうのですが、ショートカットは標準的な出力系がGUIなので、100回も出力すると面倒なことになります。

これが結合したいと考える動機です。じゃあどないすんのという話で。

今までは、変数に追加アクションを利用してリストを作り、それをテキストを結合アクションに渡していました。

と こ ろ が ! ! !

ショートカットの繰り返しアクションは、結果をリストで返してくれるんですよね。

私は出身言語がJavaなもので、処理を考える際Java脳になってしまう癖があります。そのため、繰り返しが結果を返すことに中々気がつけませんでした。

(Kotlinもforはstatementなんです……)

すなわち、ショートカットでは各ループの中で値を最後にしてやれば、ループの外でこうするだけで良いんです。

私のようなJava脳向けに言うなら、Stream::mapのようなことが出来ます。

これはかなり便利で、嬉しい機能ですね。

ショートカットの全貌紹介 & DL用リンク公開

ショートカット全体が長くなってしまったので、各々拡大して見ていただけると助かります。

今回のショートカットのダウンロードは、下のバッジをタップしてください。

まとめ

実は、ショートカットアプリでFizzBuzz問題に取り組むのは初めてだったので、良い学びになりました。

  • 計算式アクションで剰余演算が使用可能
  • 繰り返しアクションでリストを作れる

この2点は非常に良いことを知れたと感じています。

マガジンの方にも反映される可能性は極めて高いです。

また、計算式アクションの仕様については、私自身知らないことが多いため、未開拓地であると感じました。

ここを深掘りするコンテンツも展望に含めたいと思います。

✉️ ご質問・フィードバック募集

この記事が「Appleショートカットを使ったFizzBuzz実装」の参考になれば幸いです。

「もっと良い回避策がある」「こうするとスマートに書ける」といった知見があれば、ぜひコメント欄やSNSでご共有いただけると嬉しいです。

🔗 関連リンク

コメント

タイトルとURLをコピーしました