LINUX.ORG.RU

[FizzBuzz] Тестовое задание на пять минут


1

1

Автор задачи утверждает, что большинство программистов не напишут решение этой задачи на бумажке быстрее, чем за пять минут.

Задача FizzBuzz

Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово «Fizz», а вместо чисел, кратных пяти — слово «Buzz». Если число кратно и 3, и 5, то программа должна выводить слово «FizzBuzz»

А как с этим дела обстоят на ЛОРе?

Ответ на: комментарий от age

> а это не будет оптимизировано?

Все может быть, но вообще некрасиво так баловаться.

anonymous
()
Ответ на: комментарий от RADO
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char * argv[])
{
	int i = 0;

	for (i = 0; i < 100; i++)
		if (i%3 == 0 && i%5 == 0)
			printf("FizzBuzz\n");
		else if (i%3 == 0)
			printf("Fizz\n");
		else if (i%5 == 0)
			printf("Buzz\n");
		else
			printf("%d\n", i);

	return EXIT_SUCCESS;
}
backbone ★★★★★
()
Ответ на: комментарий от arsi

и правда) спасибо за разъяснения
пойду грипп долечивать, что-то он уже на голове сказываться начинает...
про 3) дельное замечание!

backbone ★★★★★
()
// fizz-buzz.cs. 3 min, 1st try
using System;

public static class FizzBuzz {
  public static void Main() {
    for(int i = 1; i<=100; i++) {
      if( i % 15 == 0 ) Console.WriteLine("FizzBuzz");
      else if ( i % 5 == 0 ) Console.WriteLine("Buzz");
      else if ( i % 3 == 0 ) Console.WriteLine("Fizz");
      else Console.WriteLine(i);
    }
  }
}

Это какая-то дискриминация

yaws
()
% 2min
-module(fizzbuzz).
-compile(export_all).

f(N) when (N rem 15) == 0 -> io:format("FizzBuzz~n", []), f(N+1);
f(N) when (N rem 5) == 0 -> io:format("Buzz~n", []), f(N+1);
f(N) when (N rem 3) == 0 -> io:format("Fizz~n", []), f(N+1);
f(101) -> ok;
f(N) -> io:format("~p~n", [N]), f(N+1).

start() -> f(1).

Еще одна дискриминация, ящитаю

yaws
()

Ruby. Почти идентично решению на python.

1.upto(100) do |v|
  s = ""
  s += "Fizz" if v % 3 == 0
  s += "Buzz" if v % 5 == 0
  if not s.empty? then
    puts s
  else
    puts v.to_s
  end
end

Lua.

for i = 1,100 do
   local s = ""
   if i % 3 == 0 then
      s = s .. "Fizz"
   end
   if i % 5 == 0 then
      s = s .. "Buzz"
   end
   if s ~= "" then
      print(s)
   else
      print(i)
   end
end

age
()
Ответ на: комментарий от yaws

Чой-то у меня на Erlang и C# код одной длины вышел. Хм.

yaws
()
Ответ на: комментарий от age

Не, со строками это, видимо, не сильно кошерно в плане скорости :) Хотя вариант :)

yaws
()
echo "1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 43 44 FizzBuzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 FizzBuzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 FizzBuzz 76 77 Fizz 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88 89 FizzBuzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz" | sed -e 's/ /\n/g'
derlafff ★★★★★
()

Напейсал решение в имэксе меньше чем за минуту.

Raving_Zealot ★★
()

Пытался написать масштабируемо. Плохо? :)

#include <stdio.h>

int main(int argc, char *argv[argc])
{
	{
	char const *output[] = {"%d\n", "Fizz\n", "Buzz\n", "FizzBuzz\n"};
	for(size_t i = 1, check = 0; i <= 100; ++i, check = 0)
	{
		if(0 == i%3)check |=1;
		if(0 == i%5)check |=2;

		printf(output[check], i);
	}
	}
	return getch();
}

dr_dizel
()

for (int i = 0; i < 100; i++){
int d5 = i % 5;
int b3 = i % 3;
if (!d3) printf («Fizz»);
if (!d5) printf («Buzz»);
if !(d3 && d5) printf («%d», i);
printf («\n»);
}

4 минуты, тратил время на набирания кода в окошке ответа :)
Не проверял, лень. Оно правильно?

Dimanc ★★
()
Ответ на: комментарий от backbone

Респект! Сначала делимость на 15 проверяем, потом только на 3 или 5.

anonymous
()
Ответ на: комментарий от Dimanc

