飞梦雀魂大赛成绩计算代码

荣喵!四喵刻单骑,打不撸雅酷喵。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154

namelistfile='namelist.xlsx'; %第一列是雀魂昵称/ID,第二列是四麻/三麻
namelistall = readtable(namelistfile, 'ReadVariableNames', false); % 读取白名单
namelist = string(namelistall{:, 1}); % 将白名单转换为字符串数组
typelist = string(namelistall{:, 2});

%%
filename = '四人麻将牌谱记录.csv'; %从赛事管理/赛事牌谱导出的牌谱csv表格
data = readtable(filename);


playerScoresMap = containers.Map('KeyType', 'char', 'ValueType', 'any');

%读取表格,生成选手-成绩的Map
for i = 1:height(data)
players = {data{i, 4}, data{i, 7}, data{i,10}, data{i,13}};
scores = [data{i, 6}, data{i, 9}, data{i,12}, data{i,15}];

for j = 1:length(players)
username = players{j};
score = scores(j);
username = cell2mat(username);
if isKey(playerScoresMap, username)
playerScoresMap(username) = [playerScoresMap(username), score];
else
playerScoresMap(username) = score;
end
end
end

%创建结果表格文件
playerUsernames = keys(playerScoresMap);

resultTable = table('Size', [length(playerUsernames), 1], ...
'VariableTypes', {'double'}, 'VariableNames', {'FinalScore'});

for k = 1:length(playerUsernames)
username = playerUsernames{k};
flag=0;
for i = 1:length(namelist)
%if(contains(username,namelist(i)) && contains(typelist(i),'四人麻将')) 区分四麻/三麻报名,如果注释掉就是只要报名了就能同时打四麻和三麻
if(contains(lower(username),lower(namelist(i))))
flag=1;
break;
end
end
if(flag==0)
disp(username);
continue;
end
scores = playerScoresMap(username);
scores = flip(scores);
finalScore=-99999.99;
if (length(scores)>=5) %计算最终成绩
maxScores = -99999.99;
for i = 5 : min(20,length(scores))
average = sum(scores(1:i)) / i;
if(average > maxScores)
maxScores = average;
end
end
finalScore = maxScores;
else
finalScore = -99999.99;
end

resultTable.FinalScore(k) = finalScore; % 第一列:最终成绩
resultTable.Username(k) = {username}; % 第二列:用户名
resultTable{k, 3:2+length(scores)} = scores; % 第三列及以后:历次成绩


end


filename = '四人麻将成绩表.xlsx';
writetable(resultTable, filename);

%%
clear all;

namelistfile='namelist.xlsx';
namelistall = readtable(namelistfile, 'ReadVariableNames', false); % 读取白名单
namelist = string(namelistall{:, 1}); % 将白名单转换为字符串数组
typelist = string(namelistall{:, 2});

filename = '三人麻将牌谱记录.csv'; %从赛事管理/赛事牌谱导出的牌谱csv表格
data = readtable(filename);

playerScoresMap = containers.Map('KeyType', 'char', 'ValueType', 'any');

%读取表格,生成选手-成绩的Map
for i = 1:height(data)
players = {data{i, 4}, data{i, 7}, data{i,10}};
scores = [data{i, 6}, data{i, 9}, data{i,12}];

for j = 1:length(players)
username = players{j};
score = scores(j);
username = cell2mat(username);
if isKey(playerScoresMap, username)
playerScoresMap(username) = [playerScoresMap(username), score];
else
playerScoresMap(username) = score;
end
end
end

%创建结果表格文件
playerUsernames = keys(playerScoresMap);

resultTable = table('Size', [length(playerUsernames), 1], ...
'VariableTypes', {'double'}, 'VariableNames', {'FinalScore'});

for k = 1:length(playerUsernames)
username = playerUsernames{k};

flag=0;
for i = 1:length(namelist)
%if(contains(username,namelist(i)) && contains(typelist(i),'三人麻将'))
if(contains(lower(username),lower(namelist(i))))
flag=1;
break;
end
end
if(flag==0)
disp(username);
continue;
end

scores = playerScoresMap(username);
scores = flip(scores);
finalScore=-99999.99;
if (length(scores)>=5) %计算最终成绩
maxScores = -99999.99;
for i = 5 : min(20,length(scores))
average = sum(scores(1:i)) / i;
if(average > maxScores)
maxScores = average;
end
end
finalScore = maxScores;
else
finalScore = -99999.99;
end

resultTable.FinalScore(k) = finalScore; % 第一列:最终成绩
resultTable.Username(k) = {username}; % 第二列:用户名
resultTable{k, 3:2+length(scores)} = scores; % 第三列及以后:历次成绩


end

filename = '三人麻将成绩表.xlsx';
writetable(resultTable, filename);

本站的运行成本约为每个月5元人民币,如果您觉得本站有用,欢迎打赏:


飞梦雀魂大赛成绩计算代码
https://suzumiyaakizuki.github.io/2025/02/10/飞梦雀魂大赛成绩计算代码/
作者
SuzumiyaAkizuki
发布于
2025年2月10日
许可协议