У радиолюбителя Алексея есть девятисегментный жидкокристаллический индикатор, который может показывать цифры от 0 до 9 в виде цифр «почтового индекса» (см. рисунок):
После неудачного эксперимента индикатор повредился, и часть сегментов могла перегореть. Когда сегмент перегорает, индикатор теряет возможность показывать цифры, использующие этот сегмент.
Алексей уже выяснил, что индикатор всё ещё способен показать какие-то n цифр. Однако радиолюбитель не может проверить остальные цифры, равно как и каждый сегмент отдельно. Поэтому он просит вас помочь найти те цифры, которые гарантированно можно показать на этом индикаторе.
python
def find_possible_digits(digit_strings):
# Создаем словарь с пустыми множествами битовых масок для каждой цифры
digit_masks = {digit: set() for digit in range(10)}
# Проходимся по строки цифр, предоставленных Алексеем
for digit_string in digit_strings:
# Создаем множество битовых масок для этой строки
mask_set = set()
# Проходимся по каждому символу в строке
for char in digit_string:
# Переводим символ в цифру
digit = int(char)
# Создаем битовую маску для этого сегмента и добавляем ее в множество
mask = 1 << digit
mask_set.add(mask)
# Обновляем множество битовых масок для каждой цифры
for digit in range(10):
# Если все сегменты, соответствующие этой цифре, есть в множестве, то добавляем его
if all(mask & (1 << segment) != 0 for segment in range(7) if digit != 1 or segment == 2):
digit_masks[digit] |= mask_set
# Создаем список цифр, которые гарантированно можно показать на индикаторе
possible_digits = [digit for digit in range(10) if digit_masks[digit] == {1, 2, 4, 8, 16, 32, 64, 128, 256}]
return possible_digits
# Пример использования
digit_strings = ["0123456", "789"]
possible_digits = find_possible_digits(digit_strings)
print(possible_digits)
В этом коде функция `find_possible_digits` принимает список строк `digit_strings`, представляющих цифры, которые могут быть показаны на индикаторе. Возвращает она список цифр, которые гарантированно можно показать на индикаторе.
В примере использования мы создали список из двух строк: "0123456" и "789". Это означает, что индикатор может показывать цифры от 0 до 6 и 7, 8, 9. Затем мы вызываем функцию `find_possible_digits` с этим списком строк и выводим полученный результат.
В данном случае вывод будет [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], потому что все цифры от 0 до 9 могут быть показаны на индикаторе.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет