插入棋谱模块测试

与五子棋相关的技术文章……

Moderator: heihei

User avatar
xsir317
Posts: 31
Joined: 2019-09-27 16:29
Location: 包邮区
Contact:

Re: 插入棋谱模块测试

Post by xsir317 » 2019-09-28 9:12

doublecheck 那里,也不用嵌套循环

只需要把apos 和achars 存个字典, 对照一下就是了
存一个

Code: Select all

{
	"h8" : 1,
	"h9" : 1
}
这样的数据结构,achars 遍历的时候只要同样坐标被标1了,那就是重复了。

另,除了检查apos 与 achars 是否有重复坐标,也需要检查apos和apos自身。 achars也是。 更好的做法是把他们放一起遍历。 每一个坐标都对照一下字典。
http://ku10.com/ <-- 欢迎来稿
User avatar
wind23
Site Admin
Posts: 50
Joined: 2019-09-24 23:21
Contact:

Re: 插入棋谱模块测试

Post by wind23 » 2019-09-28 10:41

xsir317 wrote:
2019-09-28 9:04

Code: Select all

function convertpos(pos) {
  var ret = '';
  var tmp_str = '';//临时变量,这个也可以改为坐标记录
  for (i = 0; i < pos.length; i ++) {
    //这里检查每个字符的合法性,然后去做转换
	if(pos[i] >= 'a' && pos[i] <= 'o') //是字母
	{
		if(tmp_str)
		{
			ret += convertsinglepos(tmp_str);
		}
		tmp_str = pos[i];
	}
	else //是数字
	{
		tmp_str += pos[i];
	}
  }
  ret += convertsinglepos(tmp_str);
  return ret;
}


convertpos 其实就是负责做个切割。
切割就是遍历一遍字符串,如果遇到字母,就把前面那段扔去转换;
如果遇到数字,就往后拼。

一遍遍历足够了,不用正则一遍,再遍历3次。
哈哈,昨天只想着尽快实现功能,基本没想过怎么写是最优的,反正这点儿运算量对计算机都是小意思 :lol: 等有时间优化一下
User avatar
wind23
Site Admin
Posts: 50
Joined: 2019-09-24 23:21
Contact:

Re: 插入棋谱模块测试

Post by wind23 » 2019-09-28 10:44

Li Yi wrote:
2019-09-28 9:10
如何区分要在h1写11和在h11写1的问题
目前只支持插入一位数字 :shock:
User avatar
wind23
Site Admin
Posts: 50
Joined: 2019-09-24 23:21
Contact:

Re: 插入棋谱模块测试

Post by wind23 » 2019-09-28 10:48

其实我也很少写js,现在生疏的很 :geek:
User avatar
wind23
Site Admin
Posts: 50
Joined: 2019-09-24 23:21
Contact:

Re: 插入棋谱模块测试

Post by wind23 » 2019-09-28 10:54

sun wrote:
2019-09-28 7:47
小写标注
我刚才想了一下,小写字母理论上也应该能实现,只不过要换一种写法,另外代码可读性会变差
User avatar
xsir317
Posts: 31
Joined: 2019-09-27 16:29
Location: 包邮区
Contact:

Re: 插入棋谱模块测试

Post by xsir317 » 2019-09-28 11:05

wind23 wrote:
2019-09-28 10:54
sun wrote:
2019-09-28 7:47
小写标注
我刚才想了一下,小写字母理论上也应该能实现,只不过要换一种写法,另外代码可读性会变差
或者你定一个分隔符,或者直接用json存结构化数据如何? 字符串一旦复杂了,解析就很烦,不如直接json。。。

js 对json 的原生支持非常健全。
http://ku10.com/ <-- 欢迎来稿
User avatar
xsir317
Posts: 31
Joined: 2019-09-27 16:29
Location: 包邮区
Contact:

Re: 插入棋谱模块测试

Post by xsir317 » 2019-09-28 11:08

wind23 wrote:
2019-09-28 10:41
xsir317 wrote:
2019-09-28 9:04

Code: Select all

function convertpos(pos) {
  var ret = '';
  var tmp_str = '';//临时变量,这个也可以改为坐标记录
  for (i = 0; i < pos.length; i ++) {
    //这里检查每个字符的合法性,然后去做转换
	if(pos[i] >= 'a' && pos[i] <= 'o') //是字母
	{
		if(tmp_str)
		{
			ret += convertsinglepos(tmp_str);
		}
		tmp_str = pos[i];
	}
	else //是数字
	{
		tmp_str += pos[i];
	}
  }
  ret += convertsinglepos(tmp_str);
  return ret;
}


convertpos 其实就是负责做个切割。
切割就是遍历一遍字符串,如果遇到字母,就把前面那段扔去转换;
如果遇到数字,就往后拼。

一遍遍历足够了,不用正则一遍,再遍历3次。
哈哈,昨天只想着尽快实现功能,基本没想过怎么写是最优的,反正这点儿运算量对计算机都是小意思 :lol: 等有时间优化一下
帖子里这些代码片段应该是可以运行的, 循环体里面加点 if 检测应该直接能用了。
http://ku10.com/ <-- 欢迎来稿
User avatar
wind23
Site Admin
Posts: 50
Joined: 2019-09-24 23:21
Contact:

Re: 插入棋谱模块测试

Post by wind23 » 2019-09-28 11:11

xsir317 wrote:
2019-09-28 11:05
wind23 wrote:
2019-09-28 10:54
sun wrote:
2019-09-28 7:47
小写标注
我刚才想了一下,小写字母理论上也应该能实现,只不过要换一种写法,另外代码可读性会变差
或者你定一个分隔符,或者直接用json存结构化数据如何? 字符串一旦复杂了,解析就很烦,不如直接json。。。

js 对json 的原生支持非常健全。
json可能对用户不太友好,不过加分隔符是个好想法
User avatar
heihei
Posts: 19
Joined: 2019-09-26 14:24

Re: 插入棋谱模块测试

Post by heihei » 2019-09-28 11:20

User avatar
xsir317
Posts: 31
Joined: 2019-09-27 16:29
Location: 包邮区
Contact:

Re: 插入棋谱模块测试

Post by xsir317 » 2019-09-28 13:01

嗯,我以前那个版本不加分隔符纯粹是因为我那个是定长的, 变长的字符串要考虑到消除字符串歧义,以及方便解析的考虑,甚至包括方便阅读, 最好还是加上一个明确的分隔符比较好。

然后也得有个工具页面或者小插件来让用户摆棋生成代码。手写的确是有点儿麻烦。
http://ku10.com/ <-- 欢迎来稿
Post Reply