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


「=」を使わずに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で比較することでイコールを使わずに済んだ

まとめ

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

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