LINUX.ORG.RU

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


1

1

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

Задача FizzBuzz

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

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

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

>> (mapcar '((X) (if2 (=0 (% X 3)) (=0 (% X 5)) 'Fizzbuzz 'Fizz 'Buzz X)) (range 1 100))

Не работает. А если бы работало, то лисп бы опять всех порвал.

Это работающий код, но это не common lisp. Для того, что бы это заработало и у вас, возмите лисп c http://software-lab.de/down.html

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

>Ну давайте немного усовершенствуем задание.

ну так давайте исходя из задания тогда и решать задачи а не делать универсально-глобально-истинно-верную хрень да?

конкатенаторы блин?

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

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

Вы что смеетесь? Я не для пионеров код писал. ТЗ же есть. Даже баран поймет, что делает код в комментариях в топике, посвященном одной конкретной задаче. А генераторные выражения вообще наглядны и понятны. Это практически цикл for, только задом наперед записанный. Нет ни одной скобки в условиях, потому что они последовательно проверяются. Распарсивать нечего. Что там может быть непонятного? Или (x % 3) == 0 вместо not x % 3 называется «использовать возможности языка на полную»?

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

> не понимает сути питона Ты сам-то такой код когда смог бы записать, через какой срок после начала обучения питону, не оправдываясь _читаемостью_? Не подкалываю, серьезно спрашиваю. Думаешь ньюб допетрит до такого? Способность хорошо читать код, как и способность хорошо писать его, тоже развивается вообще-то. wbr, К.О.

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

утрируешь. Не зная ТЗ твой код труднее чем мой или tia. Никто не спорит что его нетрудно понять, но по ясности он проигрывает моему варианту - раз. По скорости - два. Зачем так писать тогда? Надо использовать списковые выражения там где они оправданы, а тут, в данной задаче они неэффективны.

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

Уж поверь, для некоторых вещей я и не так могу извратиться чтобы в конце концов получить красивый вариант(читающие мой жуйк или хоть блог знают).
Ты же здесь даже ничего такого и не придумывал, ничего и не делал такого, чтобы «быть способным». Это тоже самое, что и делали остальные, просто ты записал это в виде генератора на питоне, при этом сделав аж 2 цикла.
Разбей ты этот код на отдельные строки - читаемость была бы в раз 10 лучше, но всё-равно ужасной.

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

Отвечаю обоим.
Архимед как-то сказал, что с помощью подходящего рычага смог бы подвинуть Землю, но перед твоим, tia, ЧСВ он наверняка спасовал бы.
Похоже каждый посетитель лора должен однажды понять, что ты - толстенный тролль.
Я письками меряться не собираюсь, и твои способности мне побоку.
Ты бы хоть прочитал мой коммент, когда ответ писал. А то я о мягком, ты о тёплом. Говорить не с кем, и не о чём.
chinarulezzz:
Какая ясность и скорость имеются в виду? Ну а у меня зато списки не создаются на каждой итерации. И что? Мой код экономит память (там генераторное выражение, а не list comprehension), и гремит салют в мою честь? Так, ёпте, давайте ещё на Cython побежим переписывать.
Что бы ты ни писал, затык по скорости будет не в таком маленьком участке кода.
Да и потом, нафиг вы проверяете равенство остатка нулю?
В рамках задачи достаточно знать, делится ли нацело «x» на 3 и 5, другими словами даёт ли операция '%' остаток:
not x % 3 # это pythonic в отличие от
(x % 3) == 0
, что бы мне тут не говорили.

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

Опять пёрнул в лужу? Я твой пост прочитал, даже потрудился его разобрать(русский явно не твой родной), а мне ты тут о каком то ЧСВ(откуда вообще ты это взял?), о троллизме(я затроллировал всех указав что твой код - говно?).
Правильно, не нужно мериться письками, ты же как всегда проиграешь и будешь нести чушь о моём ЧСВ и о том, что я тролль.

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

>not x % 3 # это pythonic в отличие от

(x % 3) == 0

Всё, пацанчик, ты доигрался. Ты не знаешь что такое «pythonic». Хотя, конечно, ты мог и почитать что-то, но не понять.

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

> Всё, пацанчик, ты доигрался.
Всё правильно он сказал про == 0 и not, чо ты гонишь-то на братана?

anonymous
()

никаких ссаных делений!

#include <stdio.h>
int main() {
    int i=0, three=0, five=0;
    do {
        i++;
        three++;
        if (three == 3)
            three = 0;
        five++;
        if (five == 5)
            five = 0;
        if (!three) {
            printf("Fizz");
            if (!five) {
                printf("Buzz");
            }
        } else if (!five) {
            printf("Buzz");
        } else {
            printf("%u", i);
        }
        printf("\n");
    } while (i < 100);
    return 0;
}
anonymous
()
Ответ на: комментарий от tia

Уважаемый ЗАДРОtiaК.
Все знают, что Вы — тролль.
Можно создать топик-опрос на эту тему, и он не будет пользоваться никакой популярностью: все и так же об этом знают, зачем об этом говорить/писать?
А русский мой родной, ага.
И «г...», и «п...рнул» не я написал, изысканный Вы наш. Видимо вышли из себя. Это заметно по паре пропущенных запятых в Вашем безупречном «высоком штиле».
Наверное то, что в Вашем коде по два раза будут проверяться условия для половины чисел из интервала, и есть «pythonic»?

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

Да и потом, нафиг вы проверяете равенство остатка нулю?

Не знаешь? Учись. Скорость замерь, сверь с проверкой not(n % 3) и не пиши больше о pythonic :)

P.S. хотя, должен заметить что скорость выигрыша мили3.14zдрическая, и аргумент достаточно слабый, но в прибавке с ясностью кода, такой стиль кодирования предпочтительней. Если можно упростить - надо так и делать)

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

Ничего он не сказал правильного. Он может только учить языки и быдлокодить.
Он сказал что не нужно знать равен ли остаток нулю, нужно просто знать даёт ли деление остаток или нет.
Для этого он предложил кастовать остаток деления в bool и проверять, равно ли оно false.

not x/3

Это является не более чем извращение, хак. Оно не соответствует python-way из-за того, что скрывает оригинальную идею.
Стоит просто почитать код, чтобы понять.

не х/3

х не делится на 3


Однако «not х/3» выполняет совсем не такую операцию.

Вот почему этот анонимус не понимает что такое pythonic.

Конечно, "(x % 3) == 0" не самый лучший вариант. Более питоническим вариантом будет "(x % 3) is 0".

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

> вам не кажется, что в духе питона было бы использовать float.is_integer()

Я всегда подоздревал, что питон - язык с душком...

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

Могу и поучиться, было бы чему. Хотя вот здесь, кажется, я и сам кое-чему поучил тебя ;-):
http://www.linux.org.ru/forum/development/5725523?lastmod=1295258702220#comme...
Поверишь на слово, что это я, молодец, нет — ну и ладно.
Со скоростью ты уже задрал. В треде 4-ре страницы, но только ты один мусолишь эту тему. Хотя, как оказалось, и выигрыш-то незначительный.
Про побочную генерацию сотни списков тоже ответа не услышал.
--------

not x/3


Где такое увидел уважаемый критик. В оригинале написано:

not x%3


Слив последующей критики засчитан.

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

Где такое увидел уважаемый критик. В оригинале написано:

Абстрагируйся, я тебе сказал чтоб ты увидел разницу между not x/3 и x/3 == 0. Цепляешься?)) Хорошо, больше нет аргументов значит. Да и тебе уже объяснили где ты лоханулся.

Со скоростью ты уже задрал.

я не понимаю тогда чего ты ерепенишься? Ну реально, возьми сам сравни, мой вариант быстрее, да, не сильно, но быстрее, при том наглядней - так что все твоё дожевывание, игнорирование фактов расценивается как троллизм))

Про побочную генерацию сотни списков тоже ответа не услышал.

