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

Помогите прошу в задании на программирование

Мария Миркина Ученик (95), на голосовании 1 день назад
При широком развитии Интернета и мобильной связи, любительская радиосвязь до сих пор процветает и остаётся распространённым хобби. Люди с разных концов планеты с помощью собственных радиостанций связываются друг с другом, чтобы пообщаться голосом или обменяться короткими приветствиями на азбуке Морзе.
Невольно с этим хобби соприкоснулся и Алик, найдя на чердаке ламповую радиостанцию и собранную дедушкой телеграфную клавиатуру. Время пощадило технику, но не клей, на котором держались наклейки клавиш – они отпали от клавиатуры и лежали отдельно. В результате поиска и ревизии наклеек выяснилось, что клавиатура может отправлять заглавные латинские символы, цифры, пробел и некоторые знаки препинания (точка, запятая, восклицательный и вопросительный знак).
Алик решил восстановить раскладку клавиатуры. Как смог, он разложил наклейки, после чего стал набирать сообщения и смотреть, что именно отправляет клавиатура. Напишите программу, которая поможет Алику поскорее разобраться с раскладкой.
Это интерактивная задача, и это значит, что ваша программа взаимодействует с проверочной системой посредством стандартных потоков ввода и вывода. Иными словами, после отправки сообщения программа должна очистить буфер (выполнить flush) и считать ответ от системы (прочесть строку).
Итак, программа отправляет сообщение в раскладке Алика и получает в ответ от системы фактически отправленное. Например, ваша программа отправит HELLO I AM ALIK, после должна прочитать строку из потока ввода, где получит, например, URYYB V NZ NYVX. После этого можно вновь отправлять очередное сообщение. Регистр латинских символов важен.
Как только программа восстановит кодировку, она должна отправить сообщение с символом @ в начале и через пробел привести такое сообщение, чтобы на выходе получилось GA DR OM. TKS VY MUCH FR UR CALL. UR RST 599. QTH IRKUTSK. OP IS ALIK. HW?.
В случае правильного итогового ответа программа ответит @ OK, и вы должны штатно завершить программу. В ином случае, проверочная система выставляет WA. Также при наличии в любом сообщении символа не из алфавита задачи (например, строчных букв), проверка посылки завершается досрочно с вердиктом PE.
Например, программа присылает: @ TN QE BZ. GXF IL ZHPU SE HE PNYY. HE EFG 599. DGU VEXHGFX. BC VF NYVX. UJ?. Если это правильный ответ, проверочная система ответит @ OK, иначе завершит вашу программу принудительно.
Голосование за лучший ответ
Рустам Абдрашитов Мыслитель (9532) 1 месяц назад
На
 import sys 

def send(m):
print(m)
sys.stdout.flush()
return input()

a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 .,!?"
m = dict(zip(send(a), a))
m = {k: v for k, v in m.items() if k != v}

while len(m) < len(a) - 1:
u = ''.join(c for c in a if c not in m.values())
m.update(zip(send(u), u))

i = {v: k for k, v in m.items()}
f = "GA DR OM. TKS VY MUCH FR UR CALL. UR RST 599. QTH IRKUTSK. OP IS ALIK. HW?"
r = send(f"@ {''.join(i.get(c, c) for c in f)}")

sys.exit(r != "@ OK")
Мария МиркинаУченик (95) 1 месяц назад
это на питоне? или на другом языке программирования?
Рустам Абдрашитов Мыслитель (9532) Мария Миркина, на питоне вроде
Похожие вопросы