首页 > 试题广场 >

坐标移动

[编程题]坐标移动
  • 热度指数: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
strrs = input().split(';')
def Check(strr):
    strr = [i for i in strr]
    int_list = [0,1,2,3,4,5,6,7,8,9]
    int_list = [str(i) for i in int_list]
    if (len(strr) == 0) or (len(strr) == 1) :
        return False
    if strr[0] in ['A','D','W','S']:
        for i in strr[1:]:
            if (i not in int_list):
                return False
    else:
        return False
    return True

def Cal(strrs_new):
    x = 0
    y = 0
    for strr_new in strrs_new:
        if strr_new[0] == 'A':
            x -= int(strr_new[1:])
        if strr_new[0] == 'D':
            x += int(strr_new[1:])
        if strr_new[0] == 'W':
            y += int(strr_new[1:])
        if strr_new[0] == 'S':
            y -= int(strr_new[1:])    
    return f'{x},{y}'
strrs_new = []
for i in strrs:
    a = Check(i)
    if a == True:
        strrs_new.append(i)
print(Cal(strrs_new))
发表于 2024-11-24 22:09:52 回复(0)
cord_list = input().split(';')
x, y = 0, 0
for cord in cord_list:
    if 2 <= len(cord) <= 3 and cord[1:].isdigit():
        d, step = cord[0], int(cord[1:])
        if d == 'A':
            x -= step
        elif d == 'D':
            x += step
        elif d == 'W':
            y += step
        elif d == 'S':
            y -= step

print(f'{x},{y}')

发表于 2024-11-07 17:01:08 回复(0)
看到这道题想起来以前用过的match case语句,试了不能运行,百度知道这是3.10才支持的语法,虽然没法用,但是给大家看个乐子
act=input().split(';')
start=[0,0]
for i in act:
    if not 2<=len(i)<=3:
        continue
    try:
        move=i[0]
        step=int(i[1:])
        match (move):
            case "W":
                start[1]+=step
            case "S":
                start[1]-=step
            case "A":
                start[0]-=step
            case "D":
                start[0]+=step
    except:
        continue
print(str(start[0])+','+str(start[1]))


发表于 2024-10-12 22:00:45 回复(0)
s = input().split(';')
x,y = 0,0
for move in s:
    if len(move) >= 2 and (move[1:]).isdigit():
        if move[0] == 'A' :
            x -= int(move[1:])
        elif move[0] == 'D' :
            x += int(move[1:])
        elif move[0] == 'W' :
            y += int(move[1:])
        elif move[0] == 'S' :
            y -= int(move[1:])
print(f'{x},{y}')

发表于 2024-10-07 18:28:36 回复(0)
a = input().split(";")
# print(a)
b = [i for i in a if len(i) >= 2]
o = [0,0]
for r in b:
    if "W" == r[0]:
        try:
            o = [o[0],o[1]+int(r[1:])]
        except:
            pass
    if "S" == r[0]:
        try:
            o = [o[0],o[1]-int(r[1:])]
        except:
            pass
    if "A" == r[0]:
        try:
            o = [o[0]-int(r[1:]),o[1]]
        except:
            pass
    if "D" == r[0]:
        try:
            o = [o[0]+int(r[1:]),o[1]]
        except:
            pass
    # print(o)

print(",".join(map(str,o)))
发表于 2024-09-30 05:13:26 回复(0)
def move(disp):
    dx, dy = 0, 0
    if is_disp(disp):
        if disp[0] == 'A':
            dx = -1*int(disp[1:])
        if disp[0] == 'D':
            dx = 1*int(disp[1:])
        if disp[0] == 'W':
            dy = 1*int(disp[1:])
        if disp[0] == 'S':
            dy = -1*int(disp[1:])
    return dx, dy

def is_disp(disp):
    if len(disp)>=2 and disp[0] in ('A','S','D','W') and disp[1:].isdigit():
        return True
    else:
        return False

