Код 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
  1. MRO(C) = [C] + merge(MRO(P1), ..., MRO(Pn), [P1..Pn]).
  2. Голова подходит, если её нет в хвостах остальных списков.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.

Термины по теме