L1-064 估值一亿的AI核心代码 (20 分)
 

以上图片来自新浪微博。

本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是:

  • 无论用户说什么,首先把对方说的话在一行中原样打印出来;
  • 消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
  • 把原文中所有大写英文字母变成小写,除了 I
  • 把原文中所有独立的 can youcould you 对应地换成 I canI could—— 这里“独立”是指被空格或标点符号分隔开的单词;
  • 把原文中所有独立的 I 和 me 换成 you
  • 把原文中所有的问号 ? 换成惊叹号 !
  • 在一行中输出替换后的句子作为 AI 的回答。

输入格式:

输入首先在第一行给出不超过 10 的正整数 N,随后 N 行,每行给出一句不超过 1000 个字符的、以回车结尾的用户的对话,对话为非空字符串,仅包括字母、数字、空格、可见的半角标点符号。

输出格式:

按题面要求输出,每个 AI 的回答前要加上 AI: 和一个空格。

输入样例:

6
Hello ?
Good to chat with you
can you speak Chinese?
Really?
Could you show me 5
What Is this prime? I,don 't know

输出样例:

Hello ?
AI: hello!
Good to chat with you
AI: good to chat with you
can you speak Chinese?
AI: I can speak chinese!
Really?
AI: really!
Could you show me 5
AI: I could show you 5
What Is this prime? I,don 't know
AI: what Is this prime! you,don't know ***注意,如果你也是卡在第二个测试点,可以测试 [can I can] -> [can you can] 和 [can you you] -> [I can you]***
#include <bits/stdc++.h>
using namespace std; string line, orign; bool is_fuhao(char c) {
return (!isspace(c) && !isalpha(c) && !isdigit(c));
} bool is_duli(int s, int t, int limit) { return (((s == ) || isspace(line[s - ]) || is_fuhao(line[s - ]))
&& ((t == limit) || isspace(line[t + ]) || is_fuhao(line[t + ])));
} int find_duli(string s, int pos) {
int idx;
int len = line.length();
while(pos < len && (idx = line.find(s, pos)) >= ) {
if(is_duli(idx, idx + s.length() - , len - ))
return idx;
else
pos += s.length();
}
return -;
} void replace_unit(string o, string t) {
bool isUpdate = true;
int pos = ;
while(pos < (int)line.length() && isUpdate) {
isUpdate = false;
int idx = find_duli(o, pos);
if(idx >= ) {
line.replace(idx, o.length(), t);
isUpdate = true;
pos = idx + o.length();
}
}
} void proc_replace() {
replace_unit("I", "You");
replace_unit("me", "You");
replace_unit("can you", "I can");
replace_unit("could you", "I could");
} void del_blank() {
bool isUpdate = true;
while(isUpdate) {
int len = line.length(), pos = ;
isUpdate = false;
for(int i = pos; i < len; i++) { // 结尾不会是空格,不会越界
if(isspace(line[i]) && (isspace(line[i + ]) || is_fuhao(line[i + ]))) {
line.erase(i, );
pos = i;
isUpdate = true;
break;
}
}
}
} void to_lower_tanhao() { transform(line.begin(), line.end(), line.begin(), [](char c)->char {
if(c == '?') return '!';
else if(c == 'I') return 'I';
return tolower(c);
}); } void input_and_trim() { getline(cin, orign);
line = orign; if(!line.empty()) {
line.erase(,line.find_first_not_of(" "));
line.erase(line.find_last_not_of(" ") + );
} } int main() { int n;
cin >> n;
getchar();
while(n --) {
input_and_trim();
to_lower_tanhao();
del_blank();
proc_replace();
to_lower_tanhao();
cout << orign << endl;
cout <<"AI: "<< line << endl;
} }
 

