首页 > 试题广场 >

坐标移动

[编程题]坐标移动
  • 热度指数:591865 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。

输入:

合法坐标为A(或者D或者W或者S) + 数字(两位以内)

坐标之间以;分隔。

非法坐标点需要进行丢弃。如AA10;  A1A;  $%$;  YAD; 等。

下面是一个简单的例子 如:

A10;S20;W10;D30;X;A1A;B10A11;;A10;

处理过程:

起点(0,0)

+   A10   =  (-10,0)

+   S20   =  (-10,-20)

+   W10  =  (-10,-10)

+   D30  =  (20,-10)

+   x    =  无效

+   A1A   =  无效

+   B10A11   =  无效

+  一个空 不影响

+   A10  =  (10,-10)

结果 (10, -10)

数据范围:每组输入的字符串长度满足 ,坐标保证满足 ,且数字部分仅含正数

输入描述:

一行字符串



输出描述:

最终坐标,以逗号分隔

示例1

输入

A10;S20;W10;D30;X;A1A;B10A11;;A10;

输出

10,-10
示例2

输入

ABC;AKL;DA1;

输出

0,0
while True:
    try:
        s = input()
        s = list(s.split(";"))
        x,y = 0,0
        for c in s:
            if not c:
                continue
            elif c[0]=='A' and c[1:].isdigit():
                x-=int(c[1:])
            elif c[0]=='S' and c[1:].isdigit():
                y-=int(c[1:])
            elif c[0]=='W' and c[1:].isdigit():
                y+=int(c[1:])
            elif c[0]=='D' and c[1:].isdigit():
                x+=int(c[1:])
        print(str(x)+','+str(y))
    except:
        break

发表于 2021-06-12 10:16:22 回复(0)
def get_zb(str_):
    list_input = str_.strip().split(";")
    x = 0
    y = 0
    flag = 0
    key = ['A','S','W','D']
    num = ['1','2','3','4','5','6','7','8','9','0']
    for i in list_input:
        if i == "":
            continue
        if i[0] not in key:
            continue
        for j in range(1,len(i)):
            if i[j] not in num:
                flag = 1
        if flag ==1:
            flag = 0
            continue
        if i[0] == 'A':
            x = x - int(i[1:])
        elif i[0] == 'D':
            x = x + int(i[1:])
        elif i[0] == 'S':
            y = y - int(i[1:])
        elif i[0] == 'W':
            y = y + int(i[1:])
    print(x,end=(""))
    print(",",end=(""))
    print(y,end=(""))
get_zb(input())
发表于 2021-05-21 09:55:42 回复(0)
a = input().split(';')
b = 0
c = 0
for i in a:
    if len(i) == 0:
        continue
    elif 'A' == i[0] and i.count('A') == 1 and i[1:].isdigit():
        b -= int(i[1:])
    elif 'D' == i[0] and i.count('D') == 1 and i[1:].isdigit():
        b += int(i[1:])
    elif 'W' == i[0] and i.count('W') == 1 and i[1:].isdigit():
        c += int(i[1:])
    elif 'S' == i[0] and i.count('S') == 1 and i[1:].isdigit():
        c -= int(i[1:])
print(b,end=',')
print(c)
好像显得我很low
发表于 2021-05-15 18:56:42 回复(1)
x = 0
y = 0
w = 'AWDS'
n = ''
f = ''
ll = input()
mv = ll.split(';')

for le in mv:
    if len(le) > 1 and le[0] in w and le[1:].isdigit():
        n = le[1:]
        if le[0] == 'A':
            x -= int(n)
        elif le[0] == 'D':
            x += int(n)
        elif le[0] == 'W':
            y += int(n)
        elif le[0] =='S':
            y -= int(n)
f = str(x)+','+str(y)
print(f)
发表于 2021-05-15 15:47:21 回复(0)
import re
points = [p.strip() for p in input().split(';')]
points = [p for p in points if re.match('^[A|D|W|S]\\d{1,2}$', p)]
x,y = 0,0
for p in points:
    if p.startswith('A'):
        x -= int(p[1:])
    elif p.startswith('D'):
        x += int(p[1:])
    elif p.startswith('W'):
        y += int(p[1:])
    else:
        y -= int(p[1:])
print(f'{x},{y}')

发表于 2021-04-23 11:51:21 回复(0)
分享一个简单的python思路,输入项中可以用try来过滤掉干扰项,剩下的就比较简单了,该加加,该减减
x,y=0,0
a=input().split(';')
for i in a:
    try:
        int(i[1:])
    except:
        continue
    else:
        if i[0]=='A':
            x=x-int(i[1:])
        if i[0]=='D':
            x=x+int(i[1:])
        if i[0]=='W':
            y=y+int(i[1:])
        if i[0]=='S':
            y=y-int(i[1:])
