MATLAB社区

MATLAB,社区等

列兵科迪排行榜

安娜在Yoyodyne推进系统的跨次元运输组工作。她的十名工程师团队最近在大量使用MATLAB,她认为这对他们提高技能有好处。但如何?

亚历克斯指出,通过工作科迪问题在MATLAB中心是一个有趣的方式来提高MATLAB编码。他已经断断续续地玩了几个月了,靠自己的努力索引的问题

大家同意试试科迪,并交换意见。他们不时地在咖啡机旁谈论这件事。但随着时间的推移,他们会失去注意力。有一天,阿曼达有了一个好主意:“我们需要一个记分牌!”那天晚上,下班后,她把每个人的分数都写下来,贴在咖啡壶旁边。

自动化流程

这招真是妙不可言。在Yoyodyne,开发Cody就像是一项校内运动。除了偶尔的向量化废话之外,人们还交换了他们最喜欢的黑客故事。但这样过了一个星期,阿曼达开始厌倦了用手收集每晚的分数。怎么办呢?亚历克斯说:“用我在扮演科迪中学到的技巧,我打赌我可以把这个自动化。”他编写了一个函数来收集数据并生成HTML排行榜。你只需要传入所有玩家的Cody ID号,代码就会完成剩下的工作。

他把名字和id存储在一个小CSV文件中。这很容易读入MATLAB表格。

playerTable = readtable("names.csv")
现在调用排行榜函数。
playerTable.ID makeLeaderboard(“leaderboard.html”)

结果是这样的。

安娜将这个代码附加到她电脑上的夜间计划任务上。现在,当她每天上班时,她都能快速扫描铅的变化。

展示历史

在他们这样玩了一个月之后,丽贝卡认为看到他们的分数的历史记录会很好。这样,她就可以看到不同球员在排名上的上升和下降轨迹。她编写了一个脚本,每天晚上收集数据,并将其保存到另一个CSV文件中。

她不再只是每晚生成排行榜,现在她运行这段代码来收集和保存数据。

scoreTable = gatherScoreData("scores.csv",playerTable.ID)

利用这些历史数据,丽贝卡可以绘制出一段时间内的分数。

[scoreMatrix,t,playerNames] = makeScoreMatrix(scoreTable,playerTable);情节(t, scoreMatrix。”线宽”,2)传说(玩家名,“位置”,“东北外”)网格

最后,为了制作一个有趣的赛马图,她制作了一个抽象的排名图,显示了位置随时间的变化。你真的可以看到黛布拉从最后一名上升到中间一名。

makeRankPlot (scoreMatrix t playerNames)

你最近为我做了什么?

有了所有的历史数据,就很容易显示记录历史中任何点的排行榜。3月15日是谁领导的?

T2 = datetime(2019,3,15)
t2 =datetime15 - 3月- 2019
currentLeaderTable = leaderTableAtTime(playerTable,scoreTable,t2)

这个功能让安娜解决了一些困扰她的问题。有些人,比如格蕾丝和亚历克斯,已经扮演科迪很长时间了。对科迪来说,在同样的绝对规模上与他们竞争,对其他人来说似乎不公平。因此,他们创建了一个每月的比赛,每个人都根据他们在前一个月的得分进行排名。

nDays = 30;t1 = t2 - days(nDays)
t1 =datetime13 - 2月- 2019就是
dMinus30Table = leaderTableAtTime(玩家表,分数表,t1)
currentTable = leaderTableAtTime(playerTable,scoreTable,t2);Rank = 0 (height(playerTable),1);RankChange = 0(大小(Rank));ScoreChange = 0(大小(排名));BadgeChange =零(大小(等级));i = 1:height(currentTable) Rank(i) = i;ixOld = find(dMinus30Table.Id== currentable . id (i));如果isempty(ixOld) RankChange(i) = NaN;ScoreChange(i) = currentable . score (i);BadgeChange(i) = currentable . badges (i);其他的Rank change (i) = ixOld - Rank(i);ScoreChange(i) = currentable . score (i) - dMinus30Table.Score(ixOld);BadgeChange(i) = currentable . badges (i) - dMinus30Table.Badges(ixOld);结束结束用四个新列增加当前表。currentTable = [currentTable (Rank,Rank change,ScoreChange,BadgeChange)];%按ScoreChange列排序。currentTableSorted = sortrows(当前表,“ScoreChange”“下”);currentTableSorted(:,[1 3 7])

现在很明显,虽然格蕾丝仍然是最高分,但茱莉亚在上个月的成绩最高。你可以打赌,下次他们俩在咖啡机旁聊天时,又提到了这个问题。

密码在哪里?

你一定猜到了,这个故事中的公司是虚构的。但代码不是。所描述的场景也是非常真实的。现在,有一些公司正在运行他们自己的本地化Cody竞赛,就像这里描述的那样。我们知道这一点,因为我们从他们那里听说过,他们告诉我们,毫无疑问,一点竞争对动力有神奇的作用。最重要的是,人们真的在学习有价值的MATLAB技能,他们可以应用到工作中。

如果你想在你的办公室建立一个内部的Cody竞赛,只需从这里的文件交换下载代码。

科迪排行榜

(在GitHub上也可以找到:https://github.com/mathworks/Private-Cody-Leaderboards

试一试!如果你开始了科迪联盟,请在评论中告诉我,并让我知道你想看到的其他功能。

|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。