Ruby 小博无线 2015-2016 跨年编程邀请赛 [成都瑞小博科技有限公司]

penny_peng · 2015年12月21日 · 最后由 penny_peng 回复于 2015年12月31日 · 2426 次阅读

不知可否借 ruby China 征集一些对编程有特殊情感的开发者,公司内部本月开展了一次跨年编程邀请赛,公司内外部开发爱好者均可参加,最后获前两名的开发者可获得 2048 和 1024 元现金,奖金不多,重在参与和交流,可以远程参与,如果在成都的,最后可以受邀参加我们的技术分享会。纯属技术交流,有兴趣的可以回帖联系我,有任务问题也可回帖,我会一一回复,谢谢大家的支持!

主题

为纪念 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 同时,每次移动后游戏会完全随机选择一个空白格子放入一个 2 或 4(各占 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

程序输出要求

  • 游戏的有效输出必须全部打印到 stdout,调试用的日志只能打印到 stderr 1
  • 第 1 行为字母 I,表示开始输出初始状态
  • 将状态按行依次输出,一共 4 行,每行 4 格。每个格子的数字前后使用'|'分隔,如果格子为空,用数字 0 表示。于是,状态 1 为 2-5 行:

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

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

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

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

  • 状态 1 移动到状态 U 的动作输出,第 6 行输出 U 表示向上移动。同理,如选择向下移动则输出 D,向左输出 L,向右输出 R
  • 假设随机切换至状态 U1, 那么第 7-10 行应该是:

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

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

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

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

  • 不断移动数字直到无法继续游戏
  • 最后一行输出字母 E 表示游戏结束
  • 输出样例 sample.txt ### 代码提交要求
  • 可使用自己喜欢的任意编程语言
  • 只接受源代码 2,请勿提交任何可执行的 binary 文件
  • 需要提交一个 readme 文件说明如何运行代码
  • 最好能附带一个 dockerfile
  • 将所有代码和说明文件打包成一个 zip 或 tar.gz 发到邮箱 [email protected]
  • 外部开发者请在邮件中说明自己和邀请人的姓名
  • 内部开发者请使用公司邮箱发送

    运行时环境及限制

  • 配置为 2 核 4G 内存的云主机

  • OS 为 Ubuntu 14.04

  • 不能访问网络

  • 不能写磁盘

    计分规则

  • 提交的程序会被运行 10 次,但总运行时间不能超过 1 小时。如在一小时内仅完成 3 次运行,则只有 3 次运行的结果会被用于计算得分。极端情况下,程序第一次运行即超过 1 小时未完成结果输出,或连续 10 次程序运行都出现异常终止,则得分为 0。得分超过 2048 的程序才能入围 Rank Board.

  • 选取游戏结束时最大的两个数字之和作为该次运行的最后得分 3

  • n 次(n <= 10,见规则 1)有效运行的最高分作为提交代码的最后得分

    赛程安排

  • 2015 年 12 月 10 日 - 2016 年 1 月 10 日 提交代码并即时测评。一共有 6 个提交窗口,12 月 10-20 日,21-27 日,27-2016 年 1 月 3 日,1 月 4-6 日,1 月 7-9 日,1 月 10 日。可以多次提交,但在每个窗口内只能提交一次。

  • 2016 年 1 月 11 日发布比赛结果

  • 赛后将会邀请有优秀表现的开发者进行技术分享,具体时间及地点安排确定后另行通知

    奖项设置

  • Rank Board 得分排名前两位 4 1st Rank - 2048 元 2nd Rank - 1024 元

  • 如果是外部开发者获奖,发起内邀的同学也将另外获得奖金的 25% 作为邀请奖励

  • 如果入围 Rank Board 的开发者不足两名,则对应奖项轮空

    问题咨询

    如对本次比赛有任何疑问,请发信到 [email protected] 咨询

关于我们

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

www.rippletek.com

赛制详情链接:http://b1.rippletek.com/ada-cmp/theme.html *********************************************************

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

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

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

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

你怎么判断我是随机放置的数字?

#1 楼 @mrpasserby 我们会看参与者发过来的代码,也会有专门的代码来评测你们的代码,而且会有评测报告。因为我们只接受源码格式的作品,这个随机性主要是通过 code review 来 check 的,所以这个问题不用担心哈。

#3 楼 @rubyu2 做做看呗~目前我们这里收到的代码最高分是上一万分了。

编程大赛已进入最后 10 天冲刺阶段,目前为止已有 4 人进入 Rank Board,详情如下: Rank# Name Commit Time Lang Score 1 Lenciel 21/12/2015 11:09:00 python 10240 2 Rick Lei 28/12/2015 17:23:00 clojure 6144 3 张帅 20/12/2015 14:23:00 racket 3072 4 杨亮 30/12/2015 11:00:00 java 2560

Rank Board 会实时更新,直到比赛结束。 参赛的朋友们,还要加油哦!最后十天了,我们陪你一起跨年,等你~

需要 登录 后方可回复, 如果你还没有账号请 注册新账号