print(str(x)+','+str(y))

发表于 2021-04-03 11:30:26 回复(0)
def yd(str):
    ff=str.split(";",)
    sc=[0,0]
    num=len(ff)
    for i in range(num):
        if ff[i].startswith('A') and ff[i][1:].isdigit():
            sc[0]=sc[0]-int(ff[i][1:])
        elif ff[i].startswith('D') and ff[i][1:].isdigit():
            sc[0]=sc[0]+int(ff[i][1:])
        elif ff[i].startswith('W') and ff[i][1:].isdigit():
            sc[1]=sc[1]+int(ff[i][1:])
        elif ff[i].startswith('S') and ff[i][1:].isdigit():
            sc[1]=sc[1]-int(ff[i][1:])
        else:
            continue
    print("{0},{1}".format(sc[0],sc[1]))

while True:
    try:
        a=input()
        yd(a)
    except:
        break

发表于 2021-04-02 20:11:05 回复(0)
import re
import sys

test_data = (d.strip() for d in sys.stdin.readlines())


move_coor_map = {
    "A": (-1, 0),
    "D": (1, 0),
    "W": (0, 1),
    "S": (0, -1)
}


def move(current_coor, move_coor, n):
    return current_coor[0] + move_coor[0] * n, current_coor[1] + move_coor[1] * n

pattern = re.compile(r"([ASWDaswd]{1})([0-9]{1,2})")
for d in test_data:
    coor_list = d.split(";")
    origin_coor = (0, 0)
    for coor in coor_list:
        ret = re.match(pattern, coor.strip())
        if ret is not None:
            move_coor = move_coor_map[ret.group(1).upper()]
            n = int(ret.group(2))
            origin_coor = move(origin_coor, move_coor, n)
        else:
            continue
            
    print(origin_coor[0], origin_coor[1], sep=",")
发表于 2021-03-22 22:43:25 回复(0)
string = input().split(';')
valid = []
direction = ['A','D','W','S']
x ,y = 0,0
for i in string:
    if len(i)>1 and i[0] in direction:
        try:
            valid.append(i[0]+str(int(i[1:])))
        except:
            pass
for i in valid:
    if i[0]=='A':
        x-=int(i[1:])
    elif i[0]=='D':
        x+=int(i[1:])
    elif i[0]=='W':
        y+=int(i[1:])
    else:
        y-=int(i[1:])
print(str(x)+','+str(y))
发表于 2021-03-18 18:07:32 回复(0)
a = input().split(";")
position = ["A", "D", "W", "S"]
num = [str(i) for i in range(100)]
horizon, vertical = 0, 0
res = []
for i in a:
    if i == "":
        continue
    if i[0] not in position: # 起始坐标必须是ADWS
        continue
    if len(i) > 3:  # 两位以内坐标
        continue
    if i[1:] not in num: # 第二位后应该是整数
        continue
    res.append(i)

for i in res:
    if i[0] == "A":
        horizon -= int(i[1:])
    if i[0] == "D":
        horizon += int(i[1:])
    if i[0] == "W":
        vertical += int(i[1:])
    if i[0] == "S":
        vertical -= int(i[1:])
print(str(horizon) + "," + str(vertical))
        

        
发表于 2021-03-09 17:32:27 回复(0)
while True:
    try:
        lis = [0, 0]
        s = input().split(';')
        for i in s:
            if len(i)>=2:
                if i[0] == 'A' and i[1:].isdigit():
                    lis[0] -= int(i[1:])
                elif i[0] == 'D' and i[1:].isdigit():
                    lis[0] += int(i[1:])
                elif i[0] == 'W' and i[1:].isdigit():
                    lis[1] += int(i[1:])
                elif i[0] == 'S' and i[1:].isdigit():
                    lis[1] -= int(i[1:])
                else:
                    continue
            else:
                continue
        print(str(lis[0])+','+str(lis[1]))
    except:
        break
发表于 2021-02-28 17:47:22 回复(0)
import re

pattern=re.compile(r'^[ASWD]\d{2}$')
s=input()
x=0
y=0
for i in s.split(";"):
    se=re.search(pattern,i)
    if se :
        if i[0] == "A" : x -= int(i[1:3])
        if i[0] == "D" : x += int(i[1:3])
        if i[0] == "W" : y += int(i[1:3])
        if i[0] == "S" : y -= int(i[1:3])
