我正在开发一个名为
Boggle
的类,其中包含以下两个类端方法:
search: board for: words
| result visited trie |
result := Dictionary new.
trie := CTTrie new.
words do: [:word | trie at: word put: word].
visited := (1 to: board size) collect: [:i |
(1 to: board first size) collect: [:j | false].
].
board doWithIndex: [:row :i |
row doWithIndex: [:char :j |
self
searchUtil: board
visited: visited
i: i
j: j
prefix: ''
final: Array new
result: result
trie: trie.
].
].
^result
searchUtil: board visited: visited i: i j: j prefix: prefix final: final result: result trie: trie
| newPrefix newFinal|
(visited at: i) at: j put: true.
newPrefix := prefix, ((board at: i) at: j) asString.
newFinal := final copyWith: i @ j.
Transcript show: '1'; cr.
Transcript show: 'newPrefix: ', newPrefix; cr.
Transcript show: 'newFinal: ', newFinal; cr.
(trie contains: newPrefix) ifTrue: [
result at: newPrefix put: newFinal.
].
Transcript show: '2'; cr.
Transcript show: 'result: ', result; cr.
(i - 1) to: (i + 1) do: [ :row |
(j - 1) to: (j + 1) do: [ :col |
((row between: 1 and: board size) and: [
col between: 1 and: (board at: row) size]) ifTrue: [
((visited at: row) at: col) ifFalse: [
Transcript show: '3'; cr.
self
searchUtil: board
visited: visited
i: row
j: col
prefix: newPrefix
final: newFinal
result: result
trie: trie ] ] ] ].
(visited at: i) at: j put: false
输入:
此方法的第一个参数是
board
,表示为元素为字符的数组的静态数组。例如,#(#($e $a) #($s $t))
。第二个参数是一个字符串数组 (words
),表示合法单词列表,例如#(‘east’ ‘ate’ ‘john’ … )
等等。
输出:
search:for:
方法将返回一个字典。键将是该方法找到的单词,每个键的值将是一个点数组。每个点对应于棋盘中组成单词的相应字符的 2D 索引。
当我用下面的示例测试方法时,
Transcript clear.
words := #('ea' 'eat' 'ate' 'east' 'sat' 'hello' 'girl' 'guy').
board := #( #( $e $a ) #( $s $t ) ).
result := Dictionary new.
result := Boggle search: board for: words.
Transcript show: result; cr.
我收到此错误:
显然问题在于
newFinal
数组未更新。 newFinal := final copyWith: i @ j
更新newFinal
数组的值,search:for:
方法中final的初始值已设置为Array new
,这会产生一个空数组。
实际输出应该是
a Dictionary('ea'-\>#((1@1).(1@2)) 'eat'-\>#((1@1).(1@2).(2.2)) ...)
等等。
这就是我所能弄清楚的。非常感谢任何解决此问题的帮助。预先感谢。
从你的堆栈看来,问题出在
,
运算符的参数上(你打算将其作为字符串连接。我怀疑问题出在这一行:
Transcript show: 'result: ', result; cr.
如果
result
不是字符串,那么它将尝试将字典存储到字符串中,给出“不正确的存储”错误。