ITPub博客

首页 > > > 等你来战!ITPUB第3届SQL大赛开启

等你来战!ITPUB第3届SQL大赛开启

作者:u_453e1a12781dea 时间:2015-12-03 17:56:06 0 删除 编辑

2011年ITPUB社区主办了第1届“盛拓传媒杯”SQL数据库编程大赛,2013举办了第2届,活动受到了广大社区会员的支持和热情参与,很多人依然记得之前热闹的场景,应广大会员要求,今年继续组织SQL数据库编程大赛。欢迎各路高手各显神通!


盛拓传媒是中国领先的互联网传媒集团,以传媒和互联网的力量,帮助消费者提高生活品质和工作效率是其使命。盛拓传媒拥有两家IT领域专业垂直网站(IT168、泡泡网PCPOP),在全国各个主要城市均设有分支机构,覆盖国内几乎所有的目标人群,拥有无可比拟的影响力和传播力,是中国最具价值的互联网专业传媒航母。


大赛评委团

卢涛
oracle开发板块资深版主〇〇

1995年参加工作,2001年转到IT部门从事c/c++软件开发,2004年开始做系统分析和Oracle数据库方面工作。参加过多个全国性普查数据处理项目的开发和运维,目前主要从事统计报表联网填报系统的后台支持。


苏旭辉
oracle开发板块资深版主newkid

现居加拿大多伦多,长期活跃于开发板为网友答疑解难,坚持每天贡献PL/SQL CHALLENGE 每日一题,曾参与撰写itpub系列丛书:剑破冰山:Oracle开发艺术。


丁俊
ITPUB开发版资深版主dingjun123

拥有8年电信行业从业经验,在某大型电信系统提供商工作7年,任资深工程师,从事过系统开发与维护、业务架构和数据分析、系统优化等工作。擅长基于ORACLE的系统优化,精通SQL、PL/SQL、JAVA等。



"RULES

▎赛事流程:

1

活动流程

1、发布本期活动题目及答题时间范围,大家可以在此期间根据以上参与规则上传自己的参赛程序文档。

2、结束答题,进入评审阶段,评审将在10天内对所有参赛程序进行评审,并给予点评。

3、公布评审结果及部分作品点评。

2

评审规则

1、由ITPUB论坛助理丸喵喵下载参赛者附件并解压后隐去参赛者ID,将各参赛文档重编序号发布给评委。

2、所有评委独立对运行出正确答案的程序打分,把相应分数告知论坛助理。论坛助理取平均数为该答案最后得分。

3

评审依据

1.用一句SQL实现,通俗易通,可读性(20分)(禁止在代码中包含参赛者ID、昵称等可能标识参赛者身份的信息)

2.解决问题的思路(20分)

3.解决问题的正确性和完善程度(40分)

4.性能(20分)

具体标准可能根据赛题进行适当调整。


"PRIZES

▎奖项设置:

1

一等奖

500元京东礼品卡,2016中国数据库技术大会门票一张、并授予“ITPUB SQL数据库编程大师”的称号,奖励专属徽章以标识身份;

2

二等奖

300元京东礼品卡,2016中国数据库技术大会门票一张、并授予“ITPUB SQL数据库编程大师”的称号,奖励专属徽章以标识身份;

3

三等奖

200元京东礼品卡,2016中国数据库技术大会门票一张、并授予“ITPUB SQL数据库编程大师”的称号,奖励专属徽章以标识身份;

4

四等奖

100元京东礼品卡,2016中国数据库技术大会门票一张、并授予“ITPUB SQL数据库编程大师”的称号,奖励专属徽章以标识身份;

5

参与奖

每位参与的会员均可获赠IT168纪念连帽衫一件、所有参与的会员均可得到一枚参与徽章。


"PUZZLE

▎题目设置:

井字棋

两个玩家,一个打圈(O),一个打叉(X),轮流在3乘3的井字格上打自己的符号,最先以任意一行、一列或对角线连成一线则为胜。规定X先手。

