- Fixed "green-only" tests
- Increase signal/noise ratio by removing fluff
- Minor tweaks & formatting for readability
def is_prime(n: int): return n > 1 and all(n % f for f in range(2, int(n ** 0.5) + 1)) def fizz(n: int): return n % 3 == 0 def buzz(n: int): return n % 5 == 0 def fizzbuzz(n: int): return fizz(n) and buzz(n) def fizzbuzz_prime(n: int): return ( 'Prime' if is_prime(n) else 'FizzBuzz' if fizzbuzz(n) else 'Fizz' if fizz(n) else 'Buzz' if buzz(n) else n ) CodeWarKata776 = fizzbuzz_prime
class IsPrimeNumber:"""Returns True if n is a prime number, False otherwise"""- def is_prime(n: int):
- return n > 1 and all(n % f for f in range(2, int(n ** 0.5) + 1))
def __init__(self, n):self.n = ndef calculate(self):if self.n > 1:for i in range(2, int(self.n ** 0.5) + 1):if self.n % i == 0:return Falsereturn True # If no divisors found, it's primeelse:return False- def fizz(n: int):
- return n % 3 == 0
class Fizz:"""Returns True if n is divisible by 3, False otherwise"""- def buzz(n: int):
- return n % 5 == 0
def __init__(self, n):self.n = ndef calculate(self):return self.n % 3 == 0- def fizzbuzz(n: int):
- return fizz(n) and buzz(n)
class Buzz:"""Returns True if n is divisible by 5, False otherwise"""- def fizzbuzz_prime(n: int):
- return (
- 'Prime' if is_prime(n) else
- 'FizzBuzz' if fizzbuzz(n) else
- 'Fizz' if fizz(n) else
- 'Buzz' if buzz(n) else
- n
- )
def __init__(self, n):self.n = ndef calculate(self):return self.n % 5 == 0class FizzBuzz:"""Returns True if n is divisible by 3 and 5, False otherwise"""def __init__(self, n):self.n = ndef calculate(self):return Fizz(self.n).calculate() and Buzz(self.n).calculate()class CodeWarKata776:"""Executes the Fizz, Bizz, FizzBuzz Prime sequence."""def __init__(self, n):self.n = ndef calculate_prime(self):return IsPrimeNumber(self.n).calculate()def calculate_fizz(self):return Fizz(self.n).calculate()def calculate_buzz(self):return Buzz(self.n).calculate()def calculate_fizzbuzz(self):return FizzBuzz(self.n).calculate()def execute(self):if IsPrimeNumber(self.n).calculate():return 'Prime'if FizzBuzz(self.n).calculate():return 'FizzBuzz'elif Fizz(self.n).calculate():return 'Fizz'elif Buzz(self.n).calculate():return 'Buzz'else:return self.n- CodeWarKata776 = fizzbuzz_prime
import codewars_test as test from solution import CodeWarKata776, is_prime, fizz, buzz, fizzbuzz @test.describe("Test CodeWarKata776") def test_group(): @test.it("test 1: Test is_prime()") def test_case(): prime_numbers = [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, ] for n in range(prime_numbers[-1] + 1): test.assert_equals(is_prime(n), n in prime_numbers) @test.it("test 2: Test fizz()") def test_case(): fizz_numbers = range(3, 100, 3) for n in range(1, fizz_numbers.stop): test.assert_equals(fizz(n), n in fizz_numbers) @test.it("test 3: Test buzz()") def test_case(): buzz_numbers = range(5, 101, 5) for n in range(1, buzz_numbers.stop): test.assert_equals(buzz(n), n in buzz_numbers) @test.it("test 4: Test fizzbuzz()") def test_case(): fizz_buzz_numbers = range(15, 100, 15) for n in range(1, fizz_buzz_numbers.stop): test.assert_equals(fizzbuzz(n), n in fizz_buzz_numbers) @test.it("test 5: Test execute()") def test_case(): sample_list = [ 1, 'Prime', 'Prime', 4, 'Prime', 'Fizz', 'Prime', 8, 'Fizz', 'Buzz', 'Prime', 'Fizz', 'Prime', 14, 'FizzBuzz', 16, 'Prime', 'Fizz', 'Prime', 'Buzz', 'Fizz', 22, 'Prime', 'Fizz', 'Buzz', 26, 'Fizz', 28, 'Prime', 'FizzBuzz', 'Prime', 32, 'Fizz', 34, 'Buzz', 'Fizz', 'Prime', 38, 'Fizz', 'Buzz', 'Prime', 'Fizz', 'Prime', 44, 'FizzBuzz', 46, 'Prime', 'Fizz', 49, 'Buzz', 'Fizz', 52, 'Prime', 'Fizz', 'Buzz', 56, 'Fizz', 58, 'Prime', 'FizzBuzz', 'Prime', 62, 'Fizz', 64, 'Buzz', 'Fizz', 'Prime', 68, 'Fizz', 'Buzz', 'Prime', 'Fizz', 'Prime', 74, 'FizzBuzz', 76, 77, 'Fizz', 'Prime', 'Buzz', 'Fizz', 82, 'Prime', 'Fizz', 'Buzz', 86, 'Fizz', 88, 'Prime', 'FizzBuzz', 91, 92, 'Fizz', 94, 'Buzz', 'Fizz', 'Prime', 98, 'Fizz', 'Buzz', ] for n, expectd in enumerate(sample_list, start=1): test.assert_equals(CodeWarKata776(n), expectd)
- import codewars_test as test
from solution import CodeWarKata776- from solution import CodeWarKata776, is_prime, fizz, buzz, fizzbuzz
- @test.describe("Test CodeWarKata776")
def test_group():@test.it("test 1: Test calculate_prime()")- def test_group():
- @test.it("test 1: Test is_prime()")
- def test_case():
prime_numbers = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]for n in prime_numbers:test.assert_equals(CodeWarKata776(n).calculate_prime(), True)@test.it("test 2: Test calculate_fizz()")- prime_numbers = [
- 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41,
- 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97,
- ]
- for n in range(prime_numbers[-1] + 1):
- test.assert_equals(is_prime(n), n in prime_numbers)
- @test.it("test 2: Test fizz()")
- def test_case():
fizz_numbers = [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81,84, 87, 87, 90, 93, 96, 99]for n in fizz_numbers:test.assert_equals(CodeWarKata776(n).calculate_fizz(), True)@test.it("test 3: Test calculate_buzz()")- fizz_numbers = range(3, 100, 3)
- for n in range(1, fizz_numbers.stop):
- test.assert_equals(fizz(n), n in fizz_numbers)
- @test.it("test 3: Test buzz()")
- def test_case():
buzz_numbers = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]for n in buzz_numbers:test.assert_equals(CodeWarKata776(n).calculate_buzz(), True)- buzz_numbers = range(5, 101, 5)
- for n in range(1, buzz_numbers.stop):
- test.assert_equals(buzz(n), n in buzz_numbers)
@test.it("test 4: Test calculate_fizzbuzz()")- @test.it("test 4: Test fizzbuzz()")
- def test_case():
fizz_buzz_numbers = [15, 30, 45, 60, 75, 90]for n in fizz_buzz_numbers:test.assert_equals(CodeWarKata776(n).calculate_fizzbuzz(), True)- fizz_buzz_numbers = range(15, 100, 15)
- for n in range(1, fizz_buzz_numbers.stop):
- test.assert_equals(fizzbuzz(n), n in fizz_buzz_numbers)
- @test.it("test 5: Test execute()")
def test_case():sample_list = [1, 'Prime', 'Prime', 4, 'Prime', 'Fizz', 'Prime', 8, 'Fizz', 'Buzz', 'Prime', 'Fizz', 'Prime', 14, 'FizzBuzz', 16,'Prime', 'Fizz', 'Prime', 'Buzz', 'Fizz', 22, 'Prime', 'Fizz', 'Buzz', 26, 'Fizz', 28, 'Prime', 'FizzBuzz','Prime', 32, 'Fizz', 34, 'Buzz', 'Fizz', 'Prime', 38, 'Fizz', 'Buzz', 'Prime', 'Fizz', 'Prime', 44, 'FizzBuzz', 46,'Prime', 'Fizz', 49, 'Buzz', 'Fizz', 52, 'Prime', 'Fizz', 'Buzz', 56, 'Fizz', 58, 'Prime', 'FizzBuzz', 'Prime', 62,'Fizz', 64, 'Buzz', 'Fizz', 'Prime', 68, 'Fizz', 'Buzz', 'Prime', 'Fizz', 'Prime', 74, 'FizzBuzz', 76, 77, 'Fizz','Prime', 'Buzz', 'Fizz', 82, 'Prime', 'Fizz', 'Buzz', 86, 'Fizz', 88, 'Prime', 'FizzBuzz', 91, 92, 'Fizz', 94,'Buzz', 'Fizz', 'Prime', 98, 'Fizz', 'Buzz']for sample, expectd in zip(range(1,101), sample_list):test.assert_equals(CodeWarKata776(sample).execute(), expectd)- def test_case():
- sample_list = [
- 1, 'Prime', 'Prime', 4, 'Prime', 'Fizz', 'Prime', 8, 'Fizz',
- 'Buzz', 'Prime', 'Fizz', 'Prime', 14, 'FizzBuzz', 16, 'Prime',
- 'Fizz', 'Prime', 'Buzz', 'Fizz', 22, 'Prime', 'Fizz', 'Buzz',
- 26, 'Fizz', 28, 'Prime', 'FizzBuzz', 'Prime', 32, 'Fizz', 34,
- 'Buzz', 'Fizz', 'Prime', 38, 'Fizz', 'Buzz', 'Prime', 'Fizz',
- 'Prime', 44, 'FizzBuzz', 46, 'Prime', 'Fizz', 49, 'Buzz',
- 'Fizz', 52, 'Prime', 'Fizz', 'Buzz', 56, 'Fizz', 58, 'Prime',
- 'FizzBuzz', 'Prime', 62, 'Fizz', 64, 'Buzz', 'Fizz', 'Prime',
- 68, 'Fizz', 'Buzz', 'Prime', 'Fizz', 'Prime', 74, 'FizzBuzz',
- 76, 77, 'Fizz', 'Prime', 'Buzz', 'Fizz', 82, 'Prime', 'Fizz',
- 'Buzz', 86, 'Fizz', 88, 'Prime', 'FizzBuzz', 91, 92, 'Fizz',
- 94, 'Buzz', 'Fizz', 'Prime', 98, 'Fizz', 'Buzz',
- ]
- for n, expectd in enumerate(sample_list, start=1):
- test.assert_equals(CodeWarKata776(n), expectd)
Original seems to do unnecessary computation before ultimately returning True