题目欢迎来到编程世界。你的任务是在列表中找到两个整数使它们的和等于目标值并将它们的数组索引和值作为一个元组返回。提示(索引1,索引2,数字1,数字2)请使用NC连接连接测试脚本连接测试# 导入必要的模块socket用于网络通信re用于正则表达式匹配time用于延时importsocket,re,time# 创建TCP套接字ssocket.socket()# 设置套接字超时时间为60秒s.settimeout(60)# 连接到CTF挑战服务器地址为challenge.qsnctf.com端口为32885s.connect((challenge.qsnctf.com,32885))# 循环100轮每轮解决一个两数之和问题forrinrange(1,101):# 初始化接收数据的缓冲区d# 持续接收服务器数据直到找到或Input format标识表示数据接收完整whilenotindandInput formatnotind:# 每次接收最多4096字节并解码为字符串ds.recv(4096).decode()# 短暂延时0.01秒避免CPU占用过高time.sleep(0.01)# 打印当前轮次信息print(fRound{r})# 打印服务器返回的数据print(d)# 检查是否包含flag或QSNCTF标识如果有则打印并退出循环ifflagind.lower()orQSNCTFind:print(FLAG:,d)break# 使用正则表达式提取列表数据m1re.search(rList \[(.*?)\],d)# 使用正则表达式提取目标和m2re.search(rTarget (\d),d)# 如果提取失败则退出循环ifnotm1ornotm2:break# 将提取的列表字符串转换为Python列表lsteval([m1.group(1)])# 将提取的目标和转换为整数tgtint(m2.group(1))# 标记是否找到解fFalse# 双重循环遍历列表寻找两数之和等于目标值的索引对foriinrange(len(lst)):forjinrange(i1,len(lst)):# 检查两数之和是否等于目标值iflst[i]lst[j]tgt:# 格式化答案字符串(索引1,索引2,数值1,数值2)ansf({i},{j},{lst[i]},{lst[j]})# 打印答案print(Ans:,ans)# 发送答案到服务器需要编码为字节并添加换行符s.send(ans.encode()b\n)# 标记已找到解fTrue# 跳出内层循环break# 如果已找到解跳出外层循环iff:break# 如果未找到解退出循环ifnotf:break# 等待并接收最终响应print(\n Waiting for final response )# 延时1秒确保服务器有足够时间返回结果time.sleep(1)# 接收最终响应数据finals.recv(4096).decode()# 打印最终响应print(Final response:)print(final)# 关闭套接字连接s.close()