Рубрики
Без рубрики

Проблема Fizzguzz.

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

Вокруг пространства есть очень популярная проблема, известная как проблема Fizzbuzz. В этой проблеме мы должны сделать, это мы должны обратно через 1 до n. и везде, где мы сталкиваемся с целым числом, делимым на 3, нам нужно распечатать Fizz С И всякий раз, когда мы сталкиваемся с целым числом, делимым на 5, нам нужно распечатать Buzz & и и «Fizzbuzz», если целое число делится как на 3 и 5. Fizzbuzz – очень простая задача программирования, используемая в собеседователях разработчиков программного обеспечения, чтобы определить, может ли кандидат работы на самом деле записать код. Он был изобретен Имранском горе и популяризирован Джеффом Этвудом.

Так что делает это хорошей проблемой …

То есть если программист пишет

def FizzBuzz():
    for i in range(1, 100):
        if i == 0:
            continue
        elif i % 15 == 0:
            print('FizzBuzz')
        elif i % 5 == 0:
            print('Buzz')
        elif i % 3 == 0:
            print('Fizz')
        else:
            print(i)

Это делает работу печати решения. Но вот поймать …

Оператор Modulo (%) является тяжелым оператором и работает по-другому. Если мы говорим Я% 15 Означает его как I% 5 && I% 3 Отказ Следовательно, если мы выступаем Я% 15 В программе Fizzbuzz мы выполняем I% 5 операция дважды.

Итак, чтобы иметь дело с этим некоторые программисты подходят к этой проблеме по-другому.

Их подход

def FizzBuzz():
    f = False
    d = ""
    for i in range(1, 10000):
        if i % 3 == 0:
            d += 'Fizz'
            f = True
        if i % 5 == 0:
            d += 'Buzz'
            f = True
        if f != True:
            print(i)
        else:
            print(d)
            d = ""
            f = False

Здесь они только проверяют Я% 3 & I% 5 только один раз и добавьте строку «Fizz» и «Buzz» в пустую строку. И в конце он просто печатает номер или конечную строку.

Этот подход снижает время обработки, но он увеличивает потребление памяти.

Последний подход, который редко …

def FizzBuzz():
    c3 = 0
    c5 = 0
    d = ""
    b = False
    for num in range(1, 10000):
        c3 += 1
        c5 += 1
        if c3 == 3:
            d += "fizz"
            c3 = 0
            b = True
        if c5 == 5:
            d += "buzz"
            c5 = 0
            b = True
        if b == True:
            print(d)
            d = ""
            b = False
        else:
            print(num)

Вот в этом подходе нет (%) операторов модульных операторов. Следовательно, это уменьшает время обработки кода.

Тестирование

Чтобы проверить эту теорию, я внедрил функцию времени Pythons, и к моему удивлению. Между первым и последним кодом была неопределенная разница во времени.

Результаты времени следующие …

На 100 записей

  1. Первая версия 0,0005862250000000027.
  2. Вторая версия 0,00024850499999961
  3. Третья версия 0.001852885999999998

Для 10000 записей

  1. Первая версия 0.117162348.
  2. Вторая версия 0.188121156.
  3. Третья версия 0.401831502.

Если вы застряли где угодно, оставьте комментарий. Следуй за мной в Twitter в Twitter/Pranjaljain0 Следуй за мной на Github в github/pranjaljain0.

Перейти к этому цику для полного кода

Счастливый взлом!

Оригинал: “https://dev.to/pranjaljain0/the-fizzbuzz-problem-5ih”