プログラミングの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問題を実際にやってみて、自分もそれなりにやれることが分かって良かった半面、本職の方の凄さを痛感しました。
エディタの見た目は良くなったので、少しずつ知識を蓄えて良いものが書けるようになりたいです。
