Source code for kyu_4.range_extraction.solution

"""
Solution for -> Range Extraction.

Created by Egor Kostan.
GitHub: https://github.com/ikostan
"""


[docs] def solution(args: list) -> str: """ Solution for Range Extraction problem. Tt takes a list of integers in increasing order and returns a correctly formatted string in the range format. :param args: list :return: str """ current: list = [args[0], args[0], False] result: str = '' for i, a in enumerate(args): # case 1 if current[1] == a: continue # case 2 result = case_2(a=a, i=i, current=current, result=result) # case 3 if i == len(args) - 1 and not current[2]: result = case_3(a=a, current=current, result=result) # case 4 if i == len(args) - 1 and current[-1] != a and current[2]: result += str(a) return result
[docs] def case_3(a: int, current: list, result: str) -> str: """ Case #3. :param a: int :param current: list :param result: str :return: str """ if current[1] + 1 == a: current[1] = a result += str(current[0]) if abs(current[1] - current[0]) >= 2: result += f'-{str(current[1])}' elif current[0] != current[1]: result += f',{str(current[1])}' return result
[docs] def case_2(**kwargs) -> str: """ Case #2. :return: str """ a: int = kwargs['a'] i: int = kwargs['i'] current: list = kwargs['current'] result: str = kwargs['result'] if a == current[1] + 1: current[1] = a current[2] = False else: current[2] = True if abs(current[1] - current[0]) >= 2 and i != 1: result += f'{str(current[0])}-{str(current[1])},' else: result += f'{str(current[0])},' if current[0] != current[1]: result += f'{str(current[1])},' current[0] = a current[1] = a return result