Implementation of rot13 reader

Although I'm sure there's a fancier way to do the lookup table.
Hmmm...
cat-town
Dan Buch 12 years ago
parent 736d61e82c
commit c556fa9b7c

@ -0,0 +1,97 @@
package main
import (
"fmt"
"io"
"os"
"strings"
)
var lookupTable = map[byte]byte{
'A': 'N',
'B': 'O',
'C': 'P',
'D': 'Q',
'E': 'R',
'F': 'S',
'G': 'T',
'H': 'U',
'I': 'V',
'J': 'W',
'K': 'X',
'L': 'Y',
'M': 'Z',
'N': 'A',
'O': 'B',
'P': 'C',
'Q': 'D',
'R': 'E',
'S': 'F',
'T': 'G',
'U': 'H',
'V': 'I',
'W': 'J',
'X': 'K',
'Y': 'L',
'Z': 'M',
'a': 'n',
'b': 'o',
'c': 'p',
'd': 'q',
'e': 'r',
'f': 's',
'g': 't',
'h': 'u',
'i': 'v',
'j': 'w',
'k': 'x',
'l': 'y',
'm': 'z',
'n': 'a',
'o': 'b',
'p': 'c',
'q': 'd',
'r': 'e',
's': 'f',
't': 'g',
'u': 'h',
'v': 'i',
'w': 'j',
'x': 'k',
'y': 'l',
'z': 'm',
}
type rot13Reader struct {
reader io.Reader
}
func (rot *rot13Reader) Read(p []byte) (i int, err error) {
if len(p) == 0 {
return 0, nil
}
buf := make([]byte, len(p))
i, err = rot.reader.Read(buf)
var (
b, c byte
found bool
)
for i := range buf {
b = buf[i]
c, found = lookupTable[b]
if found {
p[i] = c
} else {
p[i] = b
}
}
return
}
func main() {
s := strings.NewReader("Lbh penpxrq gur pbqr!")
r := rot13Reader{s}
io.Copy(os.Stdout, &r)
fmt.Println("")
}
Loading…
Cancel
Save