From: j8takagi Date: Fri, 2 Nov 2012 10:47:54 +0000 (+0900) Subject: 既存プログラムの推敲 X-Git-Url: https://j8takagi.net/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=141084631a1fe756928bca2adb4b79e77cef9875;p=fizzbuzz.git 既存プログラムの推敲 --- diff --git a/c/Makefile b/c/Makefile index 0bcad0e..fb2ddc9 100644 --- a/c/Makefile +++ b/c/Makefile @@ -7,10 +7,15 @@ CASL2SRC := struct.c hash.c ASSRC := assemble.c token.c label.c EXECSRC := exec.c dump.c -.PHONY: clean +.PHONY: all clean -fizzubzz: fizzbuzz.c - $(CC) $(CFLAGS) -o fizzbuzz $^ +all: fizzbuzz fizzbuzz2 + +fizzbuzz: fizzbuzz.c + $(CC) $(CFLAGS) -o $@ $^ + +fizzbuzz2: fizzbuzz2.c + $(CC) $(CFLAGS) -o $@ $^ clean: - @$(RMF) fizzbuzz + @$(RMF) fizzbuzz fizzbuzz2 diff --git a/c/fizzbuzz b/c/fizzbuzz deleted file mode 100755 index 3f12845..0000000 Binary files a/c/fizzbuzz and /dev/null differ diff --git a/c/fizzbuzz.c b/c/fizzbuzz.c index 87d7802..43e73ed 100644 --- a/c/fizzbuzz.c +++ b/c/fizzbuzz.c @@ -1,4 +1,8 @@ #include +enum { + MIN = 1, + MAX = 100, +}; void puts_fizzbuzz(int n) { @@ -19,10 +23,9 @@ void puts_fizzbuzz(int n) int main() { - const int max = 100, min = 1; int i; - for(i = min; i <= max; i++) { + for(i = MIN; i <= MAX; i++) { puts_fizzbuzz(i); } return 0; diff --git a/casl/fizzbuzz.casl b/casl/fizzbuzz.casl index fff05f0..3866614 100644 --- a/casl/fizzbuzz.casl +++ b/casl/fizzbuzz.casl @@ -2,9 +2,9 @@ MAIN START RPUSH LD GR1,MIN ; GR1にMINを代入 LOOP CALL FIZBUZ ; FIZBUZを呼び出す - LAD GR1,1,GR1 ; GR1 <- GR1 + 1 CPL GR1,MAX ; GR1とMAXを比較 - JPL FIN ; GR1 > MAX の場合、FINへジャンプ + JZE FIN ; GR1 = MAX の場合、FINへジャンプ + LAD GR1,1,GR1 ; GR1 <- GR1 + 1 JUMP LOOP ; LOOPへジャンプ FIN RPOP RET @@ -21,30 +21,24 @@ FIZBUZ START XOR GR4,GR4 ; GR4: 文字列「Fizz」の長さおよびフラグ XOR GR5,GR5 ; GR5: 文字列「Buzz」の長さおよびフラグ XOR GR6,GR6 ; GR6: 文字列「FizzBuzz」のフラグ -GETFIZ LD GR2,FIZNUM ; GR2にFIZNUM=3を代入 + LD GR2,FIZNUM ; GR2にFIZNUM=3を代入 CALL DIVL ; GR3 <- GR1 % 3(= GR2) - LD GR3,GR3 ; GR3のフラグ値を取得 - JNZ GETBUZ ; GR3が0でない場合、FIZNUMの倍数ではないので、GETBUZへジャンプ - LD GR4,FIZLEN ; GR4に文字列「Fizz」の長さFIZLEN=4を代入 -GETBUZ LD GR2,BUZNUM ; GR2にBUZNUM=5を代入 + LD GR4,GR3 ; GR4 <- GR3 + LD GR2,BUZNUM ; GR2にBUZNUM=5を代入 CALL DIVL ; GR3 <- GR1 % 5(= GR2) - LD GR3,GR3 ; GR3のフラグ値を取得 - JNZ PUTS ; GR3が0でない場合、BIZNUMの倍数ではないので、PUTSへジャンプ - LD GR5,BUZLEN ; GR4のフラグ値を取得 -PUTS LD GR6,GR4 ; GR6 <- GR4 - AND GR6,GR5 ; GR6 <- GR6 and GR4 - JZE CHKFIZ ; GR6が0の場合、GR4かGR5のどちらかが0なので、CHKFIZへジャンプ - ADDL GR4,GR5 ; GR4 <- GR4 + GR5 - JUMP PUTFIZ ; 「FizzBuzz」を出力するため、PUTFIZへジャンプ -CHKFIZ LD GR4,GR4 ; GR4のフラグ値を取得 - JZE CHKBUZ ; GR4が0の場合、CHKBUZへジャンプ -PUTFIZ ST GR4,LEN ; LEN <- GR4 - OUT FIZZ,LEN ;「Fizz」または「FizzBuzz」を出力 + LD GR5,GR3 ; GR5 <- GR3 + LD GR6,GR4 ; GR6 <- GR4 or GR5 + OR GR6,GR5 ; ↓ + JNZ PUTFIZ ; GR6が0以外の場合、GR4かGR5のどちらかが0以外なので、PUTFIZへジャンプ + OUT FIZZ,FBLEN ; 「FizzBuzz」を出力 + JUMP FIN ; 「FizzBuzz」を出力するため、PUTFIZへジャンプ +PUTFIZ LD GR4,GR4 ; GR4のフラグ値を取得 + JNZ PUTBUZ ; GR4が0以外の場合、PUTBUZへジャンプ + OUT FIZZ,FIZLEN ;「Fizz」を出力 JUMP FIN ; FINへジャンプ -CHKBUZ LD GR5,GR5 ; GR5のフラグ値を取得 - JZE PUTNUM ; GR5が0の場合、PUTNUMへジャンプ -PUTBUZ ST GR5,LEN ; LEN <- GR4 - OUT BUZZ,LEN ;「Buzz」を出力 +PUTBUZ LD GR5,GR5 ; GR5が0以外の場合、PUTNUMへジャンプ + JNZ PUTNUM ; ↓ + OUT BUZZ,BUZLEN ;「Buzz」を出力 JUMP FIN ; FINへジャンプ PUTNUM CALL OUTL ; GR1の数値を表示 FIN RPOP @@ -55,4 +49,4 @@ FIZZ DC 'Fizz' BUZZ DC 'Buzz' FIZLEN DC 4 BUZLEN DC 4 -LEN DS 1 +FBLEN DC 8 diff --git a/ruby/fizzbuzz.rb b/ruby/fizzbuzz.rb index 55b7316..6746370 100755 --- a/ruby/fizzbuzz.rb +++ b/ruby/fizzbuzz.rb @@ -15,7 +15,7 @@ def puts_fizzbuzz(n) end min = 1 -max = 100 +max = 65535 for i in min..max puts_fizzbuzz(i)