github.com/spotify/syslog-redirector-golang@v0.0.0-20140320174030-4859f03d829a/misc/tour/solutions/rot13.go (about) 1 // Copyright 2012 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // +build ignore 6 7 package main 8 9 import ( 10 "io" 11 "os" 12 "strings" 13 ) 14 15 func rot13(b byte) byte { 16 var a, z byte 17 switch { 18 case 'a' <= b && b <= 'z': 19 a, z = 'a', 'z' 20 case 'A' <= b && b <= 'Z': 21 a, z = 'A', 'Z' 22 default: 23 return b 24 } 25 return (b-a+13)%(z-a+1) + a 26 } 27 28 type rot13Reader struct { 29 r io.Reader 30 } 31 32 func (r rot13Reader) Read(p []byte) (n int, err error) { 33 n, err = r.r.Read(p) 34 for i := 0; i < n; i++ { 35 p[i] = rot13(p[i]) 36 } 37 return 38 } 39 40 func main() { 41 s := strings.NewReader( 42 "Lbh penpxrq gur pbqr!") 43 r := rot13Reader{s} 44 io.Copy(os.Stdout, &r) 45 }