Skip to content

Instantly share code, notes, and snippets.

@npat-efault
Created January 6, 2014 02:24
Show Gist options
  • Save npat-efault/8277260 to your computer and use it in GitHub Desktop.
Save npat-efault/8277260 to your computer and use it in GitHub Desktop.
Rot13 en/de-coder in Go
// ROT13 reader
// See: http://en.wikipedia.org/wiki/Rot13
package main
import (
"bytes"
"io"
"os"
"strings"
)
type rot13Reader struct {
r io.Reader
}
func rot13(r rune) rune {
switch {
case r >= 'a' && r <= 'z':
return 'a' + ((r - 'a' + 13) % 26)
case r >= 'A' && r <= 'Z':
return 'A' + ((r - 'A' + 13) % 26)
}
return r
}
func (rot *rot13Reader) Read(p []byte) (n int, err error) {
n, err = rot.r.Read(p)
n = copy(p, bytes.Map(rot13, p[:n]))
return n, err
}
func main() {
s := strings.NewReader(
"Lbh penpxrq gur pbqr!\n")
r := &rot13Reader{s}
io.Copy(os.Stdout, r)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment