FizzBuzz問題をPHPで解いてみよう【応用編】
この記事をシェアする:

前回の記事では、最もメジャーな基本的なプログラミング問題である「FizzBuzz問題」について紹介しました。
今回は「ズンドコキヨシ」、「キヨシチェック」、「ズンドコチェック」などと呼ばれる日本版「FizzBuzz」のようなユニークな問題を解いていきたいと思います。
「ズンドコキヨシ」とは
- 「ズン」「ドコ」のいずれかをランダムで出力し続ける
- 「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ!」と出力して終了する
この記事を執筆時に動作検証を行った筆者の環境
PHP 7.0.14 (cli)
「ズンドコキヨシ」をPHPで実装してよう
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php declare(strict_types=1); $zundoko = ['ズン', 'ドコ']; $matchCase = ['ズン', 'ズン', 'ズン', 'ズン', 'ドコ']; $cache = []; while(true) { $cache[] = $zundoko[array_rand($zundoko)]; echo end($cache); if (count($cache) > 5) { array_shift($cache); } if ($cache === $matchCase) { break; } } echo 'キ・ヨ・シ!', PHP_EOL; |
実行結果(別サイトが開きます)
http://sandbox.onlinephpfunctions.com/code/8d5848659f3f1a124a1228ca667143fa61014b26
※「Execute code」ボタンを押すと実行結果が表示されます。
オリジナル版「西郷どん」
筆者は「西郷どん」が大好きです。
その中でも「大山格之助」の同意を促す方言「じゃっ、じゃっ」が大好きです。
「大山格之助」の「じゃっ、じゃっ」をPHP実装してみましょう。
要件定義
- 誠忠組(幕末の薩摩藩に存在した藩内組織)の苗字、名前、敬称をランダムに出力する
- ランダムに出力した苗字、名前、敬称に「大山格之助さぁ」が現れたら「じゃっ、じゃっ」と出力して終了する
実装してみよう
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?php declare(strict_types=1); class Segodon { const LAST_NAME_LIST = ['西郷', '大久保', '有馬', '大山']; const FIRST_NAME_LIST = ['吉之助', '一蔵', '新七', '格之助']; const HONORIFICS = ['どん', 'さぁ']; const MATCH_CASE = '大山格之助さぁ'; public function じゃっじゃっ() { while (true) { $name = self::LAST_NAME_LIST[array_rand(self::LAST_NAME_LIST)].self::FIRST_NAME_LIST[array_rand(self::FIRST_NAME_LIST)].self::HONORIFICS[array_rand(self::HONORIFICS)]; echo $name, PHP_EOL; if (self::MATCH_CASE === $name) { break; } } echo 'じゃっ、じゃっ', PHP_EOL; } } $segodon = new Segodon(); $segodon->じゃっじゃっ(); |
実行結果(別サイトが開きます)
http://sandbox.onlinephpfunctions.com/code/8ca758dfd158e07f9ade0aa26b81cdb52d3f62c5
※「Execute code」ボタンを押すと実行結果が表示されます。
要件追加
- 誠忠組の苗字、名前、敬称をランダムに出力する
- ランダムに出力した苗字、名前、敬称に「大山格之助さぁ」が現れたら「じゃっ、じゃっ」と出力して終了する
- ランダムに出力した苗字、名前、敬称が「西郷吉之助どん」「大久保一蔵どん」「有馬新七さぁ」「大山格之助さぁ」のどれかに含まれていたら「じゃっ、じゃっ」と出力して終了する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?php declare(strict_types=1); class Segodon { const LAST_NAME_LIST = ['西郷', '大久保', '有馬', '大山']; const FIRST_NAME_LIST = ['吉之助', '一蔵', '新七', '格之助']; const HONORIFICS = ['どん', 'さぁ']; const MATCH_CASE = ['西郷吉之助どん', '大久保一蔵どん', '有馬新七さぁ', '大山格之助さぁ']; public function じゃっじゃっ() { while (true) { $name = self::LAST_NAME_LIST[array_rand(self::LAST_NAME_LIST)].self::FIRST_NAME_LIST[array_rand(self::FIRST_NAME_LIST)].self::HONORIFICS[array_rand(self::HONORIFICS)]; echo $name, PHP_EOL; if (in_array($name, self::MATCH_CASE, true)) { break; } } echo 'じゃっ、じゃっ', PHP_EOL; } } $segodon = new Segodon(); $segodon->じゃっじゃっ(); |
実行結果(別サイトが開きます)
http://sandbox.onlinephpfunctions.com/code/c8fe86b1d40b32231bec5344436cd9285b39bd37
※「Execute code」ボタンを押すと実行結果が表示されます。
さいごに
いかがでしたでしょうか?
FizzBuzz問題を応用して、自ら解いてみるのもプログラミングならではの楽しみ方です。
アーティスでは共にプログラミングができる素敵なプログラマを募集中です!
プログラマ募集情報はこちら
The following two tabs change content below.

アーティス
創造性を最大限に発揮するとともに、インターネットに代表されるITを活用し、みんなの生活が便利で、豊かで、楽しいものになるようなサービスやコンテンツを考え、創り出し提供しています。

最新記事 by アーティス (全て見る)
- コンテンツマーケティングが選ばれる理由!オウンドメディアやSNSを活用して売上を伸ばそう - 2019年10月30日
- 迷惑メール対策には複数のメールアドレス(サブアドレス)を使って対処しよう - 2019年8月7日
- SNSマーケティングがBtoCビジネスに適している理由!SEOマーケティングは時代遅れ? - 2019年6月28日
- webメディアにおけるSEO対策のためのGoogle Analyticsとサーチコンソールの活用方法 - 2019年4月15日
- Instagramに適した商品とは? 基本的な機能・活用方法・運用ポイントについて徹底解説 - 2019年3月19日
おすすめ関連記事
最新記事