心の旅 blog

心だけでも旅に出れる

【いろんな言語で書いてみた】FizzBuzz問題

  • 王道である「FizzBuzz」問題
    1〜100を出力する場合に、3で割り切れる場合は「Fizz」、5で割り切れる場合は「Buzz」、両方で割り切れる場合は「FizzBuzz」と出力し、その他は数字を出力する。 これの制限を設けた版が難しいが、今回は制限なしで解こうと思います。 制限を設けた版(例、「%」演算子を使用しない)は、今後書いてみたいと思う。

PHP

<?php

for($i=0; $i<100; $i++) {
  if($i % 3 == 0 && $i % 5 == 0) {
    echo "fizzbuzz\n";
  } elseif($i % 3 == 0) {
    echo "fizz\n";
  } elseif($i % 5 == 0) {
    echo "buzz\n";
  } else {
    echo $i."\n";
  }
}

JavaScript

var i;
for(i=1; i<=100; i++) {
  if(i%3 == 0 && i%5 == 0) {
    console.log("FizzBuzz");
  } else if(i%3 == 0) {
    console.log("Fizz");
  } else if(i%5 == 0) {
    console.log("Buzz");
  } else {
    console.log(i);
  }
}

Ruby

for i in 1..100 do
  if i%3 == 0 && i%5 == 0 then
    puts :FizzBuzz
  elsif i%3 == 0 then
    puts :Fizz
  elsif i%5 == 0 then
    puts :Buzz
  else
    puts i
  end
end

Python

i = 0
for i in range(1, 101):
  if i%3 == 0 and i%5 == 0:
    print 'FizzBuzz'
  elif i%3 == 0:
    print 'Fuzz'
  elif i%5 == 0:
    print 'Buzz'
  else:
    print i

GO

package main

import "fmt"

func main() {
>-for i := 1; i <= 100; i++ {
>->-if i%3 == 0 && i%5 == 0 {
>->->-fmt.Println("FizzBuzz")
>->-} else if i%3 == 0 {
>->->-fmt.Println("Fizz")
>->-} else if i%5 == 0 {
>->->-fmt.Println("Buzz")
>->-} else {
>->->-fmt.Println(i)
>->-}
>-}
}

Elixir

defmodule Fizzbuzz do
  def loop(count) when count == 100 do
    IO.puts "Finish";
  end

  def loop(count) do
    hitFizzBuzz(count)
    loop(count + 1)
  end

  def hitFizzBuzz(i) do
    case i do
      i when rem(i, 3) == 0 and rem(i, 5) == 0 ->
        IO.puts "FizzBuzz"
      i when rem(i, 3) == 0 ->
        IO.puts "Fizz"
      i when rem(i, 5) == 0 ->
        IO.puts "Buzz"
      i ->
        IO.puts i
    end
  end
end

Fizzbuzz.loop(1)