print("%d,%d"%(x,y))
为啥不通过?求大神指教,找了半天没找到原因。
发表于 2021-02-20 09:40:21 回复(1)
a=input()
L=a.split(';')
start=[0,0]
#x,y=0,0
for s in L:
    #if len(s)>1 and s[0] in ['A','D','W','S'] and set(s[1:]).issubset(set("1234567890")):
    #先判断是否长度大于1(排除空值和单个字符),再判断首字符是否为ADWS,最后判断后面的字符是否为数字
    if len(s)>1 and s[0] in ['A','D','W','S'] and s[1:].isdigit():
                if s.startswith('A'):#是否以A开头
                    start[0]-=int(s[1:])
                elif s[0]=='D':
                    start[0]+=int(s[1:])
                elif s[0]=='W':
                    start[1]+=int(s[1:])
                elif s[0]=='S':
                    start[1]-=int(s[1:])
    else:
        continue
print (start[0],start[1],sep=',')

编辑于 2021-02-17 23:07:53 回复(0)
str1 = input()
str2 = str1.split(';')
x = 0
y = 0
for i in range(len(str2)):
    try:
        #a=str2[i][0:1] 
        if str2[i][0:1] == 'A':
             x = x - int(str2[i][1:])
        if str2[i][0:1] =='D':
            x = x + int(str2[i][1:])
        if str2[i][0:1] == 'W':
            y =y+ int(str2[i][1:])
        if str2[i][0:1] =='S':
            y =y - int(str2[i][1:])         
    except:
        continue
print(str(x)+ "," + str(y))
发表于 2021-02-17 15:01:17 回复(0)
import sys
for ords in sys.stdin:
    lst = ords.split(';')
    x = y = 0
    for i in lst:
        if 0 < len(i) <= 3 and i[0] in 'ADWS' and i[1:].isdigit():
            n = int(i[1:])
            if i[0] == 'A':
                x -= n
            elif i[0] == 'D':
                x += n
            elif i[0] == 'W':
                y += n
            else:
                y -= n
    print('{:d},{:d}'.format(x,y)) 

发表于 2021-02-03 16:29:46 回复(0)

locations = input().split(";")
clean_location = []
ways = {"A":(-1,0),"D":(1,0),"W":(0,1),"S":(0,-1)}
for location in locations:
    if len(location) > 3:
        continue
    if len(location) == 3&nbs***bsp;len(location) == 2:
        if location[0] in ways and location[1:].isdigit():
            clean_location.append(location)

initial = [0,0]
for i in clean_location:
    way = ways[i[0]]
    num = int(i[1:])
    initial[0] += way[0]*num
    initial[1] += way[1]*num
print("{},{}".format(initial[0],initial[1]))


发表于 2021-01-15 23:36:06 回复(0)

简单的python代码实现

a = input().split(str(';'))
x,y=0,0
for i in range(len(a)):
    try:
        if a[i][0] in "ASDW" :
            if a[i][0]=="A":
                x-=int(a[i][1:])
            if a[i][0]=="S":
                y-=int(a[i][1:])
            if a[i][0]=="D":
                x+=int(a[i][1:])
            if a[i][0]=="W":
                y+=int(a[i][1:])
    except:
        continue
print("{},{}".format(x,y))
发表于 2020-12-22 12:10:45 回复(0)
import re

x, y = 0, 0
temp = input().split(";")
for s in temp:
    m = re.match(r"^[ADWS]\d+$", s)
    if not m:
        continue
    m = m.group()
    d, l = m[:1], int(m[1:])
    if d == "A":
        x -= l
    elif d == "D":
        x += l
    elif d == "W":
        y += l
    else:
        y -= l
        
print("{},{}".format(x, y))

发表于 2020-12-14 16:40:56 回复(0)
菜鸟的代码,勿喷。。搞不太懂这个报错是哪不合要求了。。
格式错误:您的程序输出的格式不符合要求(比如空格和换行与要求不一致)
你的输出为:10 , -10

inp=input()
l=inp.split(";")
l2=list()
a,w=0,0
for i in l:
    try:
        if int(str(i)[1:])%10==0:
            l2.append(i)
    except:
        l2=l2
for i in l2:
    if str(i)[0]=='A':
        a=a-int(str(i)[1:])//10
    elif str(i)[0]=='D':
        a=a+int(str(i)[1:])//10
    elif str(i)[0]=='W':
        w=w+int(str(i)[1:])//10
    elif str(i)[0]=='S':
        w=w-int(str(i)[1:])//10
print(a*10,',',w*10)

编辑于 2020-12-13 22:17:51 回复(0)