import sys
import re
def main():
chicks, watching = set(), set()
valid_name = re.compile(r'^[A-Z0-9]+$')
for line in sys.stdin:
line = line.strip()
if not line or ' ' not in line:
print("ERROR SYNTAX")
continue
command, name = line.split(maxsplit=1)
if not valid_name.match(name):
print("ERROR NAME")
continue
if command == "REMEMBER":
print("OK" if name not in chicks and not chicks.add(name) else "ERROR EXIST")
elif command == "FORGET":
print("OK" if name in chicks and not (chicks.remove(name), watching.discard(name)) else "ERROR MISSING")
elif command == "WATCH":
print("OK" if name in chicks and not watching.add(name) else "ERROR MISSING")
elif command == "UNWATCH":
print("OK" if name in chicks and not watching.discard(name) else "ERROR MISSING")
elif command == "LIST":
if name == "ALL":
print(", ".join(sorted(chicks)))
elif name == "WATCH":
print(", ".join(sorted(watching)))
else:
print("ERROR SYNTAX")
else:
print("ERROR SYNTAX")
if __name__ == "__main__":
main()
def is_valid_name(name):
return name.isalnum() and name.isupper()
def process_command(command):
parts = command.split()
if not parts:
return "ERROR SYNTAX"
cmd = parts[0]
if cmd in ["REMEMBER", "FORGET", "WATCH", "UNWATCH"]:
if len(parts) != 2:
return "ERROR SYNTAX"
name = parts[1]
if not is_valid_name(name):
return "ERROR NAME"
if cmd == "REMEMBER":
if name in all_chicks:
return "ERROR EXIST"
all_chicks.add(name)
return "OK"
elif cmd == "FORGET":
if name not in all_chicks:
return "ERROR MISSING"
all_chicks.remove(name)
watched_chicks.discard(name)
return "OK"
elif cmd == "WATCH":
if name not in all_chicks:
return "ERROR MISSING"
watched_chicks.add(name)
return "OK"
elif cmd == "UNWATCH":
if name not in all_chicks:
return "ERROR MISSING"
watched_chicks.discard(name)
return "OK"
elif cmd == "LIST":
if len(parts) != 2:
return "ERROR SYNTAX"
type_ = parts[1]
if type_ == "ALL":
result = sorted(all_chicks)
elif type_ == "WATCH":
result = sorted(watched_chicks)
else:
return "ERROR SYNTAX"
return ", ".join(result) if result else ""
return "ERROR SYNTAX"
all_chicks = set()
watched_chicks = set()
while True:
try:
command = input()
print(process_command(command))
except EOFError:
break
На Белоптичкинской птицефабрике проводится работа по технологизации слежки за подрастающими цыплятами. Руководство фабрики обратилось за помощью к местному кружку робототехников, и они собрали «робо-маму». Она круглосуточно отслеживает и различает цыплят с помощью ИИ и машинного зрения. Не хватало лишь одной немаловажной части – «подружить» робота с системой управления птицефабрикой, написанной на языке COBOL задолго до основания кружка.
Напишите программу-драйвер для «робо–мамы», реализующую логику приёма и ответа согласно заданного протокола. Система управления отправляет в драйвер одну из следующих команд:
REMEMBER name – добавить в память цыплёнка с заданным именем. Если такой цыплёнок уже добавлен, ответить ERROR EXIST, иначе OK.
FORGET name – удалить цыплёнка с заданным именем из памяти. Если такой цыплёнок уже удалён, ответить ERROR MISSING, иначе OK.
WATCH name – начать следить за цыплёнком с заданным именем. Если такой цыплёнок не существует, ответить ERROR MISSING, иначе OK, даже если слежение за цыплёнком уже ведётся.
UNWATCH name – перестать следить за цыплёнком с заданным именем. Если такой цыплёнок не существует, ответить ERROR MISSING, иначе OK, даже если слежение за цыплёнком не ведётся.
LIST type – перечислить цыплят в алфавитном порядке через запятую с пробелом. Например: 123, CHEEPY3, TAPI. Параметр type задаёт необходимый список: ALL – вывести всех цыплят в памяти, WATCH – всех, за которыми идёт слежка.
Имя цыплёнка (name) всегда представляет собой последовательность заглавных латинских букв и цифр. При попытке назвать цыплёнка иначе нужно отвечать ERROR NAME в любой команде. Если переданная команда не соответствует протоколу, следует отвечать ERROR SYNTAX.
Формат входных данных: последовательность строк (до
Unexpected text node: '
'
200), в каждой из которых приведена отдельная команда.
Формат выходных данных: такое же число строк, в каждой из которых приводится ответ на соответствующую команду.