From 730596f4163ee804364cc6f61a0dd34f94c8fe90 Mon Sep 17 00:00:00 2001 From: Johan Sandoval Date: Wed, 22 Jul 2026 21:02:15 -0500 Subject: [PATCH] Finish problem 0278-first-bad-version --- problems/0278-first-bad-version/solution.py | 14 ++++++++++++++ .../0278-first-bad-version/solution_test.py | 17 +++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 problems/0278-first-bad-version/solution.py create mode 100644 problems/0278-first-bad-version/solution_test.py diff --git a/problems/0278-first-bad-version/solution.py b/problems/0278-first-bad-version/solution.py new file mode 100644 index 0000000..a63bcfb --- /dev/null +++ b/problems/0278-first-bad-version/solution.py @@ -0,0 +1,14 @@ +def isBadVersion(version: int) -> bool: + raise NotImplementedError + + +class Solution: + def firstBadVersion(self, n: int) -> int: + lo, hi = 1, n + while lo < hi: + check = (hi + lo) // 2 + if isBadVersion(check): + hi = check + else: + lo = check + 1 + return lo diff --git a/problems/0278-first-bad-version/solution_test.py b/problems/0278-first-bad-version/solution_test.py new file mode 100644 index 0000000..19a7b33 --- /dev/null +++ b/problems/0278-first-bad-version/solution_test.py @@ -0,0 +1,17 @@ +import pytest +import solution +from solution import Solution + + +@pytest.mark.parametrize( + "n,bad", + [ + (5, 4), + (1, 1), + (10, 1), + (10, 10), + ], +) +def test_first_bad_version(n, bad, monkeypatch): + monkeypatch.setattr(solution, "isBadVersion", lambda v: v >= bad) + assert Solution().firstBadVersion(n) == bad