> for (int i = 0; i < 100; i++){

for (int i = 1; i <= 100; i++){

int b3 = i % 3;

int d3 = i % 3;

if !(d3 && d5) printf («%d», i);

if (d3 && d5) printf («%d», i);

Fixed.

anonymous
()
toString :: Int -> String
toString n | n `mod` 15 == 0 = "FizzBuzz"
           | n `mod`  3 == 0 = "Fizz"
           | n `mod`  5 == 0 = "Buzz"
           | True            = show n

solve :: [Int] -> IO ()
solve [] = return ()
solve (x:xs) = do putStrLn (toString x)
                  solve xs

main :: IO ()
main = solve [1 .. 100]
Raving_Zealot ★★
()
Ответ на: комментарий от anonymous

Не, такого симпатичного на эрланге даже не пробую делать..

Единственное, что:

newLISP v.10.2.8 IPv4 UTF-8, execute 'newlisp -h' for more info.

ERR: invalid function : (mapcar '((X) (if2 (=0 (% X 3)) (=0 (% X 5)) 'Fizzbuzz 'Fizz 'Buzz X)) (range 1 100))
> 
Не везде работает :)

yaws
()

java 2 минуты. я дольше NetBeans запускал.

RedPossum ★★★★★
()

Для коллекции. Осторожно оффтоп.

1..100 | % {

	if (!( $_ % 3 )) { $res = "Fizz" }
	if (!( $_ % 5 )) { $res = "$($res)Buzz" }
	if ( $res )      { $res } else { $_ }
	$res = $null

}
@echo off
setlocal enabledelayedexpansion

for /l %%i in (1,1,100) do (

	for /f %%j in ('set /a %%i%%3') do if %%j==0 set "res=Fizz"
	for /f %%j in ('set /a %%i%%5') do if %%j==0 set "res=!res!Buzz"
	if defined res (echo !res!) else (echo %%i)
	set "res="

)

TGZ ★★★★
()
Ответ на: комментарий от Dimanc

> 4 минуты
> Не проверял, лень.
> Dimanc * (15.01.2011 21:12:19)

> аа...
> Dimanc * (15.01.2011 21:16:43)

> тьфу..
> Dimanc * (15.01.2011 21:18:03)

выводы сам сделаешь? ;)

arsi ★★★★★
()
FOR A = 1 TO 100
    IF A MOD 3 = 0 AND A MOD 5 = 0 THEN
        PRINT "FizzBuzz"
    ELSE IF A MOD 3 = 0 THEN
        PRINT "Fizz"
    ELSE IF A MOD 5 = 0 THEN
        PRINT "Buzz"
    ELSE
        PRINT A
    END IF
NEXT A
PolarFox ★★★★★
()
org 100h

mov bx,1

lab1:
mov ax,bx
mov cl,3
div cl
cmp ah,0
jne lab3
mov ah,9
mov dx,fizz
int 21h
mov ax,bx
mov cl,5
div cl
cmp ah,0
jne lab5

lab2:
mov ah,9
mov dx,buzz
int 21h
jmp lab5

lab3:
mov ax,bx
mov cl,5
div cl
cmp ah,0
je lab2
mov ax,bx
mov cl,10
div cl
cmp al,0
je lab4
push ax
mov ah,2
mov dl,al
add dl,'0'
int 21h
pop ax

lab4:
mov dl,ah
mov ah,2
add dl,'0'
int 21h

lab5:
mov ah,2
mov dl,' '
int 21h
inc bx
cmp bx,100
jle lab1

int 20h

fizz db "Fizz$"
buzz db "Buzz$"

Да здравствует Ъ-DOS!

P.S. Уложился всего в 15 минут, ибо асм подзабыл и пришлось гуглить. Собирать fasm'ом, не оптимизировал, 106 байт.

anonymous
()

putStr (foldr (\x y -> x++«\n»++y) «» (map (\x -> [«Fizz», «„] !! (signum (rem x 3)) ++ [„Buzz“, “„] !! (signum (rem x 5)) ++ (((\z -> [(\y -> “"), (\y -> show y)] !! z) (signum $ product [(rem x 3), (rem x 5)])) x )) [1..100]))

Однострочник без условных конструкций. Ушло сильно больше 5 минут.

certanista
()
package main

import "fmt"

func main() {
    for i:=0;i<100;i++ {
        if  i%15 == 0  {
            fmt.Printf("FizzBuzz\n")
        } else if  i % 5 == 0  {
            fmt.Printf("Buzz\n")
        } else if  i % 3 == 0  {
            fmt.Printf("Fizz\n")
        } else {
            fmt.Printf("%d\n",i)
        }

    }
}

qnikst ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.