if __name__ == "__main__":
    disps = input().strip().split(';')
    x, y = 0, 0
    for disp in disps:
        dx, dy = move(disp)
        x += dx
        y += dy
    print(f"{x},{y}")
发表于 2024-09-20 08:55:14 回复(0)
from ast import Pass
while True:
    try:
        s = input().split(';')
        x, y = 0, 0
        for move in s:
            if move == '':
                continue
            elif move[0] == 'A' and move[1:].isdigit():
                x -= int(move[1:])
            elif move[0] == 'W' and move[1:].isdigit():
                y += int(move[1:])
            elif move[0] == 'S' and move[1:].isdigit():
                y -= int(move[1:])
            elif move[0] == 'D' and move[1:].isdigit():
                x += int(move[1:])
        print(f'{x},{y}')
    except:
        break

发表于 2024-08-11 19:52:49 回复(1)
屎山代码
import string
#读取并分割
L=input().split(";")
#初始化坐标
x=0
y=0
#循环
for i in range(len(L)):
    #筛除长度大于3的无效数据
    if (len(L[i])>3):
        continue
    #判断后两位是否为数字,如不是,则舍弃
    try:
        n=int(L[i][1:3])
    except:
        continue
    #判断移动方向并写入坐标
    if (L[i][0]=="A"):
            x-=n
    elif (L[i][0]=="D"):
            x+=n
    elif (L[i][0]=="S"):
            y-=n
    elif (L[i][0]=="W"):
            y+=n
#打印坐标
print(x,end=",")
print(y)
发表于 2024-07-24 19:55:22 回复(0)
import re

input_list = input()

zhengze = r'\b[ADWS]\d{1,2}\b'
matches = re.findall(zhengze,input_list)

x = 0
y = 0

for match in matches:
    direction = match[0]
    distinct = int(match[1:])
       
    if direction == "A":
            x -= distinct
    if direction == "D":
            x += distinct
    if direction == "W":
            y += distinct
    if direction == "S":
            y -= distinct
       

print(f"{x},{y}")

发表于 2024-07-13 10:30:18 回复(0)
# 仅记录脚步
# 第十七题 坐标移动 # 去无效值 a_input = input().split(';')
a_input_list = list(a_input)
c_con_list = []
w_list =['W','A','S','D'] for item in a_input_list:
    b_len = len(item)
    e_zt = 0  if b_len >= 2 and item[0] in w_list:
        d_left = item[1:] try: int(d_left) except ValueError:
            e_zt = 1  if e_zt == 0 :
            c_con_list.append(item) # 移动 f = [0,0] for i in c_con_list: if i[0] == 'W':
        value = int(i[1:])
        f[1] += value elif i[0] == 'S':
        value = int(i[1:])
        f[1] -= value elif i[0] == 'A':
        value = int(i[1:])
        f[0] -= value else:
        value = int(i[1:])
        f[0] += value print(f'{f[0]},{f[1]}')
发表于 2024-06-07 13:20:40 回复(0)
"""
1. 四个按键 WSAD
2. 起始点(0.0)
3. 合法坐标A11
4. 非法坐标丢弃
5. 坐标以 ; 分割
6. 
"""
import re

# 读取字符串
s = input().split(';')

# 筛选正常坐标
coordinate = []
for i in s:
    if len(i) < 2&nbs***bsp;len(i) > 3:
        continue
    elif re.match(r"^[A-Z].*\d$",i) == None:
        continue
    else:
        coordinate.append(i)

# 定义移动函数
def move(x:str, oxy:list):
    xy = oxy
    step = int(x[1:])
    if 'W' in x:
        xy[1] = oxy[1] + step
    elif 'S' in x:
        xy[1] = oxy[1] -step
    elif 'A' in x:
        xy[0] = oxy[0] - step
    elif 'D' in x:
        xy[0] = oxy[0] + step

    return xy

# 移动坐标
oxy = [0,0]
for x in coordinate:
    oxy = move(x, oxy)

# 打印显示
print(f"{oxy[0]},{oxy[1]}")





