题解 | 坐标移动

package main

import (
	"fmt"
	"strconv"
	"strings"
)

func isValid(cmd string) bool {
	if len(cmd) < 2 {
		return false
	}

	cmdName := cmd[0]
	switch cmdName {
	case 'A', 'S', 'W', 'D':
	default:
		return false
	}

	step, err := strconv.Atoi(cmd[1:])
	if err != nil {
		return false
	}

	if step < 1 || step > 99 {
		return false
	}

	return true
}

type Position struct {
	X int
	Y int
}

func (p *Position) Run(cmd string) {
	cmdName := cmd[0]
	cmdStep, _ := strconv.Atoi(cmd[1:])

	switch cmdName {
	case 'A':
		p.X -= cmdStep
	case 'D':
		p.X += cmdStep
	case 'W':
		p.Y += cmdStep
	case 'S':
		p.Y -= cmdStep
	}
}

func main() {
	var input string
	fmt.Scan(&input)

	cmds := strings.Split(input, ";")
	position := Position{}

	for _, cmd := range cmds {
		if !isValid(cmd) {
			continue
		}

		position.Run(cmd)
	}

	fmt.Printf("%v,%v", position.X, position.Y)
}

全部评论

相关推荐

02-21 16:39
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务