趣味SQL | 从围棋收官到秦楚大战的数据库SQL语言实现

news2024/9/21 2:35:30

目录

0 前言

1 秦孝公大战商鞅

2 收官类型与城池特征

3 收官顺序与攻城策略

4 秦孝公展示SQL神功

5 写在最后

欲知后事如何,想进一步了解SQL这门艺术语言的,可以订阅我的专栏数字化建设通关指南,且听下回分解。专栏 原价99,现在活动价39.9,按照阶梯式增长,直到恢复原价


0 前言


在这个万物互联的时代,创新常常源于跨界思维。人工智能的发展启示我们,掌握多领域知识并融多领域知识并融会贯会贯通,才能在看似无关的领域之间搭建桥梁,创造新的可能性。
今天,我们将穿越千年,探讨围棋与数据库的交融。围棋是古老智慧的结晶,数据库则是现代技术的象征。当两者相遇,会擦出怎样的火花?
通过模拟秦楚战争,我们将揭示围棋收官与攻城策略的微妙关联,并展示如何用SQL语言实现这一切。准备好了吗?一场跨越时空的智慧碰撞,即将开始。
 

1 秦孝公大战商鞅

公元前333年,秦孝公和商鞅下围棋,其儿子嬴驷、嬴华在一旁观战,双方大战333手,最终秦孝公败下阵来。
商鞅:大王您布局占优,只是输在了收官。主要是一处双先被我给抢了,临近终局又有一处单先您没有及时下到,又被我给逆收了,这才得以幸运小胜。
秦孝公:是啊,这两处失误着实不应该。
这些收官术语让观战的嬴驷、嬴华听的有些云里雾里,于是商鞅当即就给两位少年开启了围棋官子小课堂。
商鞅:围棋顾名思义,围地盘的棋,胜负就取决于谁的地盘围得更大。黑白双方轮番落子,不允许一方连下两手,比如我取得梦寐以求的A点,你就可以占据心心念念的B点。但是有一种特殊的情况,就是我占到A点后你却不敢去占B点,需要跟着我应一手,于是B点又落入我手。符合这种特征的A点,就是先手。
两位公子点点头,商鞅继续解释。
商鞅:不过如果一方走到A点,另一方不搭理也不会出事,可以放心地抢占他处(如B点)。此时在A点落子就被称之为后手。
嬴驷:那我们下棋是不是要判断下的是先手还是后手,优先考虑先手。
商鞅:公子聪明。先手更准确的叫单先,如A点对甲是先手,对乙却不是。
嬴华:老师,我猜到你们提到的双先啥意思,是不是无论黑白哪一方行棋,A点对他们而言都是先手,此时在A点的落子就被称之为双先。
商鞅:正确!最后还有一个逆收的概念,能猜到啥意思吗?
嬴驷:通过这个“逆”字推测,逆收会不会是A点对某一方(比如黑方)是先手,对另一方(比如白方)是后手,但是黑方没及时下A点,被白方给抢占了。
商鞅:两位公子机智过人,乃我秦之大幸啊。
两位公子:是老师引导得好。

术语  解释
单先己方的关键点,占据后对方必须立即应对,否则将遭受明显损失。
双先双方都认为紧急且必须立即应对的点,无论谁下都会迫使对方做出回应。
后手对方可以不立即应对的着手
逆收抢先占据对方的单先点,阻止对方获得先手权利。

2 收官类型与城池特征

商鞅:单先、后手、双先、逆收这四种收官类型你们搞明白了,这里我想问问两位,这四种收官手法的优先级如何,你们行棋中会考虑它们的顺序吗?
嬴驷和嬴华陷入沉思...
秦孝公:驷儿,华儿,围棋和战争很类似,父王和你们探讨接下来的战事规划,把这整明白了,围棋收官顺序也就水落石出了。
两位公子顿时来了精神。
秦孝公:吾儿,咱们秦国即将与楚国展开八大城池的争夺战,一旦能夺其大部分,则天下局势将对秦国极其有利,否则就不好说了。
嬴驷:父王,那胜算如何?
秦孝公:我和商君研究过,从围棋收官角度来看,我军必取大捷。
接着秦孝公领着众人来到地图前,他飞快的圈出这八座城池,然后继续探讨。
秦孝公:大家看这八座城池,分别是双先城池两座、单先城池两座,逆收城池两座,还有后手城池两座。
嬴华:父王,您太有趣了,还真将围棋收官搬到战场上来啊。
秦孝公:嗯,双先城池处平原地带,分别名为平原1和平原2,两处城池粮食充裕,无论秦楚占得此地都能得到充足的补给,可以此为依托,即刻攻占新的城池。
单先城池地处草原地带,分别名为草原1和草原2,两处城池地域辽阔草木茂盛,这对我们骑兵大军来说非常重要,不过对于楚军来说却并不适应。
逆收城池处于山水地带,分别名为山水1和山水2,这对于擅长水上作业山间种植的楚国人来说是天赐佳境,得到后可立即依托于此继续攻占新城。可惜我们秦军对这种环境并不适应,攻占下来需要适应和调整,无法即刻再攻城略地。
最后的两座后手城池地处高原地带,分别名为高原1和高原2,这两处无平原、无河流、无草原,谁占到此处都不能得到充分的补给,无法即刻奔赴新战场。
听秦孝公将战争与收官术语这么一结合,两位公子恍然大悟,理解的更为深刻了。同时他们都向父王表态,要上阵去和楚国决一死战。
看着两个儿子英勇的样子,秦孝公很是欣慰。

