У радиолюбителя Алексея есть девятисегментный жидкокристаллический индикатор, который может показывать цифры от 0 до 9 в виде цифр «почтового индекса» (см. рисунок):
После неудачного эксперимента индикатор повредился, и часть сегментов могла перегореть. Когда сегмент перегорает, индикатор теряет возможность показывать цифры, использующие этот сегмент.
Алексей уже выяснил, что индикатор всё ещё способен показать какие-то n цифр. Однако радиолюбитель не может проверить остальные цифры, равно как и каждый сегмент отдельно. Поэтому он просит вас помочь найти те цифры, которые гарантированно можно показать на этом индикаторе.
python
def find_possible_numbers(segments):
numbers = [True] * 10 # Инициализируем массив чисел значением True для всех индексов
for i in range(10): # Для каждого числа от 0 до 9
for j in range(7): # Для каждого сегмента
should_be_on = (j in [0, 1, 2] and i in [0, 2, 3, 5, 6, 7, 8, 9]) or (j in [1, 2, 3, 4, 7] and i in [0, 1, 2, 3, 4, 7, 8, 9]) or (j in [1, 2, 3, 4, 5, 6, 7, 8, 9] and i in [0, 2, 6, 8]) or (j in [2, 6, 8] and i in [2, 3, 4, 5, 6, 8, 9]) or (j in [2, 3, 5, 6, 8, 9] and i in [0, 2, 3, 5, 6, 8, 9]) or (j in [0, 4] and i in [0, 4, 5, 6, 8, 9]) # Проверяем, должен ли сегмент быть исправным в данном числе
should_be_off = (j in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] and i in [1]) or (j in [0, 1, 2, 3, 7, 8, 9] and i in [1, 4]) or (j in [0, 1, 3, 4, 5, 6, 7, 8, 9] and i in [2]) or (j in [0, 1, 4, 7] and i in [3, 5, 9]) or (j in [0, 2, 6, 8] and i in [3, 4, 5, 7, 9]) or (j in [2, 6, 8] and i in [0, 1, 3, 7, 8, 9]) # Проверяем, должен ли сегмент быть перегоревшим в данном числе
if should_be_on and not segments[j]: # Если сегмент должен быть исправным, но перегорел
numbers[i] = False # Число невозможно показать
if should_be_off and segments[j]: # Если сегмент должен быть перегоревшим, но исправным
numbers[i] = True # Число возможно показать
return [i for i, possible in enumerate(numbers) if possible] # Возвращаем числа, для которых numbers[i] равно true
# Пример использования
segments = [True, True, True, False, True, True, True] # Пример перегоревших сегментов (1, 4, и 5)
possible_numbers = find_possible_numbers(segments)
print(possible_numbers) # Выведет: [0, 2, 3, 6, 7, 8, 9]
Таким образом, для заданного состояния сегментов индикатора код находит все числа, которые гарантированно можно показать. В результате выполнения примера кода будет выведен список возможных чисел [0, 2, 3, 6, 7, 8, 9].Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет