LoginSignup
4
0

More than 3 years have passed since last update.

「=」を使わずにFizzBuzzを書く

Last updated at Posted at 2020-02-12

「=」を使わずにFizzBuzzを書きたい

特に意味はない
20までのFizzBuzzを「=」を使わずにいろんな言語で書いてみよう

C言語

c_fizzbuzz.c
#include <stdio.h>

int main(void) {
  int n;
  n++;
  while (1) {
    if (n%3 && n%5) {
      printf("%d", n);
    }
    else{
      if (!(n%3)) {
        printf("Fizz");
      }
      if (!(n%5)) {
        printf("Buzz");
      }
    }
    printf("\n");
    n++;
    if (n>20) {
      break;
    }
  }
  return 0;
}

初期化しないと0が入るのを利用(ただしコンパイラによる)
0がFalse、それ以外がTrueになる性質を使って条件分岐する

Python

python_fizzbuzz.py
def fizzbuzz(n):
    if n%3 and n%5:
        return n
    else:
        if not n%3 and not n%5:
            return "FizzBuzz"
        elif not n%3:
            return "Fizz"
        elif not n%5:
            return "Buzz"

for x in list(map(fizzbuzz, range(1,21))):
    print(x)

Pythonはインクリメントがないため
rangeで整数のリストを作成
mapで一気すべてに関数を掛ける方式に
地味に

print("hoge", end="")

が使えないのでつらかった

Java

java_fizzbuzz.java
class java_fizzbuzz {
  static int n;
  public static void main(String[] args) {
    n++;
    while(true){
      if (!String.valueOf(n%3).equals("0") && !String.valueOf(n%5).equals("0")) {
        System.out.print(n);
      }
      else{
        if (String.valueOf(n%3).equals("0")) {
          System.out.print("Fizz");
        }
        if (String.valueOf(n%5).equals("0")) {
          System.out.print("Buzz");
        }
      }
      System.out.println();
      n++;
      if (n>20) {
        break;
      }
    }
  }
}

クラスのメンバ変数は0で初期化されることを利用
Booleanが0 or その他で処理していないことが判明
一旦Stringに変換してequalsで比較することでイコールを使わずに済んだ

まとめ

どうしても「=」を使いたくないときに参考にしてください
なお変数は明示的に初期化するようにしましょう

もっといい書き方がある!
この言語ではこうできる!
等ありましたらコメントへお願いします

4
0
10

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0