Source code for kyu_5.alphabet_wars_nuclear_strike.alphabet_war

#  Created by Egor Kostan.
#  GitHub: https://github.com/ikostan
#  LinkedIn: https://www.linkedin.com/in/egor-kostan/


[docs]def alphabet_war(battlefield: str) -> str: """ A function that accepts battlefield string and returns letters that survived the nuclear strike. :param battlefield: :return: """ if '#' not in battlefield: return ''.join(char for char in battlefield if char.isalpha()) else: result = clean_unsheltered(battlefield) result = clean_battlefield(result) return result
[docs]def clean_unsheltered(battlefield: str) -> str: """ Clean letters outside the shelter :param battlefield: :return: """ result = '' temp = battlefield.split('[') for char in temp: if char.count(']') == 0: c = ''.join(k for k in char if not k.isalpha()) result += c elif len(char) == char.count('#'): result += char else: sharp = char.count('#') char = char[0:char.index(']') + 1] result += '[' + char + ('#' * sharp) return result
[docs]def clean_battlefield(battlefield: str) -> str: """ Clean the battlefield and return only survived letters :param battlefield: :return: """ result = battlefield.split('[') result = [string for string in result if string != ''] result = list(reversed(result)) temp = list() while result: for i, r in enumerate(result): if r.count('#') <= 1: if i + 1 < len(result) and (r.count('#') == 0 and result[i + 1].count('#') < 2): temp.append(''.join(char for char in r if char .isalpha())) del result[i] break elif i + 1 < len(result) and (r.count('#') == 1 and result[i + 1].count('#') == 0): temp.append(''.join(char for char in r if char .isalpha())) del result[i] break elif i + 1 < len(result): del result[i] break else: temp.append(''.join(char for char in r if char .isalpha())) del result[i] break del result[i] break answer = ''.join(char for char in reversed(temp)) return answer