世界のナベアツ問題からみる要件定義の大切さ

以前、
という記事を書きましたが、今回はそのギャグをバージョンUPさせました。
「3の倍数と3の付く数字のときだけアホになり、5の倍数のときは犬っぽくなります」
実は、世界のナベアツさんのギャグは、「3の倍数と3の付く数字のときだけアホ」になっているわけではありません。
以前YoutubeにUPされていた動画をよく見ると、ナベアツさんは、「5の倍数のとき犬っぽくなる」とおっしゃってました。
これはプログラミングのネタ的においしそうです。というわけで、「3の倍数と3の付く数字のときだけアホになり、5の倍数のときは犬っぽくなります」を忠実に再現してみました。
まず最初に要件定義をしよう!
最初、自分でもいろいろとコードを書いてみました。しかし、どうも上手く動かない…。プログラミング掲示板で質問を投稿して、教えていただいた回答の1つに、「最初に要件定義をしっかりしましょう」という回答をいただきました。
そういや要件定義なんて決めてなかったな~。もっとも要件定義と言うより、もっとかる~く「条件」と言う具合に考えてたものはあります。
- 3の倍数と3のつく数字のときだけ「アホ」になる。
- 5の倍数のときは「ワン」と吠える。
- 3と5の公倍数のときは「アホワン」と吠える。
でも、この要件定義だと仮に40までカウントしたときに、「35」なんて数字が来たときは、ど~すんの?と言うツッコミがきそう。
「35」は3で割り切れないけど3が含まれる数字ですが、その動画を見ると、世界のナベアツさんは「アホっぽい犬のように吠える」というギャグになっています。
ということは、要件定義は3つでは足りません。4つの要件定義にする必要があります。
- 3の倍数と3のつく数字のときだけ「アホ」になる。
- 5の倍数のときは「ワン」と吠える。
- 3と5の公倍数のときは「アホワン」と吠える。
- 3で割り切れないけど3が含まれる数字は「アホワン」と吠える。
プログラミングをする前には要件定義を
ということはプログラムがどうこういう以前に、最初に要件未定義の部分があるから、つまずいていたんやね…(汗
各言語の初心者用の本にはそんなこと書いてへんかったなぁ。(ひょっとしたら私が見落としてだけかもしれませんが)
ただ「3の倍数と3の付く数字のときだけアホになります」というギャグに、「5の倍数のときは犬っぽくなる」というギャグを付け足せれば、ええわ~と思っていたんですが、そういうわけではないんですね。
プログラムを組む仕事は、定義/未定義を見分けるということも必要なんか~。
「3の倍数と3の付く数字のときだけアホになり、5の倍数のときは犬っぽくなる」コード
最後に出来上がった一応、JavaScriptによるコードを紹介しておきます。リンク(新しいタブで開く)を貼っておきます。
for (var i = 1; i <= 40; i++) { var c3f = /[3]/.test(i.toString()); var d3f = i % 3 == 0 ? true : false; var d5f = i % 5 == 0 ? true : false; document.write('世界のナベアツ→'); if(d3f && d5f) { document.write(i + ' : アホワン '); } else if(d5f && c3f){ document.write(i + ' : アホワン '); } else if(d5f){ document.write(i + ' : ワン '); } else if(d3f || c3f){ document.write(i + ' : アホ '); } else document.write(i+' : '); }
別解としては、こんな書き方もあるようです。
for (var i = 1; i <= 50; i++) { var text = i.toString(); var target = /[3]/.test(text); if (i % 3 === 0 || target) { text = text + 'アホ'; } if (i % 5 === 0) { text = text + 'ワン!' } document.write('世界のナベアツ:' + text + ' '); }