プログラミングのWebページを見ていると、仮の文字列として「Hello! World」「hoge」「FizzBuzz」がよく使われています。
なんとなく「FizzBuzz」を調べてみたら、プログラミングの練習問題として「FizzBuzz問題」があるらしいのです。
「FizzBuzz」とは、順番に数字を言っていき、3の倍数で「Fizz」、5の倍数で「Buzz」、15の倍数で「FizzBuzz」と言う言葉遊びのこと。それをプログラムで出力させるのがFizzBuzz問題です。
せっかくなのでやってみよう、と思ったら、調べたウェブサイトに答えが書いてあるではありませんか。
んー、どうしよう?と、思って閃いたのが「世界のナベアツ」。そう、「3の倍数と3が付く数字のときだけアホになってみた」です。
というわけで、Google Apps Scriptで「FizzBuzz問題・世界のナベアツバージョン」をやってみました。
まず、何も考えずにGoogle Apps ScriptでFizzBuzz問題を書いてみた
なんのひねりもないですが、普通に書くとこうなるよ、というコードがこちらです。
function FizzBuzz() {
let a = '';
for (let i = 1; i <= 100; i++) {
if (i % 15 == 0) {
a = 'Fizz Buzz';
} else if (i % 3 == 0) {
a = 'Fizz';
} else if (i % 5 == 0) {
a = 'Buzz';
} else {
a = i;
};
console.log(a);
}
}
// 出力した結果
// 1,2,'Fizz',4,'Buzz','Fizz',7,8,'Fizz','Buzz',11,'Fizz',13,14,'Fizz Buzz',16,17,'Fizz',19,'Buzz','Fizz',22,23,'Fizz','Buzz',26,'Fizz',28,29,'Fizz Buzz',
// 31,32,'Fizz',34,'Buzz','Fizz',37,38,'Fizz','Buzz',41,'Fizz',43,44,'Fizz Buzz',46,47,'Fizz',49,'Buzz','Fizz',52,53,'Fizz','Buzz',56,'Fizz',58,59,'Fizz Buzz',
// 61,62,'Fizz',64,'Buzz','Fizz',67,68,'Fizz','Buzz',71,'Fizz',73,74,'Fizz Buzz',76,77,'Fizz',79,'Buzz','Fizz',82,83,'Fizz','Buzz',86,'Fizz',88,89,'Fizz Buzz',
// 91,92,'Fizz',94,'Buzz','Fizz',97,98,'Fizz','Buzz'
2022年12月6日追記:15の倍数から判定するように修正しました。コメントでのご指摘ありがとうございます。
このFizzBuzz問題、「2分以内」とか「1行で」と制限を設けてやることもあるそうです。
1行で書いた方によると、for文を工夫したり「短絡論理OR演算子」、「三項演算子」を使うと短く書けるとのこと。
初めて知ったキーワードなので、とても勉強になりました。
世界のナベアツバージョンを書いてみた
何も調べずに書いたものがこちらです。
function BecomeStupidOnly3(){
for (let i = 1; i <= 40; i++){
if(String(i).match('3') > 0 | i%3 == 0){
console.log(i + "!(アホっぽく)");
}else{
console.log(i);
}
}
console.log('オモロー!');
}
// 出力した結果
// 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,30!(アホっぽく),
// 31!(アホっぽく),32!(アホっぽく),33!(アホっぽく),
// 34!(アホっぽく),35!(アホっぽく),36!(アホっぽく),
// 37!(アホっぽく),38!(アホっぽく),39!(アホっぽく),
// 40,オモロー!
多少の記述ミスに阻まれながらも、10分くらいで完成しました。
ナベアツバージョンをWebで調べてみた
やはりブレイクした2007~2008年あたりにチャレンジした方が多く見られました。
3の付く数字の見つけ方として他にあったのは、正規表現を使うとか、数学的に考えるとかでした。
中でも、3の付く数字は「10・100・1000」と順番に割っていき余りが3になる、という見つけ方には目から鱗でした。
まとめ
FizzBuzz問題を実際にやってみて、自分もそれなりにやれることが分かって良かった半面、本職の方の凄さを痛感しました。
エディタの見た目は良くなったので、少しずつ知識を蓄えて良いものが書けるようになりたいです。