发表于 2024-06-06 21:40:44 回复(0)
import sys

s = input()

s1 = s.split(';')
 
a = [0,0]
for i in s1:
    if not i:
        a = a
    elif i[0] in ('A', 'D', 'W', 'S') and (i[1:]).isdigit():
        if i[0] == 'A':
            a[0] = a[0] - int(i[1:])
        elif i[0] == 'D':
            a[0] = a[0] + int(i[1:])
        elif i[0] =='W':
            a[1] = a[1] + int(i[1:])
        elif i[0] == 'S':
            a[1] = a[1] - int(i[1:])

    elif i == '':
        a = a
    else:
        a = a
print(str(a[0]) + ',' + str(a[1]))

发表于 2024-06-01 19:26:02 回复(0)
# 屎山代码
a = input().split(";")
position = {"x_position": 0, "y_position": 0}

for i in a:
    if len(i) == 2:
        if (i[0] == "A") and (i[1] >= "0" and i[1] <= "9"):
            move = int(i[1])
            position["x_position"] -= move
        elif (i[0] == "D") and (i[1] >= "0" and i[1] <= "9"):
            move = int(i[1])
            position["x_position"] += move
        elif (i[0] == "W") and (i[1] >= "0" and i[1] <= "9"):
            move = int(i[1])
            position["y_position"] += move
        elif (i[0] == "S") and (i[1] >= "0" and i[1] <= "9"):
            move = int(i[1])
            position["y_position"] -= move
    if len(i) == 3:
        if (
            (i[0] == "A")
            and (i[1] >= "0" and i[1] <= "9")
            and (i[2] >= "0" and i[2] <= "9")
        ):
            move = int(f"{i[1]}{i[2]}")
            position["x_position"] -= move
        elif (
            (i[0] == "D")
            and (i[1] >= "0" and i[1] <= "9")
            and (i[2] >= "0" and i[2] <= "9")
        ):
            move = int(f"{i[1]}{i[2]}")
            position["x_position"] += move
        elif (
            (i[0] == "W")
            and (i[1] >= "0" and i[1] <= "9")
            and (i[2] >= "0" and i[2] <= "9")
        ):
            move = int(f"{i[1]}{i[2]}")
            position["y_position"] += move
        elif (
            (i[0] == "S")
            and (i[1] >= "0" and i[1] <= "9")
            and (i[2] >= "0" and i[2] <= "9")
        ):
            move = int(f"{i[1]}{i[2]}")
            position["y_position"] -= move
    # print(f'{position['x_position']},{position['y_position']}')
print("%d,%d" % (position["x_position"], position["y_position"]))
# print(position['x_position'],position['y_position'],sep=',')

发表于 2024-05-24 19:52:42 回复(1)
postion = [0, 0]
dir = {'A': (0, -1), 'D': (0, 1), 'W': (1, 1), 'S': (1, -1)}

line = input().split(';')
for word in line:
    if not (word and len(word)>1): continue
    if not word[0] in dir: continue
    try:
        step = int(word[1:])
    except:
        continue
    postion[dir[word[0]][0]] += dir[word[0]][1] * step
    
print('%d,%d' % (postion[0], postion[1]))

发表于 2024-05-24 13:09:19 回复(0)
str_lst = input().split(";")
location = [0, 0]
steps = 0
dir = ["A", "S", "D", "W"]
for item in str_lst:
    if len(item) < 2:
        continue
    new_string = item[1:]
    if item[0] not in dir:
        continue
    if (not new_string.isdigit()) or (int(new_string) < 0):
        continue
    steps = int(new_string)
    if item[0] == "A":
        location[0] = location[0] - steps
    if item[0] == "D":
        location[0] = location[0] + steps
    if item[0] == "S":
        location[1] = location[1] - steps
    if item[0] == "W":
        location[1] = location[1] + steps
print(location[0], location[1], sep=",")

发表于 2024-05-09 09:07:35 回复(0)