3 收官顺序与攻城策略

秦孝公:吾儿,现在双方兵力已经各自集结,大战一触即发。我军与楚军实力都很了得,无论哪一方只要拿下的城池能给其充分的补给,都能即刻抢占下一城池,而另一方只能避其锋芒。
嬴驷:那谁能占得先机,率先出击,就显得尤为重要了啊。
秦孝公:放心,秦国骑兵强大,速度所向无敌,先机在我们这。有感而发写了围棋和
两位公子面露喜色。
商鞅:两位公子,如果让你们带兵上阵,这八座城池准备依据什么顺序去攻打,最多能拿下几座城池。
秦孝公:哈哈,这和商君刚才提问的收官顺序,是同一个问题哦。
嬴驷:老师,我认为先攻双先城平原1,再灭平原2。随即将单先城草原1拿下,再进军草原2,最后攻占后手城高原1,不过高原1无法提供充足补给,我们只能修生养息,此时轮到楚国出手,会接连拿下山水1、山水2以及最后的高原2。如此一来,我军拿下八座城池中的五座,楚军则取其三。
嬴华:我觉得拿下平原1,平原2,草原1,草原2后接下来攻打的应该是山水1,而非高原1 。虽说山水1不是秦军理想之地,却是楚军的理想之地。夺取之后楚军仅剩山水2可选,即便有充足补给助其继续出征,剩下的也只有高原1和高原2这两个后手之城,若取高原1后修生养息,则高原2就落入我军之手。如此应该是秦军拿下八座城池中的六座,楚军仅取其二,整体过程如表格所示。

顺序特征城池占 方说明
1双先平原1秦   双先城池,秦国占领后有下一次连续抢占新城池的机会
2双先平原2双先城池,秦国占领后有下一次连续抢占新城池的机会
3秦先手草原1   秦先手城池,秦国占领后有下一次连续抢占新城池的机会
4秦先手草原2秦先手城池,秦国占领后有下一次连续抢占新城池的机会
5楚先手山水1楚先手城池,虽说秦国逆收抢占后该城池归秦,但是秦不能再连续抢占,接下来新城池要轮到楚抢夺了
6楚先手山水2楚先手城池,楚国有下一次连续抢占新城池的机会
7后手高原1后手城池,楚国抢占后失去下一次连续抢占新城池的机会,接下来要轮到秦了
8后手高原2秦  后手城池,最后一个城池归秦所有,再无新城池,战斗结束。

嬴驷:弟弟厉害,是哥哥错了。
嬴华:哦,老师,攻城的顺序就是双先、单先、逆手、后手。这也就围棋的收官顺序了。
商鞅:很好!这下你把围棋如何收官的问题也一并回答了,来,各位看看我画的收官的单手棋流程图,理解一下。
众人看了流程图频频点头。
商鞅:我再出一道围棋题来考考两位,行棋至此,轮白下,请问如何收官?
嬴华思考片刻,心中有了答案,随即开始边摆棋边回答商鞅
嬴华:老师,白1抢完双先后立即夺取白7单先,随后走到白11逆收,最后剩下后手官子,如此终局即可半目获胜。
商鞅点头称是,秦孝公大喜过望,当即准许赢华其随征讨大将军一同出征,此次少年出战,也为将来成就秦国第一猛将打下了铺垫。
此时的嬴驷的脸上闪烁出一丝不易察觉的笑容,却正好被商鞅看在眼里,商鞅心里一颤,似乎明白了什么。而此时的秦孝公却在准备给大家一个惊喜。

4 秦孝公展示SQL神功

