Порядок вычисления присваиваний
Задача по программированию с проверкой онлайн
- Сложность
- Средняя
- Языки
- 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 · условие переведено и дополнено