编程大赛
从周五开始,我们小组有三人参与的编程大赛。大赛的题目是这样的:编写一个AI机器人,又叫聪明的搬运工。在给定的地图上走最短的距离背更多的包裹,每次搬运完一个包裹就会奖励同包裹重量等值的金币,每走一步、拣起、放下包裹浪费一个金币。如果搬运工撞墙、掉进河里、超过回合数都会被server踢出去。
早上9点,大赛组委会发送题目到每个小组的邮箱中,由于没有限制场地,参加小组比赛的队员和我们是坐在一起的,我也被邀请做后备队员,在旁边"敲敲边鼓"。当我看到这个题目的时候,就想到A*、背包、旅行商的经典算法,在这个游戏里需要将三个算法的结果再做一次取优。可惜,我只知道这些算法名字,有大概的了解,但不清楚如何去做。在和队员讨论中,我还不确定A*算法是否能用来做寻路的算法。赶紧的查询网络,把A*算法伪代码反复看来几遍,发现貌似和数据结构中图有关,两个节点之间必须有权重(说实话我没有认真看)。在和队员讨论过程中,我不敢确定A*算法是否能解决,我只是提示一下。
最后,队员们和我没有去理会A*算法,我们考虑到是否要用找迷宫的方法,确定包裹与包裹目的地址的最短距离,然后我们陷入解决递归和未知大小的结果集如何裁减。整个上午我们在讨论这个问题。最终没有结论。
还好,上午,另一名队友已经熟悉了游戏server与我们Client的交互,整理游戏中除算法外的数据结构。
下午,正在我们找不到如何解决最短路径问题的时候,我们的主管把我们队和另外一个同部门的队伍拉到会议室,集中把A*、背包、旅行者算法讲了一遍,并给出资料。这算不算作弊?嗯,还好吧,搞不好其它部门也在这么搞。我们又不是什么游戏公司,平时大家对算法还真不熟悉,很多甚至不是计算机科学与技术专业的。好吧,万事具备,只欠编码了。
行动吧,队员们开足来马力,用了一个下午+一个晚上(PS:晚上通宵),把算法编写完毕了。
第二天是周六,我到公司的时候,队员们还在奋战,精力旺盛啊!!!
据说周五晚上因为内存分配失败,定位了5个小时,o,用C的悲哀,用不好C的悲哀。。。
周六,没有什么奇迹,遇到的问题都比较小,代码编写的不规范,导致后期调试相当痛苦,一直找不到错误,我也加入了调试过程,代码逻辑不轻,让我感觉很无奈,看不出来哪里有问题,我甚至想重新编写一遍。
下午5:30,我们交卷了,最终还是没有运行起来。
我们小组最终以失败告终,但小组成员却还处在亢奋状态,一点没有失败的感觉。到交作品的时候,我们还没有调试完。
比赛中也暴露出我们编程能力逐渐消失的危机,在公司里面整天维护100万左右的代码,没有亲自增量设计过,平均每天代码编写量不超过5行(保守估计),这怎么能算是程序员?一个朋友说:“整天不写代码的程序员不是程序员”,这次编程大赛见证了我们的现在能力是如何的差劲。