学習履歴

プログラミングなどの学習履歴

Exercise: rot13Reader

A Tour Of Goの

Exercise: rot13Reader

をやってみました。

正直今の自分のレベルでは難しかった。。

改めて自分の力不足に嘆きたくはなりますが、

どうにかこうにか書けた(書けたのか?)と思いますので、

メモとして残しておきます。

以下がコードです。

 

package main

import (
    "io"
    "os"
    "strings"
)

type rot13Reader struct {
    r io.Reader
}

func (root *rot13Reader) Read(b []byte) (int, error) {
    num, err := root.r.Read(b)

    if err != nil {
        return num, err
    }

    for i := 0; i < num; i++ {
        if ('A' <= b[i] && b[i] <= 'M') || ('a' <= b[i] && b[i] <= 'm'){
            b[i] += 13
        } else if ('N' <= b[i] && b[i] <= 'Z') || ('n' <= b[i] && b[i] <= 'z') {
            b[i] -= 13
        }
    }
    return num, nil
}

func main() {
    s := strings.NewReader("Lbh penpxrq gur pbqr!")
    r := rot13Reader{s}
    io.Copy(os.Stdout, &r)
}

 

これで実行をすると以下の文がでました。

You cracked the code!