more exercises
This commit is contained in:
parent
4edd033ebd
commit
7ee04a1864
28
exercise-errors.go
Normal file
28
exercise-errors.go
Normal file
@ -0,0 +1,28 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
)
|
||||
|
||||
type ErrNegativeSqrt float64
|
||||
|
||||
func (e ErrNegativeSqrt) Error() string {
|
||||
return fmt.Sprintf("cannot Sqrt negative number: %f", float64(e))
|
||||
}
|
||||
|
||||
func Sqrt(x float64) (float64, error) {
|
||||
if x < 0 {
|
||||
return 0, ErrNegativeSqrt(x)
|
||||
}
|
||||
var p float64
|
||||
for z := 1.0; z != p && math.Abs(z - p) > 0.000000000000001; z -= (z * z - x) / (2 * z) {
|
||||
p = z
|
||||
}
|
||||
return p, nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
fmt.Println(Sqrt(4))
|
||||
fmt.Println(Sqrt(-2))
|
||||
}
|
19
exercise-reader.go
Normal file
19
exercise-reader.go
Normal file
@ -0,0 +1,19 @@
|
||||
package main
|
||||
|
||||
import "golang.org/x/tour/reader"
|
||||
|
||||
type MyReader struct{}
|
||||
|
||||
// TODO: Add a Read([]byte) (int, error) method to MyReader.
|
||||
|
||||
func (MyReader) Read(b []byte) (int, error) {
|
||||
c := "A"
|
||||
for i := range b {
|
||||
b[i] = byte(c[0])
|
||||
}
|
||||
return len(b), nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
reader.Validate(MyReader{})
|
||||
}
|
42
exercise-rot-reader.go
Normal file
42
exercise-rot-reader.go
Normal file
@ -0,0 +1,42 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"io"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type rot13Reader struct {
|
||||
r io.Reader
|
||||
}
|
||||
|
||||
var rot13Input []byte = []byte("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")
|
||||
var rot13Output []byte = []byte("NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm")
|
||||
|
||||
func indexOf(s []byte, b byte) int {
|
||||
for i, v := range s {
|
||||
if v == b {
|
||||
return i
|
||||
}
|
||||
}
|
||||
return -1
|
||||
}
|
||||
|
||||
func (r rot13Reader) Read(b []byte) (n int, err error) {
|
||||
n, err = r.r.Read(b)
|
||||
if err == nil {
|
||||
for i := 0; i < n; i++ {
|
||||
c := b[i]
|
||||
if j := indexOf(rot13Input, c); j > -1 {
|
||||
b[i] = rot13Output[j]
|
||||
}
|
||||
}
|
||||
}
|
||||
return n, err
|
||||
}
|
||||
|
||||
func main() {
|
||||
s := strings.NewReader("Lbh penpxrq gur pbqr!")
|
||||
r := rot13Reader{s}
|
||||
io.Copy(os.Stdout, &r)
|
||||
}
|
21
reader.go
Normal file
21
reader.go
Normal file
@ -0,0 +1,21 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
r := strings.NewReader("Hello, Reader!")
|
||||
|
||||
b := make([]byte, 8)
|
||||
for {
|
||||
n, err := r.Read(b)
|
||||
fmt.Printf("n = %v err = %v b = %v\n", n, err, b)
|
||||
fmt.Printf("b[:n] = %q\n", b[:n])
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user