团队博客: CSDN AI小组
前言
前一篇文章代码一变三模块开发记录(一)大致介绍了代码一变三模块的来龙去脉,由于我们的数据源,主要都是一些算法题,考虑到删掉部分代码后,容易暴露正确选项,因此,为了增加题目的混淆性,去掉了删除代码的策略,主要针对改代码,进行了一些策略调整。
一、数据
距离上一篇博客已经一个月之久,这一个月,至少有15天都在处理数据,想必作为NLP工程师,数据的重要性,大家应该都不言而喻。
我们有一部分题目,来自LeetCode前一百道算法题,有一部分来自CSDN问答的已采纳答案,考虑到来自leetcode的题解可能构成侵权,于是,我们自己写了一部分题解,还有一部分题解来自GitHub以及CSDN的一些博客。
感谢龙哥贡献的题解@幻灰龙
C语言部分题解来自 https://github.com/begeekmyfriend/leetcode
Python部分题解来自 https://github.com/qiyuangong/leetcode
Java部分题解来自 https://github.com/zhangyu345293721/leetcode
感谢各位🌹
目前,只支持C/C++、Python、Java 编程语言。
二、策略
1、选择题
-
找出代码中可替换的行
C/C++/Java 根据以下列表中的保留字及运算符,找出可以用来变换的代码行 ``` ['\tif', '\twhile', '\tcontinue', '\tbreak','->', '+', '%', '+=', '-=', '/=', '%=', '^=','.pop','.push'] ```
-
遍历可替换的map,生成替换后的结果
{ 'if': ['while'], 'while': ['if'], 'break': ['continue'], 'continue': ['break'], '.pop': ['.push'], '.push': ['.pop'], '->': ['.'], '+': ['-', '*', '/', '%', '&', '&&', '|', '||'], '%': ['+', '-', '*', '/', '&', '&&', '|', '||'], '+=': ['-=', '/=', '%=', '^='], '-=': ['+=', '/=', '%=', '^='], '/=': ['+=', '-=', '%=', '^='], '^=': ['+=', '-=', '/=', '%='], }
-
将生成的结果随机取出三种,与正确答案混合,作为ABCD四个选项
此外,考虑到需加入 “以上都不对”选项,需要做一些特殊的处理:
- 该选项应随机出现
- 该选项在候选项中时,应该出现在最后一项,并且,正确答案可能是其他选项,也可能是“以上都不对选项”
- 该选项未出现时,不做其他处理
有时候还会面临生成的选项不够的情况,因此,引入新的策略,是必要的。
- 交换if while中的条件
只有在生成的选项不够时,才会执行备用策略
2、填空选择题
对于填空选择题,与选择题稍微有点不一样
- 找出代码中可以生成填空题的代码行
首先从以下列表中寻找
['\tif', '\tfor', '\twhile']
若从以上列表中未找到可以替换的行索引,则从以下列表中寻找{ "+": ["-"], "-": ["+"], "<": [">", ">=", "<=", "=="], ">": ["<", ">=", "<=", "=="], "<=": [">", ">=", "<", "=="], ">=": [">", "<=", "<", "=="], "/": ["*"], "==": ["!=", ">", "<", "<=", ">="], "!=": ["==", ">", "<", "<=", ">="], "++": ["--"], "--": ["++"], "&": ["|"], "|": ["&"], "&&": ["|", '!'], "||": ["&", '!'], "!": ['', '0 == ', '0 != ', '0 >= ', '0 <= '] }
- 遍历可替换的map,生成替换后的结果
其他的与选择题基本一致
三、存储
考虑到用户已答对的问题,不应该出现再下次生成的题目列表中,于是需要对用户答过的问题做一个记录,这里我们选择使用Redis来存储用户已答对的问题,用Redis的集合操作sadd和smembers来保存和读取用户已答对的问题,更详细的Redis操作集合的例子可以参考python连接Redis,集合(set)的简单操作
四、部署
由于本项目需要安装的依赖较少,于是选择了阿里云的函数计算来部署。
环境由龙哥搭建@幻灰龙
龙哥yes
什么是函数计算?
函数计算是事件驱动的全托管计算服务。
使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码。
函数计算为您准备好计算资源,弹性地、可靠地运行任务,并提供日志查询、性能监控和报警等功能。
想进一步了解函数计算的同学可以移步阿里云函数计算
总结
对于每日一题功能,我相信它很快便能和大家见面,为此,我们已经创建好了每日一题的社区论坛,欢迎大家参与讨论,共同进步。
感兴趣的同学可以移步⬇️