每日一题开发记录(二)


团队博客: 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

什么是函数计算?

函数计算是事件驱动的全托管计算服务。
使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码。
函数计算为您准备好计算资源,弹性地、可靠地运行任务,并提供日志查询、性能监控和报警等功能。

想进一步了解函数计算的同学可以移步阿里云函数计算

总结

对于每日一题功能,我相信它很快便能和大家见面,为此,我们已经创建好了每日一题的社区论坛,欢迎大家参与讨论,共同进步。

感兴趣的同学可以移步⬇️

每日一题社区论坛

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ToTensor

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值