一个终局棋谱(MOVES)指的是从开始下子到一方获胜或者下完9个子出现平局,从头到尾的下子情况。一方获胜后,本局即终止。不得提前认输。

格子从上到下,从左到右,依次编号1-9

MOVES的第一位表示第一子位置,第二位表示第二子位置,......如果一方获胜,MOVES的长度有可能<9。

局面(BOARD)表示棋盘上呈现的局面,也是按照从上到下,从左到右排列。用X和0填入相应的格子。减号“-” 表示空位。

这里有个棋局:


表示出来是:

MOVES=3175968,

BOARD=O-X-OOXXX,

WINNER=X


比赛环境及功能要求:

在oracle 数据库10g及以上版本上成功运行,SQL中尽量避免使用12c的带有PL/SQL函数的WITH子查询。在WITH中使用了PL/SQL函数的答案将被扣10分。若要使用字符串拼接,应当使用listagg函数,不得使用wm_concat未公开函数。

若没有oracle 数据库测试环境,可以从此链接下载:

http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html


第一题(100分):求出所有可能终局棋谱和相应的局面,插入如下的表中:

CREATE TABLE TICTACTOE (MOVES VARCHAR2(9) PRIMARY KEY,BOARDVARCHAR2(9),WINNER VARCHAR2(1));


格式要求:

首先CREATE 上述TICTACTOE表。然后用一个能直接放在“insert into TICTACTOE ”后面成功运行的SQL查询语句,一次性插入所有满足标准的棋谱和相应的局面、胜者(WINNER=X或O或D,其中D表示平局)


注意:本题要求生成所有可能的终局棋谱,只要符合规则即可,哪怕其中有些走法可能看起来很愚蠢,也得包含进去。还没下完的棋谱不要列入。

如果两个终局的局面(BOARD)相同,但是其下子顺序(MOVES)不同,则视为不同棋谱,两个都必须出现在结果中。

如果两个棋谱的MOVES不同,但是其终局局面(BOARD)经过旋转、翻转后重合,仍然被视为不同棋谱,两个都必须出现在结果中。


第二题(100分):给定一个局面,假定该局面一定为有效(不会出现一方比另一方多两子的情况,或者两方都有三子连线的情况),用SQL判断出哪一方有必胜策略,以及获胜方最多再下几子必定会获胜。比如输入:V_BOARD='X-0------' 则输出'X3',表示WINNER=X,下子数=3,因为不管对手怎么走,X最多再下3子一定获胜。(不计入O再下的子数)

如果O方有失误,也有可能X再下两子就取胜的;X方也有可能下错而输掉,但这些都不在本题考虑范围,假定双方都是完美棋手,即双方都尽可能取胜,不能取胜则尽可能求和,不能求和则尽可能多下几子。

如果给定的局面中一方已经获胜,则输出获胜方符号和子数0,例如输入:V_BOARD='OXX—XOOX', 则输出'X0'

如果不存在必胜策略(比如一个空局:V_BOARD='---------'),则输出'D'。

输出中都不含单引号。


格式要求:

首先在sqlplus中声明变量var v_BOARDvarchar2(9),再对变量赋值(如:exec :v_BOARD:='X-O------')。然后用一个包含变量v_BOARD的查询语句,返回对应此棋局的结果字符串(X数字,或O数字,或D表示平局)


附加题

m,n,k游戏是指两个对手在m*n的棋盘上轮流下子,谁先在纵、横、四十五度斜线上连续取得k个子就获胜的一种游戏,井字棋游戏其实就是3,3,3的一种特例。五子棋则为15,15,5游戏。

上述第二题中,如果SQL能够适用于m,n,k大于等于3的情况,则可获得10分的附加分。


点击
阅读原文
参与答题



原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2019-07-17

  • 博文量
    1982
  • 访问量
    17876