package main import ( "bufio" "fmt" "os" ) func main() { in := bufio.NewScanner(os.Stdin) // 暗号化文字列 in.Scan() s := in.Text() fmt.Println(decode(s)) } // 復号化する。 func decode(s string) string { dec := "" // 文字列を1文字ずつループ // 文字列をループするとbyte(10進数)になる for i, v := range s { // iの数だけ減算(iは0から始まるため+1) as := int(v) - (i + 1) // A以前の文字になった場合はZに進めるため、26を足す // 1回だけだとA~Zにならない可能性があるため、A~Zになるまでループする for { if as < 65 { as += 26 } else { break } } for { if as < 65 { as += 26 } else { break } } // Z以降の文字になった場合はAに戻すため、26を引く if as > 90 { as -= 26 } // 文字列に変換 ch := string(as) dec += ch } return dec }