Код Senior ООП и dataclasses обновлено
Вычислить MRO алгоритмом C3
Условие
Напишите c3(graph, cls): graph словарь «класс -> список прямых родителей в порядке объявления» (у корня пустой список). Верните MRO класса cls по алгоритму C3 списком имён. Если линеаризация невозможна, верните None.
Примеры
c3({"A":[],"B":["A"],"C":["A"],"D":["B","C"]}, "D") // ["D", "B", "C", "A"]
c3({"O":[]}, "O") // ["O"]
c3({"A":[],"B":["A"]}, "B") // ["B", "A"]
Как подойти
Подсказки: 2
- MRO(C) = [C] + merge(MRO(P1), ..., MRO(Pn), [P1..Pn]).
- Голова подходит, если её нет в хвостах остальных списков.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.