秦孝公:商君、驷儿,华儿,你们会说战国许多国家的语言,不过最近一个奇遇,让我学会了一门新语言,可比你们都厉害。
商鞅:哇,恭喜大王,敢问是什么语言?
秦孝公:SQL语言,这语言可不是用来说话,而是能分析预测出各种结果,比如可以告知秦楚争夺城池的结果,甚至比这更复杂的情况也能分析。
众人一脸懵逼 ...
秦孝公拿出了他在奇遇中得来的设备,一番敲打后,开始了数据库建模和SQL语言的编写过程。
建表和插入数据

-- 创建城池表
CREATE TABLE cities (
    id NUMBER(5) PRIMARY KEY,
    name VARCHAR2(50),
    type VARCHAR2(10)
);
-- 插入城池数据
INSERT INTO cities (id, name, type) VALUES (1, '平原1', '双先');
INSERT INTO cities (id, name, type) VALUES (2, '平原2', '双先');
INSERT INTO cities (id, name, type) VALUES (3, '草原1', '秦先手');
INSERT INTO cities (id, name, type) VALUES (4, '草原2', '秦先手');
INSERT INTO cities (id, name, type) VALUES (5, '山水1', '楚先手');
INSERT INTO cities (id, name, type) VALUES (6, '山水2', '楚先手');
INSERT INTO cities (id, name, type) VALUES (7, '高原1', '后手');
INSERT INTO cities (id, name, type) VALUES (8, '高原2', '后手');


编写SQL如下

WITH type_counts AS (
    SELECT type, COUNT(*) AS type_count
    FROM cities
    GROUP BY type
),
capture_process AS (
    SELECT
        c.id, c.name, c.type,
CASE
            WHEN c.type = '双先' THEN '秦'
            WHEN c.type = '秦先手' THEN '秦'
            WHEN c.type = '楚先手' THEN
                CASE
                    WHEN ROW_NUMBER() OVER (PARTITION BY c.type ORDER BY c.id) = 1 THEN '秦'
                    ELSE '楚'
                END
            WHEN c.type = '后手' THEN
                CASE
                    WHEN ROW_NUMBER() OVER (PARTITION BY c.type ORDER BY c.id) <= FLOOR(tc.type_count / 2) THEN '楚'
                    ELSE '秦'
                END
        END AS captured_by
    FROM cities c , type_counts tc

where  c.type = tc.type
)
SELECT
    captured_by AS category,
    COUNT(*) AS count,
    LISTAGG(name, ', ') WITHIN GROUP (ORDER BY id) AS cities
FROM capture_process
GROUP BY captured_by
;

关键点说明:
  a. 双先和秦先手:直接归秦国所有。
  b. 楚先手
     使用 ROW_NUMBER() 函数为每个楚先手城池分配一个序号。
     只有第一个(序号为1)的楚先手城池被秦国逆收,其余全部归楚国。
     这确保了无论有多少个楚先手城池,秦国只能逆收一个。
  c. 后手
     同样使用 ROW_NUMBER() 函数分配序号。
     使用 FLOOR(tc.type_count / 2) 判断各自应该占领的城池数量。   

执行这个查询,结果是:   

category          COUNT              cities
楚                     2             山水2, 高原1
秦                     6             平原1, 平原2, 草原1, 草原2, 山水1, 高原2

显示秦占领6座城池,而楚仅占领了2座,验证了嬴华的分析思路是正确的。
众人震惊不已,连呼:SQL语言好厉害,此乃天助大秦一统天下也

~~本集完~~

5 写在最后

最近经常接触围棋,忽然有灵感,就用古代战争做比喻,粗浅写一个围棋官子和数据库结合的文章,顺便普及普及围棋,兄弟们多多指点。文中SQL的逻辑是假设这按这个收官顺序规则去抢夺城池,套规则进去的,如果是能分析出什么顺序组合,才更有意义,大家一起讨论讨论,如果考虑大小就会很复杂,还有你我都可以不理双先的情况,考虑收益与损失比就更复杂了。

欲知后事如何,想进一步了解SQL这门艺术语言的,可以订阅我的专栏数字化建设通关指南,且听下回分解。

专栏 原价99,现在活动价39.9,按照阶梯式增长,直到恢复原价

数字化建设通关指南

主要内容:
(1)SQL进阶实战技巧
可以参考如下教程,具体链接如下

SQL很简单,可你却写不好?也许这才是SQL最好的教程

上面链接中的文章及技巧会不定期更新。