подробней. У меня в примере? Это лучше чем конкатенация строки вида s += bla-bla-bla.В общем вариант что предложил tia, только малость быстрее.

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

Могу и поучиться, было бы чему. Хотя вот здесь, кажется, я и сам кое-чему поучил тебя ;-) Поверишь на слово, что это я, молодец, нет — ну и ладно.

Ой, было бы чему, какой пафос)) Хотя бы разницу в приведениях типов при сравнении xD

P.S. Да без проблем, я не умко и не пытаюсь самоутвердиться) Кому-то я помог, кто-то мне помог, это нормально :) Спасибо тебе, аноним ;) чмоки!))

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

> Что-то питон длинноват и многословен до зануности

Зато читабелен в отличие от.

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

> Абстрагируйся, я тебе сказал ... Цепляешься?)) Хорошо, больше нет аргументов значит. Да и тебе уже объяснили где ты лоханулся.

Это я вообще не тебе отвечал, а на предыдущий пост tia. Не разочаровывай меня так больше, мог бы догадаться по контексту. Где я «лоханулся», я так и не в курсе. Не принимать же в расчёт троллинг во славу своего ЧСВ того же tia. Хочешь аргументов — почитай тред. Тут прям полно стилистически выдержанного кода на разных языках, ага, все больше дурью маются, выдумывая велосипеды. И только вы двое решили, что на Python обязательно нужно даже мифический факториал писать так, будто его завтра вставлять в рабочий код. Хех. Читаемость, поддерживаемость, и скорость сферического кода в вакууме.

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

Ещё раз: нафиг тебе здесь скорость? Какой общий случай? Есть конкретное задание - пустяковая задача - и под него конкретное решение. И у тебя, и меня, и у остальных. Не стану я скорость мерять, я и так верю. Для меня это не аргумент. Не вообще, а именно в данном случае.

Про побочную генерацию сотни списков тоже ответа не услышал.

подробней. У меня в примере? Это лучше чем конкатенация строки...

Ну, давай, обобщим. Увеличим число итераций до 1-го млн-а. Будешь создавать миллион списков. Это сильно Ъ, да. Зато быстрее.

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

>Ну, давай, обобщим. Увеличим число итераций до 1-го млн-а

отвечу твоим же сообщением:

Есть конкретное задание - пустяковая задача - и под него конкретное решение.

:) Наше конкретное решение работает быстрее, понятней выглядит. Всё! Успокоимся и не будем выдумывать сферические циклы, итерации, и увеличивать сложность. Надо будет увеличить число итераций до 1 миллиона или пусть даже 10 миллиардов - твой вариант тоже не айс, т.к. медленно все равно для такого объемного вычисления :)

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

Не разочаровывай меня так больше,

обещаю, белка-сан анонимус кун ;)

chinarulezzz ★★
()
#include<stdio.h>

int main()
{
	int i, j;
	
	for(i = 1; i <= 100; i++)
	{
		if (i%3 == 0) { printf("Fizz"); j = 1;}
		if (i%5 == 0) { printf("Buzz"); j = 1;}
		if (j != 1) printf("%d", i);
		j = 0;
		putchar(' ');
	}
}

3 минуты

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

я тут чего подумал. в printf при выводе десятичных чисел будет деление на 10, наверно можно вместо i сделать два счетчика от 0 до 9 и выводить их значения putchar'ом. только с сотней придется что-то делать

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

> только с сотней придется что-то делать

для этого задания не придётся: 100 делится на 5.

int main() {
        const char *f = "\0\0Fizz", *b = "\0\0\0\0Buzz", *x = "0123456789", *y = x + 1;
        for (int n = 100; n--; *f++&&(f-=3), *b++&&(b-=5), *y++||(y-=10,++x))
                printf("%c%2$c%3$s%4$s\n"+(*f|*b?6:*x<'1'?2:0), *x, *y, f, b);
}

конечно, производительности ради можно (и нужно) использовать putchar+puts или (f)write...

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

Не нужно оптимизировать то что не нужно оптимизировать.

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