如果一个字符串输入的字节可以是二进制、八进制或十六进制,则输出该字符串的ASCII等效值。
输入将以以下格式提供,例如:
501200100001147代表
0x50 0o120 0b01000011 0x47(在ASCII中)相当于
PPCG二进制、八进制和十六进制将分别提供8、3和2位数字。
为了解决这一挑战,必须只支持可打印的ASCII。这是包含32..126的范围。因此,不可能有歧义。请注意,
0开头,并且它的第二个字符是0或1。所有可打印的ASCII字符都以二进制(即以0开头)进行高位关闭,并且没有一个字符以十六进制或八进制的00或01开头。2-7和八进制的0-1开头。因此,有可能明确区分十六进制和八进制。您可以假设十六进制输入是以小写或大写形式提供的,以更方便的方式提供。
Regex使挑战的解析部分变得微不足道。我不想直接禁止regex的使用,但是如果您的非regex解决方案比使用regex的解决方案更长,可以随心所欲地发布它和“真正的”答案,因为我也有兴趣看到它。:)
由于这是密码-高尔夫,以字节为单位的最短代码将获胜。
测试用例:
In Out
-----------------------------------
501200100001147 | PPCG
5C01101111100 | \o@
313206306400110101 | 12345
2A200530402C | * + ,
0011111100111111 | ??
<empty string> | <empty string>发布于 2016-02-16 23:00:47
无Regex
x=input();i=0;s=""
while i<len(x):
a=x[i:i+2];c=int(a[0])
if a in["00","01"]:y=8;b=2
elif 1<c<8:y=2;b=16
elif c<2:y=3;b=8
s+=chr(int(x[i:i+y],b));i+=y
print(s)https://codegolf.stackexchange.com/questions/73309
复制相似问题