(2)数仓建模实战技巧和个人心得
       1)新人入职新公司后应如何快速了解业务?

       2)以业务视角看宽表化建设?

       3)  维度建模 or 关系型建模?

       4)业务模型与数据模型有什么区别?业务阶段的模型该如何建设?

       5)业务指标体系该如何建设?指标体系该如何维护?指标平台应如何建设?指标体系                           该由谁来搭建?

       6)如何优雅设计DWS层?DWS层模型好坏该如何评价?

       7)指标发生异常,该如何排查?应从哪些方面入手寻找问题点?

       8) 数据架构的选择,mpp or hadoop?

       9)数仓团队应如何体现自己的业务价值,讲好数据故事?

       10)BI与大数据有什么关系?BI与信息化、数字化之间有什么关系?BI与报表之间的关                          系?

       11)数据部门如何与业务部门沟通,并规划指引业务需求?

文章不限于以上内容,有新的想法也会及时更新到该专栏。

具体专栏链接如下:

数字化建设通关指南_莫叫石榴姐的博客-CSDN博客

原文链接:围棋收官与SQL - Oracle开发 - ITPUB论坛-专业的IT技术社区

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2134559.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MacBook上怎么查找历史复制记录?

你是否经常遇到这样的情况:做内容或方案时,需要用到素材就去找,找到后回来粘贴,然后再去找,再回来粘贴?这个过程是不是很繁琐? 那么找到的素材要不要保存下来呢?每个都存成文件似乎太麻烦了。但如果不单独保存,过两天想再利用又找不到了,怎么办? 在网上看到的一段好文案、…

解锁头条创作新纪元:文字游侠AI工具助你解放双手 ,一键生成爆文!

如今&#xff0c;自媒体创作早已不再是专业人士的专属领地&#xff0c;而是成为了普通人轻创首选的新途径。然而&#xff0c;对于许多想要通过自媒体创业的朋友来说&#xff0c;创作内容的难度和耗时却成为了不可忽视的障碍。 今天&#xff0c;为大家揭秘一款颠覆性的AI写作神…

【附源码】用Python开发一个音乐下载工具,并打包EXE文件,所有音乐都能搜索下载!

现在听个歌&#xff0c;不是要这就是要那&#xff0c;乱七八糟的&#xff0c;下软件都下不赢。 于是决定加班熬夜来做一个&#xff0c;想怎么听就怎么听&#xff0c;大家自己看到就好&#xff0c;悄悄用&#xff0c;别告诉别人哈~ 好了不闲聊&#xff0c;开整&#xff01; 首先…

新书速览|循序渐进Vue.js 3.x前端开发实践

《循序渐进Vue.js 3.x前端开发实践》 本书内容 《循序渐进Vue.js 3.x前端开发实践》由一位拥有丰富前端开发经验的架构师撰写&#xff0c;旨在通过详尽的理论知识讲解和丰富的实践练习&#xff0c;帮助初学者深入掌握Vue.js框架&#xff0c;并能够独立开发商业级别的Web应用程…

【题解】CF1993D

目录 翻译思路总代码 翻译 原题链接 思路 容易发现&#xff0c;无论如何操作&#xff0c;最后剩下的数量是一定的&#xff0c;记剩下的数组中中位数的位置为 m m m&#xff08;从1开始记&#xff09;&#xff0c;注意不能将数组删空。有&#xff1a; 剩余数组的长度 L ( n …

windows@移除资源管理器中的网盘等软件的图标@一键移除方案

文章目录 abstract设置方案移除注册表(不推荐单独使用)设置访问权限GUI设置powershell方案 利用powershell设置相应注册表(一键执行脚本)移除所有用户对指定注册表路径的访问权限移除所有权限但保留管理员&#x1f47a; abstract 国内的云盘等软件比如百度网盘,夸克网盘,wps等…

轻量级模型汇总解读——涉及MobileNet、ShuffleNet、GhostNet、EfficientNet、NasNet、轻量transformer

前言&#xff1a;最近需要将模型移植到瑞芯微rv1106上运行&#xff0c;相比于rv1126 NPU的2.0T算力&#xff0c;它的算力更小&#xff0c;只支持0.5T的算力&#xff0c;而且rv1106目前只支持int8量化&#xff0c;为了保证模型推理在满足精度要求的情况下&#xff0c;保证时间尽…

基于C++实现(控制台)停车场管理系统

停车场管理系统设计报告 1 需求分析 1.1问题描述 停车场内只有一个可停放 n 辆汽车的狭长通道&#xff0c;且只有一个大门可供汽车进出。 汽车在停车场内按车辆到达时间的先后顺序&#xff0c;依次由北向南排列&#xff08;大门在最南端&#xff0c;最先到达的第一辆车停放…

