new files
This commit is contained in:
parent
3af7344581
commit
86c034bb8b
1364 changed files with 21352 additions and 0 deletions
57
Task/Ordered-words/Go/ordered-words.go
Normal file
57
Task/Ordered-words/Go/ordered-words.go
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// read into memory in one chunk
|
||||
b, err := ioutil.ReadFile("unixdict.txt")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
// split at line ends
|
||||
bss := bytes.Split(b, []byte{'\n'})
|
||||
|
||||
// accumulate result
|
||||
var longest int
|
||||
var list [][]byte
|
||||
for _, bs := range bss {
|
||||
// don't bother with words shorter than
|
||||
// our current longest ordered word
|
||||
if len(bs) < longest {
|
||||
continue
|
||||
}
|
||||
// check for ordered property
|
||||
var lastLetter byte
|
||||
for i := 0; ; i++ {
|
||||
if i == len(bs) {
|
||||
// end of word. it's an ordered word.
|
||||
// save it and break from loop
|
||||
if len(bs) > longest {
|
||||
longest = len(bs)
|
||||
list = list[:0]
|
||||
}
|
||||
list = append(list, bs)
|
||||
break
|
||||
}
|
||||
// check next letter
|
||||
b := bs[i]
|
||||
if b < 'a' || b > 'z' {
|
||||
continue // not a letter. ignore.
|
||||
}
|
||||
if b < lastLetter {
|
||||
break // word not ordered.
|
||||
}
|
||||
// letter passes test
|
||||
lastLetter = b
|
||||
}
|
||||
}
|
||||
// print result
|
||||
for _, bs := range list {
|
||||
fmt.Println(string(bs))
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue