FizzBuzz

Kat sini pun nak cuba syntax highlighting punya plugin jadi macam pos kat sana, kita cuba taruk code juga kat sini. FizzBuzz ni kiranya macam soalan interview ringkas untuk tapis calon-calon yang tak layak. Soalannya berbunyi begini:

Tulis satu program yang akan mencetak nombor dari 1 ke 100. Tapi untuk nombor yang boleh dibahagi dengan 3, gantikan nombor itu dengan “Fizz”. Untuk nombor yang boleh dibahagi dengan 5, gantikan nombor itu dengan “Buzz”, dan untuk nombor yang boleh dibahagikan dengan kedua-dua nombor 3 dan 5, gantikan dengan “FizzBuzz”.

Secara logiknya kita akan periksa nombor tu satu-satu untuk tengok adakah nombor itu memenuhi kehendak kondisi soalan tersebut. Sebagai contoh, nombor 12 memenuhi kondisi pembahagian dengan 3 tapi bukan 5 jadinya kita hanya akan cetak “Fizz”. Untuk nombor 15 ianya memenuhi kedua-dua kondisi jadi kita boleh cetak “FizzBuzz”. 

Logik dalam bentuk pseudocode ataupun orang kata secara tulisan ringkas ialah seperti ini.

Untuk n dari 1 hingga 100:
  jika n boleh dibahagi 3 dan 5:
    cetak "FizzBuzz"
  ataupun jika n boleh dibahagi 3:
    cetak "Fizz"
  ataupun jika n boleh dibahagi 5:
    cetak "Buzz"
  kalau bukan semua
    cetak n

Untuk itu, saya ada satu set penyelesaian untuk soalan ini dalam beberapa bahasa pengaturcaraan.

# Python
# untuk range(1, 101), nombor 101 tak termasuk.
# untuk penyelesaian ini, ikut macam pseudocode diatas.
for n in range(1, 101):
  if n % 3 == 0 and n % 5 == 0:
    print("FizzBuzz")
  elif n % 3 == 0:
    print("Fizz")
  elif n % 5 == 0:
    print("Buzz")
  else:
    print(n)
# Ruby
def fb_gen(num_list)
  num_list.each do |n|
    output = case
      when n % 15 == 0 then "FizzBuzz"
      when n % 3 == 0 then "Fizz"
      when n % 5 == 0 then "Buzz"
      else n
    end
    puts output
  end
end

fb_gen(1..100)
// Dart
void main() {
  // jana nombor dari 1 ke 100 ke dalam satu list
  List<int> hundred = new List<int>.generate(100, (int index) => index+1); 
  fb_gen(hundred);
}

void fb_gen(List<int> num_list) {
  num_list.forEach((int n) {
    if(n % 15 == 0) print("FizzBuzz");
    else if(n % 3 == 0) print("Fizz");
    else if(n % 5 == 0) print("Buzz");
    else print(n);
  });
}
# Bonus: Elixir
fb_gen = fn
  {0, 0, _} -> "FizzBuzz"
  {0, _, _} -> "Fizz"
  {_, 0, _} -> "Buzz"
  {_, _, n} -> n
end

fb_decider = fn n -> IO.puts fb_gen.({rem(n,3), rem(n,5), n}) end

Enum.map(1..100, fb_decider)

Setel.

Leave a Reply

Your email address will not be published. Required fields are marked *