L1-064 估值一亿的AI核心代码 (20 分)的更多相关文章

  1. PTA --- 天梯赛 L1-064 估值一亿的AI核心代码

    L1-064 估值一亿的AI核心代码 (20 point(s)) 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来: 消除原文中多 ...

  2. L1-064 估值一亿的AI核心代码

    以上图片来自新浪微博. 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来: 消除原文中多余空格:把相邻单词间的多个空格换成 1 个 ...

  3. PTA 估值一亿的AI核心代码

    题面 比赛时被模拟题打自闭了,本来以为是个比较麻烦的模拟,实际上只要会C++的regex不到40行就能把这个题过掉了(orz smz) regex是用来处理正则表达式,里面有个函数regex_repl ...

  4. PTA天梯赛训练题L1-064:估值一亿的AI核心代码(字符串模拟)

    Update:smz说regex秒过Orz,yzd记在这里了. 听说今年天梯赛有个烦人的模拟,我便被队友逼着试做一下……一发15,二发20.记一记,要不然枉费我写这么久…… 自己还是代码能力太菜了,校 ...

  5. go & AI核心代码

  6. 【五子棋AI循序渐进】关于VCT,VCF的思考和核心代码

    前面几篇发布了一些有关五子棋的基本算法,其中有一些BUG也有很多值得再次思考的问题,在框架和效果上基本达到了一个简单的AI的水平,当然,我也是初学并没有掌握太多的高级技术.对于这个程序现在还在优化当中 ...

  7. .NET核心代码保护策略

    .NET核心代码保护策略-隐藏核心程序集 经过之前那个道德指责风波过后也有一段时间没写博客了,当然不是我心怀内疚才这么久不写,纯粹是程序员的通病..怎一个懒字了得,本来想写一些长篇大论反讽一下那些道德 ...

  8. 基于Mysql数据库亿级数据下的分库分表方案

    移动互联网时代,海量的用户数据每天都在产生,基于用户使用数据的用户行为分析等这样的分析,都需要依靠数据都统计和分析,当数据量小时,问题没有暴露出来,数据库方面的优化显得不太重要,一旦数据量越来越大时, ...

  9. Libgdx: android单机斗地主支持局域网wifi联网的网络模块核心代码

    这个作品是我近期写的,结合我的毕业设计的通信模块和之前的单机版斗地主.我已经上架到豌豆荚了,贴了点广告,看看能不能赚点茶钱. 但是一点也不乐观.因此我想分享给大家源代码. 仅仅要不用于商业. 以下先贴 ...

随机推荐

  1. MySQL树

    树 树状图是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合.把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的. 它具有以下的特点:每个结点有零个 ...

  2. Codeforces 955C Sad powers(数论)

    Codeforces 955C Sad powers 题意 q组询问,每次询问给定L,R,求[L,R]区间内有多少个数可以写成ap的形式,其中a>0,p>1,1 ≤ L ≤ R ≤ 1e1 ...

  3. 在浏览器上打开、预览Excel xlsx表格文件

    现在的HTML5,有了FileReader文件读写API, 真是让javascript的能力大幅提升. 解析zip压缩文件.解析Excel xlsx 表格文档各种文件预览,实现起来也有了可能性,以前的 ...

  4. PySpider的安装

    使用 Pip 安装,命令如下 pip install pyspider 命令执行完毕即可安装成功. 常见错误: Windows 下可能会出现这样的错误提示:Command "python s ...

  5. Exponentiation(求高精度幂)

    Exponentiation Time Limit: 500MS   Memory Limit: 10000K Total Submissions: 175340   Accepted: 42341 ...

  6. 视图解析器InternalResourceViewResolver

    ModelAndView对象中即可以封装真实视图路径名,也可以封装视图路径的逻辑名,springmvc.xml 代码如下: <!-- 视图解析器(框架) --> <bean clas ...

  7. js对象和jQuery对象相互转换

    (1)什么是js对象及代码规则 就是使用js-API,即Node接口中的API或是传统JS语法定义的对象,叫做js对象 js代码规则----divElement var divElement = do ...

  8. .netcore多语言解决方案

    这里本文使用Microsoft.AspNetCore.Localization来实现多语言的解决方案 默认是包含这个包的,所有不需要再额外安装 首先需要注入我们需要的服务 1.在startup.cs中 ...

  9. IDEA使用git

    本文转自:http://www.cnblogs.com/java-maowei/p/5950930.html 一.安装git 下载地址:  https://git-scm.com/download/w ...

  10. Turbine Netflix

    Turbine是聚合服务器发送事件流数据的一个工具,用来监控集群下hystrix的metrics情况. 本实例是在consul做为服务发现时的配置. Turbine聚合器: 可以参照:https:// ...