diff --git a/parse_ranges/parse_ranges.py b/parse_ranges/parse_ranges.py index 38661ef..53ddbd0 100644 --- a/parse_ranges/parse_ranges.py +++ b/parse_ranges/parse_ranges.py @@ -28,4 +28,30 @@ def parse_ranges_v3(range_string): yield number -parse_ranges = parse_ranges_v3 +def parse_ranges_v4(range_string): + """My take at Bonus3.""" + # We prepare the data + range_string = range_string.replace("->", "-") + + # We extract integer tuples from the data + ranges = [] + for subrange in range_string.split(","): + splited = subrange.split("-") + try: + item = tuple(map(int, splited)) + except ValueError: + # This item shall then contains text in the 2nd part + item = (int(splited[0]),) + ranges.append(item) + + # We procede as before + for limits in ranges: + if len(limits) == 1: + yield limits[0] + else: + start, stop = limits + for number in range(start, stop + 1): + yield number + + +parse_ranges = parse_ranges_v4 diff --git a/parse_ranges/test_parse_ranges.py b/parse_ranges/test_parse_ranges.py index 96b65fc..9e1a027 100644 --- a/parse_ranges/test_parse_ranges.py +++ b/parse_ranges/test_parse_ranges.py @@ -29,7 +29,6 @@ class ParseRangesTests(unittest.TestCase): list(parse_ranges("0,4-8,20,43-45")), [0, 4, 5, 6, 7, 8, 20, 43, 44, 45] ) - @unittest.expectedFailure def test_ignore_arrows(self): self.assertEqual( list(parse_ranges("0, 4-8, 20->exit, 43-45")),