From 141084631a1fe756928bca2adb4b79e77cef9875 Mon Sep 17 00:00:00 2001
From: j8takagi <info@j8takagi.net>
Date: Fri, 2 Nov 2012 19:47:54 +0900
Subject: [PATCH] =?utf8?q?=E6=97=A2=E5=AD=98=E3=83=97=E3=83=AD=E3=82=B0?=
 =?utf8?q?=E3=83=A9=E3=83=A0=E3=81=AE=E6=8E=A8=E6=95=B2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

---
 c/Makefile         |  13 +++++++++----
 c/fizzbuzz         | Bin 8434 -> 0 bytes
 c/fizzbuzz.c       |   7 +++++--
 casl/fizzbuzz.casl |  42 ++++++++++++++++++------------------------
 ruby/fizzbuzz.rb   |   2 +-
 5 files changed, 33 insertions(+), 31 deletions(-)
 delete mode 100755 c/fizzbuzz

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 3f12845b445a11e07d27783a560e3862ca0e645f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8434
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

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 <stdio.h>
+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)
-- 
2.18.0