Python_两个jpg图片文件名称互换

项目场景 处理Adobe Photoshop导出的两个切片的顺序错误问题 小编在进行图片切片处理的时候&#xff0c;发现用PS导出的切片顺序错误&#xff0c;例如用PS导出的切片分别为test_01.jpg&#xff0c;test_02.jpg&#xff0c;但实际的使用需求是将两个图片的顺序调换&#xff0c…

IC开发——Verilog简明教程

1. 基础概念 1.1. 逻辑值 逻辑0&#xff0c;低电平&#xff0c;对应电路中接地GND。 逻辑1&#xff0c;高电平&#xff0c;对应电路中的电源VCC。 逻辑Z&#xff0c;高阻态&#xff0c;对应电路的悬空。 逻辑X&#xff0c;未知态&#xff0c;数据仿真中可能存在&#xff0c;如…

Delphi Web和Web服务开发目前有哪些选择

Delphi Web和Web服务开发目前有哪些选择 Delphi Web和Web服务开发目前有以下几个选择&#xff1a; Delphi MVC Framework&#xff08;https://github.com/delphimvcframework/delphimvcframework&#xff09;&#xff1a;这是一个开源的Delphi Web框架&#xff0c;基于MVC&am…

小程序uniapp关闭手势返回操作

需求&#xff1a;进入当前页面后&#xff0c;无法返回其他页面&#xff0c;禁止所有返回操作&#xff08;手势返回、左上角返回按钮等&#xff09; 解决&#xff1a; 方法一&#xff1a;wx.enableAlertBeforeUnload wx.enableAlertBeforeUnload 在onLoad里调用&#xff1a; on…

-isystem isystem 实验记录

1&#xff0c;isystem 的理论 2&#xff0c;实验方案 $ tree . ├── inc111 │ └── test.h ├── inc222 │ └── test.h └── src ├── a.out └── hello.c inc111/test.h: #pragma once#define NUM 111 inc222/test.h #pragma once#define N…

2024年9月中国数据库排行榜:openGauss系多点开花,根社区优势明显

在墨天轮发布的9月中国数据库流行度排行榜中&#xff0c;中国数据库产业格局进一步聚集刷新&#xff0c;呈现出3大显著特征&#xff1a; 开源势力力争上游显优势领先潮流&#xff1b;openGauss 开源根社区优势明显&#xff1b;阿里华为两极鼎立云上云下各争先&#xff1b; 开…

2024年第二届《英语世界》杯全国大学生英语听力大赛

下周开考&#xff01; 一、主办单位 商务印书馆《英语世界》杂志社 二、时间安排 赛事报名时间&#xff1a;即日起-2024年11月15日 正式比赛阶段&#xff1a;第一场&#xff1a;2024年9月22日10:00-22:00 第二场&#xff1a;2024年10月27日10:00-22:00 第三场&#xff1…

安装2024最新版Android Studio 最详细教程(带图展示)

一、安装JDK &#xff08;1&#xff09;首先在除C盘以外的盘建立文件夹&#xff0c;分别保存软件位置&#xff0c;JDK位置与SDK位置&#xff0c; 特别注意&#xff1a;所有文件名中不要出现空格&#xff0c;而且每个文件夹都是为空的状态 这里我是在D盘中操作。 &#xff0…

综合型医院适合什么样的数据摆渡方式,才能服务与安全兼顾?

综合型医院&#xff0c;是提供全面医疗服务的综合型医院。综合型医院的服务对象广泛&#xff0c;包括儿童、成人、老年人等各年龄段的人群&#xff0c;以及患有各种疾病的患者。它们通过提供全面的医疗服务&#xff0c;保障人民群众的健康需求&#xff0c;是医疗卫生事业的重要…

IP-adapter masking

https://github.com/huggingface/diffusers/issues/6802https://github.com/huggingface/diffusers/issues/6802

Java后端编程语言进阶篇

第一章 函数式接口 函数式接口是Java 8中引入的一个新特性&#xff0c;只包含一个抽象方法的接口。 函数式接口可以使用Lambda表达式来实现&#xff0c;从而实现函数式编程的特性。 使用 FunctionalInterface标识接口是函数式接口&#xff0c;编译器才会检查接口是否符合函数…

linux-L3-linux 复制文件

linux 中要将文件file1.txt复制到目录dir中&#xff0c;可以使用以下命令 cp file1.txt dir/复制文件 cp /path/to/source/file /path/to/destination移动 mv /path/to/source/file /path/to/destination复制文件夹内的文件 cp -a /path/to/source/file /path/to/destinati…