*の方向性はどうでもいい

プログラミングなどの学習履歴として最初は書いてたけどもう何でもいいやと思って今に至る

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!