import (
"fmt"
"io"
"os"
"strings"
)
type rot13Reader struct {
r io.Reader
}
func (p rot13Reader) Read(b []byte) (n int, err error) {
n, err = p.r.Read(b)
for i := 0; i < n; i++ {
b[i] = b[i] + 13
if b[i] > 'z' || (b[i] > 'Z' && b[i] < 'a') {
b[i] = b[i] - 26
}
fmt.Printf("b[%v] = %q\n", i, b[i])
}
n = len(b)
return n, err
}
func main() {
s := strings.NewReader("Lbh penpxrq gur pbqr!")
r := rot13Reader{s}
io.Copy(os.Stdout, &r)
}
Output:
b[0] = 'Y' b[1] = 'o' b[2] = 'u' b[3] = '-' b[4] = 'c' b[5] = 'r' b[6] = 'a' b[7] = 'c' b[8] = 'k' b[9] = 'e' b[10] = 'd' b[11] = '-' b[12] = 't' b[13] = 'h' b[14] = 'e' b[15] = '-' b[16] = 'c' b[17] = 'o' b[18] = 'd' b[19] = 'e' b[20] = '.' You-cracked-the-code.You-cracked-the-code. Program exited.
Reference:
http://tour.golang.org/methods/12
No comments:
Post a Comment