티스토리 뷰
어떤 식으로든 스트림을 수정하여 다른 io.Reader 를 감싸는 io.Reader 는 흔한 패턴입니다. 예컨대, gzip.NewReader 함수는 io.Reader (gzip으로 압축된 데이터의 스트림) 를 가지고, io.Reader (압축 해제된 데이터의 스트림) 를 구현한 `*gzip.Reader`를 반환합니다. ROT13 치환 암호화를 모든 알파벳 문자에 적용함으로써 스트림을 수정하며 io.Reader 를 구현하고 io.Reader 로 부터 읽는 rot13Reader 를 구현하십시오. rot13Reader 타입은 당신을 위해 제공됩니다. 이 타입의 Read 함수를 구현함으로써 io.Reader 을 만들어 보십시오. |
문제는 위와 같습니다.
ROT13이란?
2019/08/14 - [Program/Algorithm] - ROT13
* 풀이
package main
import (
"io"
"os"
"strings"
)
type rot13Reader struct {
r io.Reader
}
func (rot13 *rot13Reader) Read(data []byte) (len int, err error) {
len, err = rot13.r.Read(data)
for i := 0; i < len; i++ {
data[i] = rot13byte(data[i])
}
return
}
func rot13byte(sb byte) byte {
s := rune(sb)
if s >= 'a' && s <= 'm' || s >= 'A' && s <= 'M' {
sb += 13
}
if s >= 'n' && s <= 'z' || s >= 'N' && s <= 'Z' {
sb -= 13
}
return sb
}
func main() {
s := strings.NewReader(
"Lbh penpxrq gur pbqr!")
r := rot13Reader{s}
io.Copy(os.Stdout, &r)
}
class가 없는 구조상 struct를 만들고 그것을 swift의 extension 하는 방식처럼 구현하는게 뭔가 좀 어색하면서 재밌습니다.
'Language > Go' 카테고리의 다른 글
Golang debug error가 Visual Studio Code에서 발생할때... 다른곳에서 날수도 있음. (0) | 2019.08.21 |
---|---|
Go. 다중 CPU 처리 방법 (0) | 2019.08.14 |
Go. Goroutines 고루틴 - Channel. 데이터를 주고 받기 (0) | 2019.08.14 |
Go. Goroutines 고루틴 (0) | 2019.08.14 |
Go. 설치하기 (0) | 2019.08.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- enum
- Codable
- centos8
- Spring
- cocoapods
- go
- ios
- Gradle
- Java
- github
- nodejs
- Xcode
- ubuntu
- docker
- Linux
- Kotlin
- MySQL
- intellij
- golang
- windows10
- SWIFT
- CentOS
- war
- git
- rxswift
- tomcat
- php
- Python
- android
- Windows
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함