package main
import (
"io"
"os"
"strings"
)
type rot13Reader struct {
r io.Reader
}
func (rot rot13Reader) Read (b []byte) (int, error){
n, error := rot.r.Read(b)
if error != nil {
return n, error
}
for i := range b {
switch {
case (b[i] >= 'A' && b[i] < 'N'), (b[i] >='a' && b[i] < 'n'): b[i] += 13
case (b[i] > 'M' && b[i] <= 'Z'), (b[i] > 'm' && b[i] <= 'z'): b[i] -= 13
}
}
return n, nil
}
func main() {
s := strings.NewReader("Lbh penpxrq gur pbqr!")
r := rot13Reader{s}
io.Copy(os.Stdout, &r)
}
// ===========================================================
You cracked the code!