Порядок вычисления присваиваний

Задача по программированию с проверкой онлайн

Сложность
Средняя
Языки
Python
JavaScript
TypeScript
Java
Go
Темы
Деревья и графы
Разбор и проверка данных

Дан неупорядоченный список присваиваний вида x=f(a,b): имя переменной, знак = и вызов функции с нулём или более аргументов-переменных через запятую, без пробелов (g() — вызов без аргументов). Все имена состоят из строчных латинских букв, имя переменной не совпадает с именем функции, и одна переменная присваивается не более одного раза. В аргументах переменные могут повторяться.

Присваивания выполняются по одному в выбранном вами порядке. Присваивание корректно, если каждая переменная-аргумент уже была присвоена раньше (вызов без аргументов корректен всегда). Верните true, если существует порядок, при котором корректны все присваивания, и false иначе. Переменная, которая используется как аргумент, но нигде не присваивается, делает ответ false; присваивание, зависящее от самого себя, тоже.

Ограничения: до 1000 присваиваний, до 10 аргументов в вызове, имена до 20 букв.

Пример: ["a=f(b,c)", "b=g()", "c=h()"] → true (порядок b, c, a); ["a=f(b)", "b=f(a)"] → false.


Источник: Coding Competitions Archive, kickstart/2016/round_c/evaluation · © Google LLC · Apache-2.0 · условие переведено и дополнено

Решить онлайнБесплатно и без регистрации: пишете код в браузере и проверяете его тестами (без аккаунта — несколько задач в день).

Ещё задачи

Все задачи для тренировки