A Tour of Go 60 Exercise: Rot13 Reader
演習: ROT13 換字式暗号をすべてのアルファベットの文字に適用します。
良く解らなかったので、答え見ながら書いた*1。
Google Code Archive - Long-term storage for Google Code Project Hosting.
package main import ( "io" "os" "strings" ) type rot13Reader struct { r io.Reader } func rot13(i byte) byte { var a,z byte switch { case 'a' <= i && i <= 'z': a,z = 'a','z' case 'A' <= i && i <= 'Z': a,z = 'A','Z' default: return i } return (i-a+13)%(z-a+1)+a } func (r *rot13Reader) Read(p []byte) (n int, err error) { n, err = r.r.Read(p) for i := 0; i<n; i++ { p[i] = rot13(p[i]) } return } func main() { s := strings.NewReader( "Lbh penpxrq gur pbqr!") r := rot13Reader{s} io.Copy(os.Stdout, &r) }
*1:コピペ><