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

Can't encode multiple characters into unary, only single ones

我正在尝试将字符串编码为一元,但出于某种原因,它只适用于单个字母。 这是我的代码:

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 例如,它返回一个错误的一元:

留言抄送:

失败

找到:0 00 00 0 0 0 00 00 0 00 00 0 0 0000

预期:0 0 00 0000 0 000 00 0000 0 00

在处理 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

顺便说一句,真正的 Chuck Norris 可能会更有效率,并且只需要在结果开头使用一次 0/00 指示符,因为之后零序列在表示 1 和 0 之间交替。每个后续块前面的 0/00 都是多余的,Chuck Norris 没有做多余的动作。