题解 | #坐标移动#
坐标移动
https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
"""HJ17 坐标移动
开发一个坐标计算工具, 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\le n \le 10000 \1≤n≤10000 ,坐标保证满足 -2^{31} \le x,y \le 2^{31}-1 \−2
31
≤x,y≤2
31
−1 ,且数字部分仅含正数
输入描述:
一行字符串
输出描述:
最终坐标,以逗号分隔
输入:
A10;S20;W10;D30;X;A1A;B10A11;;A10;
复制
输出:
10,-10
复制
示例2
输入:
ABC;AKL;DA1;
复制
输出:
0,0
;隔开转换成列表
遍历坐标元素
将每个元素进行转换
转化坐标
有效
对字符进行识别
如果是A
元组(数字,0 )
如果是W
元组(0,数字)
判断无效
(第三个元素是字母)
加
遍历新列表
(累加,累加)"""
# str1 = "A10;S20;W10;D30;X;A1A;B10A11;;A10;"
str1 = input()
lis = str1.split(";")
# print(lis)
lis2 = []
# 转化坐标
for i in lis:
n = len(i)
# 不符合的情况
if n == 0 or n == 1 or n > 3:
continue
if not i[1:].isdigit() :
continue
# 可以转化成坐标的情况
if i[0] == "D":
lis2.append((int(i[1:]), 0))
if i[0] == "A":
lis2.append((-int(i[1:]), 0))
if i[0] == "W":
lis2.append((0, int(i[1:])))
if i[0] == "S":
lis2.append((0, -int(i[1:])))
# print(lis2)
# 遍历新列表
# (累加,累加)
x_sum = 0
y_sum = 0
for i in lis2:
x_sum += i[0]
# print(x_sum)
y_sum += i[1]
# print(y_sum)
print(x_sum, y_sum, sep = ",")
开发一个坐标计算工具, 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\le n \le 10000 \1≤n≤10000 ,坐标保证满足 -2^{31} \le x,y \le 2^{31}-1 \−2
31
≤x,y≤2
31
−1 ,且数字部分仅含正数
输入描述:
一行字符串
输出描述:
最终坐标,以逗号分隔
输入:
A10;S20;W10;D30;X;A1A;B10A11;;A10;
复制
输出:
10,-10
复制
示例2
输入:
ABC;AKL;DA1;
复制
输出:
0,0
;隔开转换成列表
遍历坐标元素
将每个元素进行转换
转化坐标
有效
对字符进行识别
如果是A
元组(数字,0 )
如果是W
元组(0,数字)
判断无效
(第三个元素是字母)
加
遍历新列表
(累加,累加)"""
# str1 = "A10;S20;W10;D30;X;A1A;B10A11;;A10;"
str1 = input()
lis = str1.split(";")
# print(lis)
lis2 = []
# 转化坐标
for i in lis:
n = len(i)
# 不符合的情况
if n == 0 or n == 1 or n > 3:
continue
if not i[1:].isdigit() :
continue
# 可以转化成坐标的情况
if i[0] == "D":
lis2.append((int(i[1:]), 0))
if i[0] == "A":
lis2.append((-int(i[1:]), 0))
if i[0] == "W":
lis2.append((0, int(i[1:])))
if i[0] == "S":
lis2.append((0, -int(i[1:])))
# print(lis2)
# 遍历新列表
# (累加,累加)
x_sum = 0
y_sum = 0
for i in lis2:
x_sum += i[0]
# print(x_sum)
y_sum += i[1]
# print(y_sum)
print(x_sum, y_sum, sep = ",")