zoukankan      html  css  js  c++  java
  • 第二次结对编程作业

    1、结对同学地址:https://www.cnblogs.com/fzu-031702148/

    UI视频地址:https://v.youku.com/v_show/id_XNDQwODg4NTcwNA==.html?spm=a2h3j.8428770.3416059.1

    本作业博客链接:https://www.cnblogs.com/fzu-031702148/p/11675619.html

    仓库地址https://github.com/vjudge0913/13Water/

    2、具体分工

    陈启昌:网页前端html、与服务器交互

    刘华一:网页后端python、写博客

    3、PSP表格

    Planning 计划 预计耗时 实际耗时
    Planning 计划 15 30
    Estimate 估计这个任务需要多少时间 40 50
    Development 开发 500 850
    Analysis 需求分析 (包括学习新技术) 120 230
    Design Spec 生成设计文档 60 60
    Design Review 设计复审 15 10
    Coding Standard 代码规范 (为目前的开发制定合适的规范) 70 60
    Design 具体设计 120 180
    Coding 具体编码 500 800
    Code Review 代码复审 50 50
    Test 测试(自我测试,修改代码,提交修改) 120 120
    Reporting 报告 30 30
    Test Repor 测试报告 30 30
    Size Measurement 计算工作量 10 10
    Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 30
    合计 1710 2540

    4、解题思路描述与设计实现说明

    • 网络接口的使用

    • 代码组织与内部实现设计

    • 说明算法的关键与关键实现部分流程图
      因为python运行效率低,遍历所有情况需要6s,所以采用c++生成所有排列情况,然后用json.loads载入 c++代码如下

    int rec[20];
    int cnt=0;
    int pt()
    {
    	vector<int> ve[5];
    	for(int i=1;i<=13;i++)ve[rec[i]].pb(i);
    	if(ve[1].size()==3&&ve[2].size()==5&&ve[3].size()==5)
    	{
    		cnt++;
    		cout<<'[';
    		for(int i=0;i<ve[3].size();i++)
    		{
    			cout<<ve[3][i];
    			if(i!=ve[3].size()-1)cout<<',';
    		}
    		cout<<']';
    		cout<<',';
    		
    		cout<<endl;
    		
    	 } 
    }
    int dfs(int deep,int col)
    {
    	if(deep>13)
    	{
    		pt();return 0;
    	}
    	if(deep)rec[deep]=col;
    	if(deep<13)
    	for(int i=1;i<=3;i++) 
    	dfs(deep+1,i);
    	else
    		dfs(deep+1,1);
    	
    }
    int main()
    {
    	freopen("1.txt","w",stdout);
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    	cout<<'[';
    	dfs(0,1);
    	cout<<']';
    	
    }
    
    

    以上代码生成3 5 5 排列 ,保存为3.txt,51.txxt,52.txt


    在python内,载入保存为list

    然后各种各种特判,找出权值最大的方案返回

    5、关键代码解释

    后端使用flask框架接收前端信息代码如下:

    from flask import Flask
    from flask import request
    from flask_cors import CORS
    import json
    app = Flask(__name__)
    @app.route('/test')
    def test():
        global list_3,list_51,list_52,card_list,card_list_str
        data = request.get_json()
        card_str = data["card"]
        card_list_str=card_str.split(' ')
        init_card()
    

    调用init_card()函数对卡牌信息进行预处理

    map_color2i={"$":1,"&":2,"*":3,"#":4}
    map_i2color={1:"$",2:"&",3:"*",4:"#"}
    map_card2i={"A":14,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9,"10":10,"J":11,"Q":12,"K":13}
     card_list.clear()
        vector_color.clear()
        vector_num.clear()
        card_list.append((0,0))
        for i in range(1,16):
            vector_num.append([])
            vector_color.append([])
        print(card_list_str)
        for i in card_list_str:
            color=map_color2i[i[0]]
            num=map_card2i[i[1]]
            card_list.append((color,num))
            vector_color[color].append(num)
            vector_num[num].append(color)
        for i in range(1,5):
            vector_color[i].sort()
        print(card_list)
    

    将每一张牌信息保存为一个tuple 第一个值是花色1-4 第二个是数字2-14(A为14)
    处理完后的信息如下:

    6、性能分析和改进

    改进思路:python跑得慢,c++跑得快,原来想用python实现前端和c++连起来,但有点麻烦,于是采用使用c++生成排列,
    python生成排列用时3s,c++生成后保存为文件,python用loads载入只用300ms,快了10倍
    然后尝试用postman测试需要运算2.56s

    7、单元测试

    测试用例:

    &K $7 #8 #4 *10 &10 &9 *J #7 *K $8 $A $K
    &5 #8 #7 #A *8 &3 &A &10 &4 &9 *J *4 &2
    $4 *J &4 $A $J *4 &A $K &3 #3 #7 &5 &2
    *9 $A #6 *2 &7 $8 #J $2 #Q #10 $9 &10 #4
    *9 &A *4 $10 #8 #3 $5 $2 &5 $9 &10 #4 *K
    &5 *J #4 *9 &Q &3 $Q #2 *5 *6 &A $8 $K
    *K *9 #J $2 $9 &5 $8 &J &4 &8 $A *10 &7
    *8 *K #4 &K $2 #Q $6 *Q $K &J *10 &5 $3
    *K *A &Q &6 &K *4 $5 $7 #Q &A $6 #K #5
    *9 &7 &K #5 #A $9 *7 $A *2 #3 &4 *J #9
    
    

    测试输出:

    {"card":["*2 *2 *3","*4 *4 *5 *5 *5","*6 *6 *A *A *A"]}
    {"card":["#7 *8 #8","&A #A &4 *4 *J","&2 &3 &5 &9 &10"]}
    {"card":["&3 #3 #7","*J $J $K &2 &5","&4 *4 $4 &A $A"]}
    {"card":["*2 $2 $A","*9 $9 &7 $8 &10","#4 #6 #10 #J #Q"]}
    {"card":["*4 #4 &A","&5 $5 #3 #8 *K","*9 $9 &10 $10 $2"]}
    {"card":["*9 *J $K","&Q $Q &A *5 $8","#2 &3 #4 &5 *6"]}
    {"card":["*9 $9 *10","#J *K $A $2 $8","&4 &5 &7 &8 &J"]}
    {"card":["*8 *10 &J","$2 $3 #4 &5 $6","&K *K $K *Q #Q"]}
    {"card":["&6 $6 $7","&Q #Q #5 $5 *4","&K *K #K &A *A"]}
    {"card":["&4 #5 *J","&7 *7 &K *2 #3","*9 #9 $9 #A $A"]}
    

    8、贴出Github的代码签入记录

    9、遇到的代码模块异常或结对困难及解决方法

    问题描述 做过哪些尝试 是否解决 有何收获
    ajax发post和get 无数种 我太菜了
    对接AI遭遇CORS 导入包配置一下 暂无,已有思路 https真香
    设计原型前没有看好需求 重构了一部分 原型还是得好好整
    github的使用:徽章?开源协议?持续集成?分支? 996徽章?一个人开分支意义不大 我还是太菜了

    10、评价你的队友

    值得学习的地方:
    华一很有项目经理的范,总是会主动提出要一起讨论、一起敲代码
    需要改进的地方:
    太强了 没有

    学习进度条

    第N周 新增代码 累计代码 本周学习 累计学习 重要成长
    第1周 xxx xx 15h 15h mokcingBot
    第3周 1000(1.64MB无图片) 1000(1.64MB无图片) 20h 35h 前后端交互

  • 相关阅读:
    在pos:a元素不设定宽度的情况下,他的最大宽度是受父元素的宽度所限制的。
    跳过权限检查,强制修改mysql密码
    IIS7.5 配置ASP+ACCESS使用环境(转)
    windows 2008配置运行PHP5.5.X
    Content encoding error问题解决方法
    ubuntu 中文显示乱码问题 (转)
    Ubuntu 12.04中文输入法的安装(zhuan)
    html5开发之viewport使用
    Windows/Linux 环境搭建Git服务器 + vs2012集成git
    Windows+VS+SVN实现版本控制
  • 原文地址:https://www.cnblogs.com/elis/p/11681033.html
Copyright © 2011-2022 走看看