【发布时间】:2020-03-20 03:56:48
【问题描述】:
我目前正在为我的 Haskell 课程做一个 h家庭作业,我似乎遇到了死胡同。
我有这个字符串列表["....................",
"....................",
"....#####...........",
"...##...##..........",
"..##.....##.........",
"..#.......#.........",
"..#...############..",
"..#...#...#......#..",
"..##..#..##......#..",
"...##.#.##.......#..",
"....#####........#..",
"......#..........#..",
"......############..",
"....................",
"...................."]
而且我必须替换每个'.'带有“*”并忽略“.”,它们是内部形状。
我目前这样做:
- 将该字符串列表转换为 元组列表,格式为 - (Row, Col, Char)
- 将 map 应用到这个新列表并使用成功替换的字符创建新列表
地图函数看起来像这样fillTuple tupleList = map(\(row, col, char) -> if notCharInShape tupleList (row,col) && char /= '#' then (row,col,'*') else (row,col,char)) tupleList
notCharInShape(暂时)看起来像这样notCharInShape tupleList (row,col) = True
我现在很难找到一种方法来“知道”给定点是否在形状内。我尝试用谷歌搜索判断给定点是在圆内还是在矩形内的数学方程,但我首先必须知道圆心的 x,y 点和圆的半径,而我不知道。
我是否遗漏了什么,或者真的没有办法判断点是否在形状内部,如果形状中心,半径是未知的?
【问题讨论】:
-
我猜你可以假设该区域的外边缘在所有形状之外并从那里开始。 (它需要一个比地图更复杂的算法。)
-
您要求一种洪水填充算法。首先将 List 转换为 Matrix 或 2D Vector 或 Array 类型可能是明智之举...如果您 google Haskell flood fill 可以找到几篇文章。
标签: list haskell replace find tuples