開発環境
- macOS Catalina - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Go (プログラミング言語)
入門Goプログラミング (Nathan Youngman(著)、Roger Peppé(著)、吉川 邦夫(監修, 翻訳)、翔泳社)のUNIT 2(型)、LESSON 11(チャレンジ: ヴィジュネル暗号)の練習問題1の解答を求めてみる。
コード
package main
import (
"fmt"
"strings"
)
func main() {
cipherText := "CSOITEUIWUIZNSROCNKFD"
keyword := "GOOLANG"
fmt.Println("strings.Repeat関数を使った版")
fmt.Println("rangeを使った版")
message := ""
keywords := strings.Repeat(keyword, len(cipherText)/len(keyword)+1)
for i, c := range cipherText {
t := byte(c) - (keywords[i] - 'A')
if t < 'A' {
t += 26
}
message += string(t)
}
fmt.Println(message)
fmt.Println("rangeを使わない版")
message = ""
for i := 0; i < len(cipherText); i++ {
t := cipherText[i] - (keywords[i] - 'A')
if t < 'A' {
t += 26
}
message += string(t)
}
fmt.Println(message)
fmt.Println("strings.Repeat関数を使わない版")
fmt.Println("rangeを使った版")
message = ""
for i, c := range cipherText {
j := i % len(keyword)
t := byte(c) - (keyword[j] - 'A')
if t < 'A' {
t += 26
}
message += string(t)
}
fmt.Println(message)
fmt.Println("rangeを使わない版")
message = ""
for i := 0; i < len(cipherText); i++ {
j := i % len(keyword)
t := cipherText[i] - (keyword[j] - 'A')
if t < 'A' {
t += 26
}
message += string(t)
}
fmt.Println(message)
}
入出力結果(Zsh、PowerShell、Terminal)
% go run ./decipher.go
strings.Repeat関数を使った版
rangeを使った版
WEAXTROCIGXZAMLAOCKSX
rangeを使わない版
WEAXTROCIGXZAMLAOCKSX
strings.Repeat関数を使わない版
rangeを使った版
WEAXTROCIGXZAMLAOCKSX
rangeを使わない版
WEAXTROCIGXZAMLAOCKSX
%
0 コメント:
コメントを投稿