AI五子棋 第六步

恭喜你到达第六步!

你已经成功实现了公钥体系最为关键的部分。现在服务器相信你就是你了,下面开始你的战斗。

五子棋的棋盘有15×15个交点,一共有225个交点,我们可以在每一个交点上放置棋子。方便起见,我们为每一个交点起一个名字。

在上面的图上,我们为每一行标上一个字母从A到O,每一列标上一个数字,从1到15。我们用行和列的标号表示一个交点,比如图上的白棋的坐标是G7

这种编码策略有一个问题,它是变长的,比如左上角的交点的坐标是A1有2个字符,而右上角的交点的坐标是A15有3个字符。我们把每一列也标上一个字母从A到O,这样不管是哪个交点的坐标都是两个字符了。左上角的交点的坐标是AA、右上角的交点的坐标是AO、那个白棋的坐标是GG

游戏开始前,棋盘是空的,根据规则,黑方先落子,每落一子我们就记录一下它的坐标,最后就会得到类似这样的字符串

HHJHKGIILFHJJFJJKFIFKEKHIGGILD

它对应的棋局是这样的:

你可以逐步跟踪它的落子顺序。

注意这里的标号和游戏中是不同的。给考生增加困扰是所有出题人的本意,才不承认是犯了错呢!(内心OS:看图片 ... 这出题大大难不成是一位 盐甜兼备美少女?

为了保证你和服务器使用相同的棋盘约定,我们把上面的坐标形式转换为图形形式,我们用.表示空白位置,x表示黑棋,o表示白棋。那么上面的坐标表示就是这样的:

  • ...............

    ...............

    ...............

    ...............

    ...............

    ...............

    ........o......

    .......x.o.....

    .....ox.o......

    .....x.o.o.....

    ....xxxo.......

    ...x.x.........

    ...............

    ...............

    ...............

待处理信息

{"is_success": true, "questions": "ggffhggfhffgiefhfeheidehdidhghegcidfgiefcfeeeied"}

任务 6

实现从坐标表示到图形表示的算法,通过服务器的检验。

访问http://2**.2**.**.1**:9012/step_06 服务器会给你一个坐标表示,请给出每一步的棋盘图形表示,如上面的例子共有15步,其中第1步:

...............

...............

...............

...............

...............

...............

...............

.......x.......

...............

...............

...............

...............

...............

...............

...............

第2步:

...............

...............

...............

...............

...............

...............

...............

.......x.......

...............

.......o.......

...............

...............

...............

...............

...............

第3步:

...............

...............

...............

...............

...............

...............

...............

.......x.......

...............

.......o.......

......x........

...............

...............

...............

...............

第4步:

...............

...............

...............

...............

...............

...............

...............

.......x.......

........o......

.......o.......

......x........

...............

...............

...............

...............

第5步:

...............

...............

...............

...............

...............

...............

...............

.......x.......

........o......

.......o.......

......x........

.....x.........

...............

...............

...............

等等等等。

请将每一步的棋盘图形表示,按顺序写入字段ans,每步用逗号,隔开,图形表示中换行可省略。结果提交到http://2**.2**.**.1**:9012/step_06

Python程序实现

import requests as re

def getIndex(coords):
"""coords y x"""
# 0行 [0]='.' --- [14]='.' [15]='\n'
# 1行 [16]='.' --- [30]='.' [31]='\n'
# 2行 [32]='.' --- [46]='.' [47]='\n'
# 15行 [240]='.' --- [254]='.' [255]='\n'
return int((ord(coords[0]) - ord('a'))*16 + (ord(coords[1]) - ord('a'))) getHtml = re.get("http://2**.2**.**.1**:9012/step_06/") testOrder = getHtml.json()['questions'] board = '' # 棋板
for i in range(0,15):
board += '...............' + '\n'
step = 0 # 步数 用于判断黑白 黑方先走
answer = '' for i in range(0, len(testOrder), 2): # i = 0 2 4 6 8 注意Python的左闭右开规则 index = getIndex(testOrder[i:i+2]) # Python不允许直接修改字符串 只能用拼接的方法
if (step % 2) == 0:
board = board[0: index] + 'x' + board[index + 1:]
else:
board = board[0: index] + 'o' + board[index + 1:]
step += 1
answer += board + ',' param = {
'ans' : answer[:-1]
} getHtml = re.get('http://2**.2**.**.1**:9012/step_06', params=param)
print(getHtml.text)

直接运行即可获得答案偶。

解题tips

类似打星星。

为什么用一维数组实现一个棋盘呢?

日后如果我们进入机器学习,或者数据处理的时候。对于单个样本的数据总是要向量化的,例如手写数字数据集,一个20×20的图片,被转化为1×400的样本数据进行训练。训练完成后还要对1×400的像素进行数据填充,补充内边距进行数据显示,变成一个1×420,或者其他形式,诸如此类。然后再将修改过的数据进行可视化显示,使用一维的一些算法,变成矩阵二维形式。

一维的算法有些难度。但一维算法更加锻炼思维,你需要考虑到更多,同时也对日后更有帮助。

当然你也可以使用二维的数组进行棋盘表示……

因为程序功能简单,这里就不重构代码,把相关功能独立变成函数了。有需求的同志们可以自己试一试。

加油吧少年,根据这个博客你也可以写出一个相对智能的五子棋程序,甚至更强的AI算法!

文章会随时改动,注意到博客里去看。一些网站会爬取本文章,但是可能会有出入。

https://www.cnblogs.com/asmurmur/

AI五子棋_06 坐标表示到图形表示的算法 Python实现的更多相关文章

  1. AI五子棋需求规格说明书

    AI-Gobang AI五子棋小程序 github地址:https://github.com/holidaysss/AI-Gobang 程序简介 AlphaGo Zero在世界舞台上取得的巨大成功体现 ...

  2. 人机ai五子棋 ——五子棋AI算法之Java实现

    人机ai五子棋 下载:chess.jar (可直接运行) 源码:https://github.com/xcr1234/chess 其实机器博弈最重要的就是打分,分数也就是权重,把棋子下到分数大的地方, ...

  3. 基于均值坐标(Mean-Value Coordinates)的图像融合算法的优化实现

    目录 1. 概述 2. 实现 2.1. 原理 2.2. 核心代码 2.3. 第二种优化 3. 结果 1. 概述 我在之前的文章<基于均值坐标(Mean-Value Coordinates)的图像 ...

  4. 浅析基本AI五子棋算法

    五子棋是所有棋类博弈中比较简单的了,这里介绍的也只是一种非常基本的AI策略.其实,包括之前的AI贪吃蛇,感觉这两个AI其实体现的都是一种建模思想,把一个现实中的问题模型化,抽象化,得到其一般特征,再设 ...

  5. AI五子棋第四周——接近尾声

    欢乐时光过得特别快~ 真是快乐的一周,就是项目进展几乎纹丝不动. 燃尽图?? (添加了背景音乐,找到了一个很好的音乐素材网站!) (添加了俩图标:重开,和音乐.) (调了一下前后端通讯,基本能通话了, ...

  6. [17] 楼梯(Stairs)图形的生成算法

    感觉这图形怎么看怎么像搓衣板. 顶点数据的生成 bool YfBuildStairsVertices ( Yreal width, Yreal length, Yreal height, Yuint ...

  7. 基于均值坐标(Mean-Value Coordinates)的图像融合算法的具体实现

    目录 1. 概述 2. 实现 2.1. 准备 2.2. 核心 2.2.1. 均值坐标(Mean-Value Coordinates) 2.2.2. ROI边界栅格化 2.2.3. 核心实现 2.2.4 ...

  8. python的re模块一些方法 && Tkinter图形界面设计 && 终止python运行函数 && python读写文件 && python一旦给字符串赋值就不能单独改变某个字符,除非重新给变量赋值

    Tkinter图形界面设计见:https://www.cnblogs.com/pywjh/p/9527828.html#radiobutton 终止python运行函数: 采用sys.exit(0)正 ...

  9. 19 图形用户界面编程 - 《Python 核心编程》

  10. [20] 鼓状物(Drum)图形的生成算法

    顶点数据的生成 bool YfBuildDrumVertices ( Yreal radius, Yreal assistRadius, Yuint slices, Yuint stacks, YeO ...

随机推荐

  1. maven配置阿里云镜像与修改默认仓库地址

    1.背景 通常来说maven的默认镜像很慢,我们需要一个国内镜像,拉取jar包的时候从国内下载, 当然阿里云镜像是很好的一个候选 2.安装 官网下载一个maven解压即可使用 3.修改配置 第一步,找 ...

  2. 教程 | 使用 Apache SeaTunnel 同步本地文件到阿里云 OSS

    一直以来,大数据量一直是爆炸性增长,每天几十 TB 的数据增量已经非常常见,但云存储相对来说还是不便宜的.众多云上的大数据用户特别希望可以非常简单快速的将文件移动到更实惠的 S3.OSS 上进行保存, ...

  3. Linux系统内核的作用

      Linux系统内核在操作系统中扮演着至关重要的角色,其作用主要体现在以下几个方面: 进程管理:内核负责创建和销毁进程,这是操作系统对计算机上正在运行的程序进行管理的核心部分.内核通过调度器对进程进 ...

  4. SMU Summer 2023 Contest Round 13

    SMU Summer 2023 Contest Round 13 A. Review Site 我们总是可以把差评放到另一个服务器,好评和中立放另一个,这样最多投票数就是好评与中立数 #include ...

  5. grpc断路器之hystrix

    上一章介绍了grpc断路器sentinel, grpc断路器之sentinel 但是由于公司线上系统用的告警与监控组件是prometheus,而sentinel暂时还没有集成prometheus,所以 ...

  6. RealNet:从数据生成到模型训练的最新工业异常检测 | CVPR 2024

    论文提出了一种创新的自监督异常检测框架RealNet,集成了三个核心组件:可控制强度的扩散异常合成(SDAS).异常感知特征选择(AFS)和重构残差选择(RRS).这些组件通过协同作用,使RealNe ...

  7. 全志TinyVision芯片文章汇总

    全志TinyVision芯片 TinyVision开发交流QQ群:821628986 文章目录汇总 教程共计14章,下面是章节汇总: 第0章_TinyVision套件简述 第1章_源码工具文档手册 第 ...

  8. Python新手爬虫四:爬取视频

    老样子,先上最后成功源码(在D盘下创建'好看视频'文件夹,直接运行即可获取视频): import sys import re,os import requests from you_get impor ...

  9. C# 泛型对象和DataTable之间的相互转换

    应用场景 实际开发场景下会经常出现DataTable和List对象需要相互转换的时候,通过方法提取避免重复造轮子 List转换成DataTable 基本思路: 向DataTable里面添加新的数据内容 ...

  10. 上架难、买量贵?即构 Web 端 1v1 方案全力加速泛娱乐出海

    1v1 视频社交以其功能简洁.互动性强.匹配效率高等特点,在陌生人社交玩法中饱受用户欢迎,平台仅需让两个用户通过匹配.选择等形式连通后,用户即可在房内进行 1v1 视频社交,且在社交的同时又极具私密性 ...