chiark
/
gitweb
/
~mdw
/
wordchain
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
more stuff found lying about
[wordchain]
/
chain.go
diff --git
a/chain.go
b/chain.go
index 8f1b450889d13d4c744558b8df806632a3c3e2f3..2d6d2c2f74f4eea7a2c76626017c4b7d6ea43730 100644
(file)
--- a/
chain.go
+++ b/
chain.go
@@
-43,29
+43,44
@@
func main() {
}
max := 0
}
max := 0
+ var winners *wordnode = nil; winners_tail := &winners
for word, node := range words {
wlen := len(word)
if wlen <= 1 { continue }
parent := words[word[:wlen - 1]]
for word, node := range words {
wlen := len(word)
if wlen <= 1 { continue }
parent := words[word[:wlen - 1]]
+ if parent == nil { continue }
node.up = parent
node.up = parent
- for parent != nil {
- nlen := node.len + 1
- plen := parent.len
- if nlen < plen {
+ nlen := node.len
+ for {
+ if parent == nil {
+ if nlen >= max {
+ if nlen > max {
+ max = nlen
+ *winners_tail = nil
+ winners_tail = &winners
+ }
+ *winners_tail = node
+ winners_tail = &node.right
+ }
break
break
- } else if nlen > plen {
- parent.down = nil
- parent.len = nlen
- if nlen > max { max = nlen }
}
}
- if parent.down != node {
+ nlen += 1; plen := parent.len
+ if plen > nlen {
+ break
+ } else if plen == nlen {
node.right = parent.down; parent.down = node
node.right = parent.down; parent.down = node
+ break
}
}
+ parent.down = node; node.right = nil
+ parent.len = nlen
node = parent; parent = node.up
}
}
node = parent; parent = node.up
}
}
- for _, node := range words {
- if node.len == max { print_chain(node); fmt.Printf("\n") }
+ *winners_tail = nil
+ var next *wordnode
+ for node := winners; node != nil; node = next {
+ next = node.right; node.right = nil
+ print_chain(node); fmt.Printf("\n")
}
}
}
}