LINUX.ORG.RU

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


1

1

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

Задача FizzBuzz

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

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

#include <stdio.h>

int main()
{
    int i;
    for (i = 1; i <= 100; i++) {
        if (i % 3 == 0) {
            printf("Fizz");
        }
        if (i % 5 == 0) {
            printf("Bizz");
        }
        if (i % 5 != 0 && i % 3 != 0)
            printf("%d", i);
        printf("\n");
    }
    return 0;
}
Diecae8i
()
#include <stdio.h>

int main()
{
	int i;
	for (i=1;i<=100;i++){
		if (!(i % 3)){
			if (!(i % 5)) printf("Fizzbuzz\n");
			else printf("Fizz\n");
		} else if (!(i % 5)) printf("Buzz\n");
		else printf("%d\n",i);
	}
	return 0;
}
fads ★★
()
for (1..100) {
        my $t = '';
        $t = 'Fizz' unless $_ % 3;
        $t .= 'Buzz' unless $_ % 5;
        $t ||= $_;
        print "$t\n";
}

на бумаге за 3 минуты примерно, со второй попытки…

arsi ★★★★★
()

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

На клаве набрать - 2 минуты. Но. Писать руками может быть печально, ибо по крайней мере я почти разучился писать ручкой...

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

вчера на работе провели тест (сам за 3 минуты справился, но мне простительно, я уже более 2ух лет занимаюсь только руководством отдела, к кодингу совсем не прикасаюсь) :). Все вобщем-то справились, но потом решили «померяться» на производительность. Беда скриптовых языков - притупляется мышление. Другими словами, перестаешь задумываться над некоторыми конструкциями. Вот в частности в этом примере практически все применили range(1,101) и ведь никто не задумался, что формирование списка для этой задачи является самой затратной. Помимо этого, именно этот вариант (со склейкой строк) хуже по производительности, нежели если использовать перебор вариантов i%15, i%3, i%5 (именно в этой последовательности, из-за вероятности срабатывания каждого из них).

Deleted
()

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

К.О. говорит, что автор задачи непроходимый тупица.

anonymous
()
#include <stdio.h>
int main() {
  for (int i=1; i<=100; i++) {
    int a=i%3, b=i%5;
    if (a)
      if (b) printf("%d\n");
      else printf("Buzz\n");
    else
      if (b) printf("Fizz\n");
      else printf("FizzBuzz\n");
  }
}
anonymous
()

3 минуты, си, на бумаге. Задачка начала первого курса, я не верю в программеров не могущих ее решить.

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

> я не верю в программеров не могущих ее решить.

Я тоже. Я даже не программер, если на то пошло, а решение заняло столько же.

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

Преждевременная оптимизация в отрыве от контекста глупое и бесполезное занятие.

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

Если думать о производительности, то вообще надо предварительно вычисленные значения использовать. Как-то так:

#include <iostream>
using namespace std;
int main() {
   cout << "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" << endl;
   return 0;
}

fluorite ★★★★★
()

Сначал написалн на C минуты за 3 прямо здесь, большую часть времени ставил пробелы и {}. А потом подумал: «ну и х*ли?» и стёр.

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

> Как-то так:

Маразм крепчал?

anonymous
()

Встречал эту задачку как пример того что можно дать на собеседовании, чтобы понять насколько человек умеет программировать. (В том смысле, что написать в резюме много что можно, но вот на практике. По идее задача очень простая и не должна вызвать затруднений.)

php-coder ★★★★★
()
#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)
			printf("Fizz\n");
		else if (i%5 == 0)
			printf("Buzz\n");
		else if (i%3 == 0 && i%5 == 0)
			printf("FizzBuzz\n");
		else
			printf("%d\n", i);
	}

	return EXIT_SUCCESS;
}

2 минуты, если не секрет, какой ВУЗ? =))

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

Проблема в том, что у многих (большинства?) написанныза две минуты код не работает

ConnorMcLaud
() автор топика
Ответ на: комментарий от gizzka

Сюдя по отсутствию кода вы с задачей не справились

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

2 минуты

Что-то не похоже :)

 > new-timespan -start '15:21:50' -end '18:21:15'


Days              : 0
Hours             : 2
Minutes           : 59
Seconds           : 25
Milliseconds      : 0
Ticks             : 107650000000
TotalDays         : 0,124594907407407
TotalHours        : 2,99027777777778
TotalMinutes      : 179,416666666667
TotalSeconds      : 10765
TotalMilliseconds : 10765000

TGZ ★★★★
()

однострочник на пейтоне

 [("FizzBuzz" if (x % 3 == 0) and (x % 5 == 0) else "Fizz" if x % 3 ==0 else "Buzz" if x % 5 ==0 else x) for x in xrange(1,101)] 
anon1984
()

3 min

seq 1 100 | awk '{a3=$1%3; a5=$1%5}
                 !a3 &&  a5 {print "Fizz"};
                  a3 && !a5 {print "Buzz"};
                 !a3 && !a5 {print "FizzBuzz"};
                  a3 &&  a5 {print}'
sdio ★★★★★
()
Ответ на: комментарий от backbone

> 2 минуты, если не секрет, какой ВУЗ? =))

Неправильно решил. Дополнительные три минуты у тебя есть.

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

> фича лора, в ширину поля не вместилось (

Я в том смысле, что бред сивой кобылы писать все одной строкой.

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

примерно небредовый вариант был написан в сообщении намбер ван. ну и list comprehension пооптимальней вроде как

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

> printf(«%d\n»)

printf(«%d\n»,i), ясное дело.

anonymous
()
#include <stdio.h>

int
main(void)
{
  int i = 0;
  for (i = 0; i <= 100; i++)
    {
      if (i % 3 == 0)
        printf ("Fizz");
      if (i % 5 == 0)
        printf ("Buzz");
      if (i % 5 != 0 && i % 3 != 0)
        printf ("%d", i);
      printf ("\n");
    }
}
age
()
Ответ на: комментарий от arsi

Привычка :\
Немного измененный вариант, на одну проверку меньше.

#include <stdio.h>

int
main(void)
{
  for (int i = 0; i <= 100; i++)
    {
      if (i % 3 == 0)
        printf ("Fizz");
      if (i % 5 == 0)
        {
          printf ("Buzz\n");
          continue;
        }
      if (i % 3 != 0)
        printf ("%d", i);
      printf ("\n");
    }
}

age
()
Ответ на: не, ты не понял… от arsi

Да какая разница. А падения производительности(даже какого-то микроскопического) от повторного присвоения i = 0 в моем первом примере не будет?

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

> А падения производительности(даже какого-то микроскопического) от повторного присвоения i = 0 в моем первом примере не будет?

Рассудить логически, микроскопическое - будет.

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

Да какая разница.

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

mashina ★★★★★
()

Умницы, придрались к лишнему FB из-за нуля, на который мне уже указали. Анон, а это не будет оптимизировано? Хотя, зависит от компилятора.

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

> Да какая разница.

no comments.

> А падения производительности(даже какого-то микроскопического) от повторного присвоения i = 0 в моем первом примере не будет?

если включена оптимизация — совсем не будет, так что можно смело писать

int i = 0;
i = 0;
for (int j = 0; j < 1000; j++)
	i = 0;
...
а то вдруг компилятор с первого раза не помёт…

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