楼主: 童馨

ITPUB第2届“盛拓传媒杯”SQL数据库编程大赛第二期正式开始,欢迎大家踊跃参与答题!

[复制链接]
论坛徽章:
14
兰博基尼
日期:2013-12-09 18:17:40生肖徽章:猪
日期:2013-12-06 14:15:45生肖徽章:狗
日期:2013-12-06 14:15:45生肖徽章:鸡
日期:2013-12-06 14:15:45生肖徽章:猴
日期:2013-12-06 14:15:45生肖徽章:羊
日期:2013-12-06 14:15:45生肖徽章:马
日期:2013-12-06 14:15:45生肖徽章:蛇
日期:2013-12-06 14:15:45生肖徽章:龙
日期:2013-12-06 14:15:45生肖徽章:鼠
日期:2013-12-06 14:15:45
421#
发表于 2013-11-13 05:58 来自手机 | 只看该作者
udfrog 发表于 2013-11-12 22:11
any good news?
我倒是把正题又优化了下,测试1000组数据,性能又提升3倍!哈哈

我的附加題裏是用到正題邏輯的。附加題又拼命擠了擠,在你這條前已發帖。雖然截止時間到了,但我看看再優化下正題。

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
422#
发表于 2013-11-13 06:14 | 只看该作者
我又搞了一把丑化,现在更难看了,但是30/30/300那题跑了0.55秒。
其实这些数字没有意义,偶然因素很大,硬件也不同(我是i5+8g), 只是关公战秦琼,还是要到OO那里去厮杀一把。

使用道具 举报

回复
论坛徽章:
14
兰博基尼
日期:2013-12-09 18:17:40生肖徽章:猪
日期:2013-12-06 14:15:45生肖徽章:狗
日期:2013-12-06 14:15:45生肖徽章:鸡
日期:2013-12-06 14:15:45生肖徽章:猴
日期:2013-12-06 14:15:45生肖徽章:羊
日期:2013-12-06 14:15:45生肖徽章:马
日期:2013-12-06 14:15:45生肖徽章:蛇
日期:2013-12-06 14:15:45生肖徽章:龙
日期:2013-12-06 14:15:45生肖徽章:鼠
日期:2013-12-06 14:15:45
423#
发表于 2013-11-13 07:27 来自手机 | 只看该作者
newkid 发表于 2013-11-13 06:14
我又搞了一把丑化,现在更难看了,但是30/30/300那题跑了0.55秒。
其实这些数字没有意义,偶然因素很大,硬 ...

我們這是在“秒殺”嗎?哈哈 …

使用道具 举报

回复
论坛徽章:
289
蛋疼蛋
日期:2013-03-29 13:46:58优秀写手
日期:2013-12-24 06:00:12福特
日期:2014-02-17 17:30:59生肖徽章:兔
日期:2012-05-24 19:03:36SQL极客
日期:2013-12-09 14:13:35ITPUB季度 技术新星
日期:2014-02-24 11:00:06IT宝贝
日期:2014-08-27 10:32:17马上加薪
日期:2014-08-05 09:18:33SQL数据库编程大师
日期:2016-01-13 10:30:43玉石琵琶
日期:2014-03-04 16:46:07
424#
发表于 2013-11-13 08:52 | 只看该作者
'_1_1_'
这种形式
雷个数分别为1和2,估计要害些人

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
425#
发表于 2013-11-13 08:54 | 只看该作者
demonat 发表于 2013-11-13 08:52
'_1_1_'
这种形式
雷个数分别为1和2,估计要害些人

所以题目规定了地雷数目

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
426#
发表于 2013-11-15 03:31 | 只看该作者
看了几个答案,差点脑震荡了。

使用道具 举报

回复
论坛徽章:
63
版主7段
日期:2012-05-15 15:24:11itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-10 14:34:59马上加薪
日期:2015-01-08 15:39:192015年新春福章
日期:2015-03-04 14:19:112015年新春福章
日期:2015-03-06 11:57:31
427#
发表于 2013-11-22 10:08 | 只看该作者
不错,深度已经远超管理版。

