From c528e6ef5501de3c46f84fc14a6b8f0b2f3a13f4 Mon Sep 17 00:00:00 2001 From: j8takagi Date: Fri, 2 Nov 2012 19:48:42 +0900 Subject: [PATCH] =?utf8?q?=E5=89=B2=E7=AE=97=E3=82=92=E4=BD=BF=E3=82=8F?= =?utf8?q?=E3=81=AA=E3=81=84=E3=83=97=E3=83=AD=E3=82=B0=E3=83=A9=E3=83=A0?= =?utf8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- c/fizzbuzz2.c | 29 +++++++++++++++++++++++++++++ casl/fizzbuzz2.casl | 43 +++++++++++++++++++++++++++++++++++++++++++ ruby/fizzbuzz2.rb | 21 +++++++++++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 c/fizzbuzz2.c create mode 100644 casl/fizzbuzz2.casl create mode 100755 ruby/fizzbuzz2.rb diff --git a/c/fizzbuzz2.c b/c/fizzbuzz2.c new file mode 100644 index 0000000..8a511f9 --- /dev/null +++ b/c/fizzbuzz2.c @@ -0,0 +1,29 @@ +#include +#include +enum { + MIN = 1, + MAX = 100, + FIZZNUM = 3, + BUZZNUM = 5, +}; + +int main() +{ + assert(MIN <= FIZZNUM && MIN <= BUZZNUM); + int i, fizz, buzz; + + for(i = fizz = buzz = MIN; i <= MAX; i++, fizz++, buzz++) { + fizz = (fizz == FIZZNUM) ? 0 : fizz; + buzz = (buzz == BUZZNUM) ? 0 : buzz; + if(fizz == 0 && buzz == 0) { + puts("FizzBuzz"); + } else if(fizz == 0) { + puts("Fizz"); + } else if(buzz == 0) { + puts("Buzz"); + } else { + printf("%d\n", i); + } + } + return 0; +} diff --git a/casl/fizzbuzz2.casl b/casl/fizzbuzz2.casl new file mode 100644 index 0000000..3e28fea --- /dev/null +++ b/casl/fizzbuzz2.casl @@ -0,0 +1,43 @@ +MAIN START + RPUSH + LD GR1,MIN ; GR1:カウンター。初期値はMIN + LD GR2,MIN ; GR2:Fizzカウンター。初期値はMIN + LD GR3,MIN ; GR3:Buzzカウンター。初期値はMIN + XOR GR4,GR4 ; GR4:FizzBuzzフラグ。初期値は0 +SETFIZ CPL GR2,FIZNUM ; GR2 = 3ではない場合、SETBUZへジャンプ + JNZ SETBUZ ; ↓ + LAD GR2,0 ; GR2 <- 0 +SETBUZ CPL GR3,BUZNUM ; GR3 = 5ではない場合、PUTFBへジャンプ + JNZ PUTFB ; ↓ + LAD GR3,0 ; GR3 <- 0 +PUTFB LD GR4,GR2 ; GR4 <- GR2 or GR3 + OR GR4,GR3 ; ↓ + JNZ PUTFIZ ; GR4が0ではない場合、GR2とGR4のどちらかが0ではないので、PUTFIZへジャンプ + OUT FIZZ,FBLEN ; 「FizzBuzz」を出力 + JUMP LOPEND ; LOPENDへジャンプ +PUTFIZ LD GR2,GR2 ; GR2が0ではない場合、PUTBUZへジャンプ + JNZ PUTBUZ ; ↓ + OUT FIZZ,FIZLEN ; 「Fizz」を出力 + JUMP LOPEND ; LOPENDへジャンプ +PUTBUZ LD GR3,GR3 ; GR3が0ではない場合、PUTNUMへジャンプ + JNZ PUTNUM ; ↓ + OUT BUZZ,BUZLEN ; 「Buzz」を出力 + JUMP LOPEND ; LOPENDへジャンプ +PUTNUM CALL OUTL ; GR1の数値を表示 +LOPEND CPL GR1,MAX ; GR1とMAXを比較 + JZE FIN ; GR1 = MAX の場合、FINへジャンプ + LAD GR1,1,GR1 ; GR1 <- GR1 + 1 + LAD GR2,1,GR2 ; GR2 <- GR2 + 1 + LAD GR3,1,GR3 ; GR3 <- GR3 + 1 + JUMP SETFIZ ; SETFIZへジャンプ +FIN RPOP + RET +MIN DC 1 ; FIZZNUMとBUZNUMより小さい数値でなければならない +MAX DC 100 +FIZNUM DC 3 +BUZNUM DC 5 +FIZZ DC 'Fizz' +BUZZ DC 'Buzz' +FIZLEN DC 4 +BUZLEN DC 4 +FBLEN DC 8 diff --git a/ruby/fizzbuzz2.rb b/ruby/fizzbuzz2.rb new file mode 100755 index 0000000..4023e8f --- /dev/null +++ b/ruby/fizzbuzz2.rb @@ -0,0 +1,21 @@ +#!/usr/local/bin/ruby + +min = 1 +max = 65535 + +fizz = buzz = min +for i in min..max + fizz = 0 if fizz == 3 + buzz = 0 if buzz == 5 + if fizz == 0 and buzz == 0 + puts("FizzBuzz") + elsif fizz == 0 + puts("Fizz") + elsif buzz == 0 + puts("Buzz") + else + puts(i) + end + fizz += 1 + buzz += 1 +end -- 2.18.0