From 5b21ebe458db079dde07c4ce34e411acd15be160 Mon Sep 17 00:00:00 2001 From: didier amyot Date: Wed, 20 Dec 2023 15:31:36 -0500 Subject: [PATCH] dd --- tdd/bowling.py | 70 ++++++++++++++++++++++++++++++++++++++++++++ tdd/bowling_test.py | 4 +-- tdd/fizzbuzz.py | 8 +++++ tdd/fizzbuzz_test.py | 13 ++++++++ 4 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 tdd/fizzbuzz.py create mode 100644 tdd/fizzbuzz_test.py diff --git a/tdd/bowling.py b/tdd/bowling.py index 60c645d..8b946f1 100644 --- a/tdd/bowling.py +++ b/tdd/bowling.py @@ -45,3 +45,73 @@ class BowlingGame: def score(self): return sum([case.score() for case in self._score]) + + +class BowlingGame2: + def __init__(self): + self.case = Case() + + def last_case(self): + case = self.case + while case.next is not None: + case = case.next + return case + + def add_case(self): + self.last_case().set_next(Case()) + + def throw(self, pins): + if self.last_case().is_completed(): + self.add_case() + self.last_case().throw(pins) + + def score(self): + ret = 0 + case = self.case + while case is not None: + ret += case.score() + case = case.next + return ret; + + +class Case: + def __init__(self): + self.next = None + self.first_throw = None + self.second_throw = None + + def throw(self, pin): + if self.first_throw is None: + self.first_throw = pin + else: + self.second_throw = pin + + def set_next(self, case): + self.next = case + + def extra_score(self): + if self.next is None: + return 0 + if self.is_spare(): + return self.next.first_throw or 0 + return 0 + + def is_completed(self): + if self.first_throw == 10: + return True + return (self.first_throw is not None + and self.second_throw is not None) + + def is_spare(self): + return self.raw_score() == 10 and not self.is_strike() + + def is_strike(self): + return self.raw_score() == 10 + + def raw_score(self): + return ((self.first_throw or 0) + + (self.first_throw or 0)) + + def score(self): + return self.raw_score() + self.extra_score() + diff --git a/tdd/bowling_test.py b/tdd/bowling_test.py index a7d8f9b..f3903d9 100644 --- a/tdd/bowling_test.py +++ b/tdd/bowling_test.py @@ -1,4 +1,4 @@ -from tdd.bowling import BowlingGame +from tdd.bowling import BowlingGame, BowlingGame2 def test_new_game(): @@ -6,7 +6,7 @@ def test_new_game(): def test_new_game_trivial(): - bowling_game = BowlingGame() + bowling_game = BowlingGame2() bowling_game.throw(5) assert bowling_game.score() == 5 diff --git a/tdd/fizzbuzz.py b/tdd/fizzbuzz.py new file mode 100644 index 0000000..d61a3d0 --- /dev/null +++ b/tdd/fizzbuzz.py @@ -0,0 +1,8 @@ +def fizz_buzz(): + ret = [] + for i in range(1, 101): + if i % 3 == 0: + ret.append("Fizz") + else: + ret.append(i) + return ret diff --git a/tdd/fizzbuzz_test.py b/tdd/fizzbuzz_test.py new file mode 100644 index 0000000..8cef919 --- /dev/null +++ b/tdd/fizzbuzz_test.py @@ -0,0 +1,13 @@ +from tdd.fizzbuzz import fizz_buzz + + +def test_fizz_buzz(): + assert len(fizz_buzz()) == 100 + + +def test_fizz_buzz_1(): + assert fizz_buzz()[0] == 1 + + +def test_fizz_buzz_2(): + assert fizz_buzz()[2] == "Fizz"