不能将多个字符编码为一元,只能将单个字符编码



我试图将字符串编码为一元,但由于某种原因,它只适用于单个字母。下面是我的代码:

import sys
import math
message = input()
def getNumberFromString(string):
got = ""
for item in bytes(string, "ascii"):
got += str(item)
return int(got)
def getBinaryFromNumber(number):
return int("{0:b}".format(number))
def encode(number):
current = None
number = str(number)
got = ""
for letter in number:
if letter == "0":
if current != "0":
current = "0"
got += " 00 "
got += "0"
else:
if current != "1":
current = "1"
got += " 0 "
got += "0"
return got[1:]
gotNumber = getNumberFromString(message)
gotBinary = getBinaryFromNumber(gotNumber)
print(encode(gotBinary))

codingame。com的挑战,https://www.codingame.com/ide/puzzle/chuck-norris

对于单字母字符串,它工作得很好,例如C。但是对于CC来说,它返回一个错误的一元数:

消息CC:

失败

Found: 0000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000

期望:0000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000

您可以在处理1和0序列之前将每个字符的位组合成单个位字符串

例如:

def unarize(S):
bits  = "".join(f"{ord(c):07b}" for c in S)
bits  = bits.replace("01","0 0 1").replace("10","1 00 0")
return "00 "[bits>"1":] + bits.replace("1","0")

print(unarize("CC"))

# 0 0 00 0000 0 000 00 0000 0 00
print(unarize("LOL"))
# 0 0 00 00 0 00 00 00 0 0 00 00 0 00000 00 00 0 00 00 00

顺便说一句,真正的查克诺里斯可能更有效率,只需要在结果开始时显示一次0/00,因为之后0序列在表示1和0之间交替。每个后面的方块前面的0/00是多余的,查克·诺里斯没有多余的动作。

最新更新