Написать программу декодирования телефонного номера для АОН.
По запросу АОНа АТС посылает телефонный номер, используя следующие правила:
— Если цифра повторяется менее 2 раз, то это помеха и она должна быть отброшена
— Каждая значащая цифра повторяется минимум 2 раза
— Если в номере идут несколько цифр подряд, то для обозначения «такая же цифра как предыдущая» используется идущий 2 или более подряд раз знак #
def aon(s): # Remove single digits s = ''.join(map(lambda x: x[1] if x[0] == x[1] else '', zip(s[1:], s))) # Remove repetitions s = reduce(lambda x, y: x + y if x[-1] != y else x, s) # Decode '#' s = reduce(lambda x, y: x + x[-1] if y == '#' else x + y, s) # Remove leading '#' s = s.strip('#') return s print aon("######4434###552222311333661")
мне не понятно как работают эти две строки. Кто нибудь объясните??
s = reduce(lambda x, y: x + y if x[-1] != y else x, s) s = reduce(lambda x, y: x + x[-1] if y == '#' else x + y, s)
апдейт: до этого код был записан просто в пост и почему то квадратные скобки с содержимым опускались. А так код рабочий.