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

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

    1、结对同学地址:https://www.cnblogs.com/elis/

    本作业博客链接: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 前后端交互

  • 相关阅读:
    JAVA并发之ReentrantLock源码(一)
    java并发之线程池
    Quine--输出程序源码的程序(java)
    【leetcode】Weekly Contest 92
    【java集合类】ArrayList和LinkedList源码分析(jdk1.8)
    【leetcode】Weekly Contest 91
    牛客2018.6模拟考编程题
    MFC 完全自定义控件
    图形学中求平面方程系数以及法向量
    std::function解决函数重载绑定
  • 原文地址:https://www.cnblogs.com/fzu-031702148/p/11675619.html
Copyright © 2011-2022 走看看