小博无线2015-2016跨年编程邀请赛

主题

为纪念Ada Lovelace诞辰200周年,小博无线将面向小博无线的开发者及其朋友们举办一次编程竞赛。内部开发者可直接参赛,并欢迎邀请自己喜欢编程的朋友参加。

竞赛题目

本次编程邀请赛的选题为2048 Bot。参赛者需要编程实现数字游戏2048以及获取最高分的玩家智能。

2048游戏规则

2048游戏在一个4*4的矩阵中进行,初始状态为随机放置的3个2,例如:

状态1

0 0 0 0
0 2 0 0
0 0 0 0
2 0 2 0

0表示格子为空。玩家通过移动数字切换游戏状态. 在状态1分别选择向上下左右4个方向移动会分别切换到下面4个状态:

状态1向上移动至状态U

2 2 2 0
0 0 0 0
0 0 0 0
0 0 0 0

状态1向下移动至状态D

0 0 0 0
0 0 0 0
0 0 0 0
2 2 2 0

状态1向左移动至状态L

0 0 0 0
2 0 0 0
0 0 0 0
4 0 0 0

移动方向上两个相同数字会合并成一个新的数字,值为两个数字相加

状态1向右移动至状态R

0 0 0 0
0 0 0 2
0 0 0 0
0 0 0 4

同时,每次移动后游戏会完全随机选择一个空白格子放入一个24(各占50%概率)。以状态U为例,它的最后状态可能为13*2=26种状态中的一个,每种状态的概率均为1/26,排列如下:

状态U1

2 2 2 2
0 0 0 0
0 0 0 0
0 0 0 0

状态U2

2 2 2 4
0 0 0 0
0 0 0 0
0 0 0 0

状态u3

2 2 2 0
2 0 0 0
0 0 0 0
0 0 0 0

...

状态U26

2 2 2 0
0 0 0 0
0 0 0 0
0 0 0 4

每次移动只会在同一行或同一列触发一次合并,但在不同的行或列上的合并会同时触发。以下面的状态2为例

状态2

2 2 2 2
2 0 2 0
0 0 4 0
0 0 0 0

向左移动得到

状态2L (未显示新随机生成的2或4)

4 2 2 0
4 0 0 0
4 0 0 0
0 0 0 0

向右移动得到

状态2R (未显示新随机生成的2或4)

0 2 2 4
0 0 0 4
0 0 0 4
0 0 0 0

当无法往任何一个方向移动时,游戏结束, 例如下面的状态3

状态3

4 16 4 2
2 4 16 32
4 8 4 64
8 16 64 128

程序输出要求

|0||0||0||0|

|0||2||0||0|

|0||0||0||0|

|2||0||2||0|

|2||2||2||2|

|0||0||0||0|

|0||0||0||0|

|0||0||0||0|

代码提交要求

运行时环境及限制

计分规则

  1. 提交的程序会被运行10次,但总运行时间不能超过1小时。如在一小时内仅完成3次运行,则只有3次运行的结果会被用于计算得分。极端情况下,程序第一次运行即超过1小时未完成结果输出,或连续10次程序运行都出现异常终止,则得分为0。得分超过2048的程序才能入围Rank Board.
  2. 选取游戏结束时最大的两个数字之和作为该次运行的最后得分 3
  3. n次(n <= 10,见规则1)有效运行的最高分作为提交代码的最后得分

赛程安排

奖项设置

问题咨询

如对本次比赛有任何疑问,请发信到ada-cmp@rippletek.com咨询

关于我们

成都瑞小博科技有限公司(简称:小博无线)是一家专注于商业场所Wi-Fi覆盖及运营的创新型互联网企业,致力于商业Wi-Fi覆盖产品研发与运营模式创新,为全国商业Wi-Fi运营团队提供全面的运营平台与技术服务。凭借扎实稳定的技术基础,小博无线已成为国内最大的商业Wi-Fi开放运营平台供应商。

www.rippletek.com


  1. 最终的输出结果会通过类似‘runnable > out && verify out’的脚本来判断其正确性并计算得分,请务必保证stdout输出没有混入任何游戏状态输出以外的内容 

  2. 作者自己选择源代码的license,提供给小博无线的所有代码仅用于竞赛评审。如发现雷同代码,只认可最早收到的版本,后面的不予接受。 

  3. 状态3的最后得分为128+64=192 

  4. 如果出现同分,则按提交时间确定排名,先提交的靠前