| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package main
- import "bufio"
- import "fmt"
- import "os"
- type Digicode struct {
- mat [][]string
- result string
- pos []int
- }
- func NewDigicode() Digicode {
- var res Digicode
- /** First case */
- /*
- res.pos = []int { 1, 1 }
- res.mat = append(res.mat, []string{"1", "2", "3"})
- res.mat = append(res.mat, []string{"4", "5", "6"})
- res.mat = append(res.mat, []string{"7", "8", "9"})
- */
- /** second case */
- res.pos = []int { 2, 0 }
- res.mat = append(res.mat, []string{".", ".", "1", ".", "."})
- res.mat = append(res.mat, []string{".", "2", "3", "4", "."})
- res.mat = append(res.mat, []string{"5", "6", "7", "8", "9"})
- res.mat = append(res.mat, []string{".", "A", "B", "C", "."})
- res.mat = append(res.mat, []string{".", ".", "D", ".", "."})
- return res
- }
- func (this *Digicode) NextDigit(line string) {
- code := make(map[rune][]int)
- code['U'] = []int { -1, 0 }
- code['D'] = []int { 1, 0 }
- code['L'] = []int { 0, -1 }
- code['R'] = []int { 0, 1 }
- for _, dir := range(line) {
- if (this.pos[0] + code[dir][0] < 0 ||
- this.pos[1] + code[dir][1] < 0 ||
- this.pos[0] + code[dir][0] >= len(this.mat) ||
- this.pos[1] + code[dir][1] >= len(this.mat[this.pos[0] + code[dir][0]])) {
- continue
- }
- newCode := []int { this.pos[0] + code[dir][0], this.pos[1] + code[dir][1]}
- if (this.mat[newCode[0]][newCode[1]] == ".") {
- continue
- }
- this.pos = newCode
- }
- this.result += this.mat[this.pos[0]][this.pos[1]]
- }
- func main() {
- reader := bufio.NewReader(os.Stdin)
- code := NewDigicode()
- for true {
- read, _, err := reader.ReadLine()
- if len(read) > 0 {
- code.NextDigit(string(read))
- }
- if (err != nil) {
- break
- }
- }
- fmt.Println("output: ", code.result)
- }
|