算法至上!

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
428#
发表于 2013-11-22 20:29 | 只看该作者
jlandzpa 发表于 2013-11-22 10:08
不错,深度已经远超管理版。

算法至上!

老大怎么很久不来开发版了

使用道具 举报

回复
论坛徽章:
63
版主7段
日期:2012-05-15 15:24:11itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-10 14:34:59马上加薪
日期:2015-01-08 15:39:192015年新春福章
日期:2015-03-04 14:19:112015年新春福章
日期:2015-03-06 11:57:31
429#
发表于 2013-11-23 10:38 | 只看该作者
〇〇 发表于 2013-11-22 20:29
老大怎么很久不来开发版了

开发10多年不做了,

退步了很多,还是你们牛。

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
430#
发表于 2025-3-26 12:13 | 只看该作者
deepseek的解答,我用中文提问的,不知为何出来英文答案
# SQL Solution for Minesweeper Game

Here's a SQL solution that implements the Minesweeper game by calculating the numbers around mines based on the input string:


  1. WITH
  2. -- Parse input string into a grid table with row/column coordinates
  3. grid AS (
  4.   SELECT
  5.     row_num,
  6.     col_num,
  7.     CASE WHEN SUBSTR(:v_str, (row_num-1)*(:v_width+1) + col_num, 1) = '*' THEN '*'
  8.          ELSE ' ' END AS cell
  9.   FROM (
  10.     SELECT LEVEL AS row_num FROM DUAL CONNECT BY LEVEL <= :v_height
  11.   ) rows
  12.   CROSS JOIN (
  13.     SELECT LEVEL AS col_num FROM DUAL CONNECT BY LEVEL <= :v_width
  14.   ) cols
  15. ),
  16. -- Identify all mine positions
  17. mines AS (
  18.   SELECT row_num, col_num
  19.   FROM grid
  20.   WHERE cell = '*'
  21. ),
  22. -- For each cell, count adjacent mines
  23. counts AS (
  24.   SELECT
  25.     g.row_num,
  26.     g.col_num,
  27.     CASE
  28.       WHEN g.cell = '*' THEN '*'
  29.       ELSE (
  30.         SELECT COUNT(*)
  31.         FROM mines m
  32.         WHERE m.row_num BETWEEN g.row_num-1 AND g.row_num+1
  33.           AND m.col_num BETWEEN g.col_num-1 AND g.col_num+1
  34.           AND (m.row_num != g.row_num OR m.col_num != g.col_num)
  35.           AND m.row_num BETWEEN 1 AND :v_height
  36.           AND m.col_num BETWEEN 1 AND :v_width
  37.       )
  38.     END AS value
  39.   FROM grid g
  40. ),
  41. -- Format the counts (replace 0 with space)
  42. formatted AS (
  43.   SELECT
  44.     row_num,
  45.     col_num,
  46.     CASE
  47.       WHEN value = '*' THEN '*'
  48.       WHEN value = 0 THEN ' '
  49.       ELSE TO_CHAR(value)
  50.     END AS cell
  51.   FROM counts
  52. )
  53. -- Assemble the final output string
  54. SELECT LISTAGG(line, ' ') WITHIN GROUP (ORDER BY row_num) AS result
  55. FROM (
  56.   SELECT
  57.     row_num,
  58.     LISTAGG(cell, '') WITHIN GROUP (ORDER BY col_num) AS line
  59.   FROM formatted
  60.   GROUP BY row_num
  61. );
复制代码


This solution:

1. Parses the input string into a grid table with row/column coordinates
2. Identifies all mine positions
3. For each cell, counts how many mines are in adjacent cells (including diagonals)
4. Formats the results - keeping '*' for mines, numbers for adjacent counts, and spaces for 0
5. Reassembles the grid into the output string format

The solution handles edge cases correctly (cells on borders/corners have fewer adjacent cells) and produces the required output format.

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表