谜题是由数字和字母组成的乱码。经过管家阿福的仔细分析,乱码规律如下:
乱码开头一定是数字,数字代表了索引
数字(1-9)代表了下一个字符开始计算的索引
根据索引读取字符内容
读取到0时字符结束
比如以下的乱码:1B1a1t1m22a333n0
破解之后为:Batman
输入
输入第一行为整数n,代表一共给出n行乱码
下面n行的每一行都是单独的乱码
输出
输出n行乱码的解,每个解单独一行
输出样例
1B1a1t1m22a333n0
1J22o1k1e1r0
输出样例
Batman
Joker
谜题是由数字和字母组成的乱码。经过管家阿福的仔细分析,乱码规律如下:
乱码开头一定是数字,数字代表了索引
数字(1-9)代表了下一个字符开始计算的索引
根据索引读取字符内容
读取到0时字符结束
比如以下的乱码:1B1a1t1m22a333n0
破解之后为:Batman
输入
输入第一行为整数n,代表一共给出n行乱码
下面n行的每一行都是单独的乱码
输出
输出n行乱码的解,每个解单独一行
输出样例
1B1a1t1m22a333n0
1J22o1k1e1r0
输出样例
Batman
Joker
代码
#!/sur/bin/nve python
# coding: utf-8
def decode(s):
''' 解析乱码 '''
result = [] # 解析单个字符列表初值。
k = 0 # 字符串下标初值。
while k < len(s):
if s[k] == '0':
break # 遇到结束解码标志'0',结束循环。
if s[k].isdigit():
k += int(s[k]) # 如果遇到数字字符,则从当前位置往后跳转数字位字符找到目标字符。
result.append(s[k]) # 追加到单个字符列表。
k += 1 # 下标自增1。
return ''.join(result) # 拼接返回找到的目标字符串。
if __name__ == '__main__':
text = '''
2
1B1a1t1m22a333n0
1J22o1k1e1r0
'''
print(f"\n输入:{text}\n\n输出:")
for i in text.split('\n')[2:4]:
print(decode(i))