第二次结对编程作业

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 前后端交互

posted @ 2019-10-15 21:10  Elis  阅读(219)  评论(2编辑  收藏  举报