从围棋收官到秦楚大战的数据库SQL实现
前言
在这个万物互联的时代,创新常常源于跨界思维。人工智能的发展启示我们,掌握多领域知识并融会贯通,才能在看似无关的领域之间搭建桥梁,创造新的可能性。
今天,我们将穿越千年,探讨围棋与数据库的交融。围棋是古老智慧的结晶,数据库则是现代技术的象征。当两者相遇,会擦出怎样的火花?
通过模拟秦楚战争,我们将揭示围棋收官与攻城策略的微妙关联,并展示如何用SQL语言实现这一切。准备好了吗?一场跨越时空的智慧碰撞,即将开始。
1
秦孝公大战商鞅
公元前333年,秦孝公和商鞅下围棋,其儿子嬴驷、嬴华在一旁观战,双方大战333手,最终秦孝公败下阵来。
秦孝公:是啊,这两处失误着实不应该。
这些收官术语让观战的嬴驷、嬴华听的有些云里雾里,于是商鞅当即就给两位少年开启了围棋官子小课堂。
两位公子点点头,商鞅继续解释。
商鞅:不过如果一方走到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神功
-- 创建城池表
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) 判断各自应该占领的城池数量。
执行这个查询,结果是:
小朋友都能懂的人工智能⓷ -惊世骇俗的狗故事 小朋友都能懂的人工智能⓸ -狗大师的修仙之路
小朋友都能懂的人工智能⓺ -注意,句中高能!
小朋友都能懂的人工智能⑪一滴墨汁成就一代画师
小朋友都能懂的人工智能⑫从画师到视频大师
小朋友都能懂的人工智能⑬AI时代,未来就业走势
数据库二十年目睹之怪现状⓵ 太!多!了!
数据库二十年目睹之怪现状⓶ 测评现形记
数据库二十年目睹之怪现状⓷ 隐蔽的套壳
数据库二十年目睹之怪现状⓸ 小黑入狱记
从12306改签困惑到数据库设计——高铁随记
从DTCC专场变换窥探数据库风云
预告:《超融合数据库》即将出版。