If文と三項演算子を使わずにFizzBuzz
最近FizzBuzzが流行っているようなのでIf文と三項演算子を使わずに書いてました。
書き終えてから気づいたけど、関数ポインタよりも文字列配列使ってインデックスを指定したほうがスマートに書けたなー。。。
C言語
#include <stdio.h> void sayNothing(void); void sayFizz(void); void sayBuzz(void); void sayNumber(int num); int main (int argc, const char * argv[]) { void (*fizz[])() = {sayNothing, sayFizz}; void (*buzz[])() = {sayNothing, sayBuzz}; void (*number[])() = {sayNothing, sayNumber}; int i; for (i=1; i<=100; i++) { (*fizz[i%3==0])(); (*buzz[i%5==0])(); (*number[!(i%3==0||i%5==0)])(i); printf(", "); } printf("\n"); return 0; } void sayNothing(){ return; } void sayFizz(){ printf("Fizz"); } void sayBuzz(){ printf("Buzz"); } void sayNumber(int num){ printf("%d",num); }
結果
1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, 16, 17, Fizz, 19, Buzz, Fizz, 22, 23, Fizz, Buzz, 26, Fizz, 28, 29, FizzBuzz, 31, 32, Fizz, 34, Buzz, Fizz, 37, 38, Fizz, Buzz, 41, Fizz, 43, 44, FizzBuzz, 46, 47, Fizz, 49, Buzz, Fizz, 52, 53, Fizz, Buzz, 56, Fizz, 58, 59, FizzBuzz, 61, 62, Fizz, 64, Buzz, Fizz, 67, 68, Fizz, Buzz, 71, Fizz, 73, 74, FizzBuzz, 76, 77, Fizz, 79, Buzz, Fizz, 82, 83, Fizz, Buzz, 86, Fizz, 88, 89, FizzBuzz, 91, 92, Fizz, 94, Buzz, Fizz, 97, 98, Fizz, Buzz,
ActionScript
package { import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFieldAutoSize; public class FizzBuzz extends Sprite { private var tf:TextField; public function FizzBuzz() { //TextFieldの設定 tf = new TextField(); addChild(tf); tf.border = true; tf.multiline = true; tf.wordWrap = true; tf.autoSize = TextFieldAutoSize.LEFT; tf.width = 400; tf.accessibilityImplementation //FizzBuzz var funcs:Vector.<Function> = new Vector.<Function>; funcs.push( function(num:int):void{addText(num.toString());}, function():void{addText("Fizz");}, function():void{addText("Buzz");}, function():void{addText("FizzBuzz");} ); for (var i:int = 1; i <= 100; i++) { funcs[int(i%3==0)+int(i%5==0)*2](i); addText(", "); } } private function addText(text:String):void { tf.appendText(text); } } }
結果はC言語と同じです。