Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с задачей на программирование пожалуйста

Мария Миркина Ученик (95), на голосовании 1 день назад
Следить за чем-то бывает не так просто, а когда следить нужно сразу за многими вещами – здесь справится не каждый. Но можно доверить эту задачу роботам.
На Белоптичкинской птицефабрике проводится работа по технологизации слежки за подрастающими цыплятами. Руководство фабрики обратилось за помощью к местному кружку робототехников, и они собрали «робо-маму». Она круглосуточно отслеживает и различает цыплят с помощью ИИ и машинного зрения. Не хватало лишь одной немаловажной части – «подружить» робота с системой управления птицефабрикой, написанной на языке 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), в каждой из которых приведена отдельная команда.
Формат выходных данных: такое же число строк, в каждой из которых приводится ответ на соответствующую команду.
Голосование за лучший ответ
Рустам Абдрашитов Мыслитель (9532) 1 месяц назад
На
 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()
Sergio 2.1 Оракул (67615) 1 месяц назад
 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
Похожие вопросы