Codingame Chuck Norris游戏:二进制转Unary编码代码无输出求助
解决Chuck Norris编码无输出问题
嘿,我来帮你搞定这个Codingame的Chuck Norris编码问题~你说print语句没输出,大概率是代码逻辑没写完,导致没有生成编码结果也就没法输出。我们先把完整的实现逻辑理清楚,再一步步解决:
编码规则回顾
先把整个流程明确下来,避免走偏:
- 将输入字符串的每个字符转换为7位二进制字符串(不足7位要补前导0,比如字符C的ASCII是67,二进制是
1000011,刚好7位) - 遍历二进制字符串,把连续相同的0/1分成一组
- 对每个分组按照规则转码:
- 如果是连续的1:输出
0+ 空格 + 对应长度的0(比如1个1就是0 0,3个1就是0 000) - 如果是连续的0:输出
00+ 空格 + 对应长度的0(比如4个0就是00 0000)
- 如果是连续的1:输出
- 把所有分组的结果用空格连接起来,就是最终的unary编码
完整可运行代码
import sys def chuck_norris_encode(message): # 第一步:把字符串转成7位二进制串 binary_str = '' for char in message: # ord()获取字符ASCII值,format转成7位二进制(补前导0) binary_str += format(ord(char), '07b') if not binary_str: return "" # 第二步:分组统计连续的0/1 encoded_parts = [] current_char = binary_str[0] count = 1 for c in binary_str[1:]: if c == current_char: count += 1 else: # 处理当前分组 if current_char == '1': encoded_parts.append(f"0 {'0'*count}") else: encoded_parts.append(f"00 {'0'*count}") current_char = c count = 1 # 别忘了处理最后一个分组 if current_char == '1': encoded_parts.append(f"0 {'0'*count}") else: encoded_parts.append(f"00 {'0'*count}") # 拼接所有编码片段 return ' '.join(encoded_parts) # 读取输入(适配Codingame的标准输入) message = input().strip() # 生成编码结果 result = chuck_norris_encode(message) # 输出最终结果 print(result)
为什么你的代码没输出?
你提供的代码片段只写了导入模块和message = input...,没有后续的转码逻辑和输出语句,自然不会有任何内容打印出来。上面的代码补全了所有关键步骤:
- 正确转换字符串为7位二进制串
- 统计连续相同字符的分组
- 按照规则生成编码片段
- 最后用print输出结果
测试示例(输入CC)
当输入CC时:
- 每个C转二进制是
1000011,拼接后得到二进制串10000111000011 - 分组后是:
1(1个)、0000(4个)、111(3个)、0000(4个)、11(2个) - 对应编码片段:
0 0、00 0000、0 000、00 0000、0 00 - 最终输出:
0 0 00 0000 0 000 00 0000 0 00,完全符合你给出的示例要求
内容的提问来源于stack exchange,提问作者remc
相关产品推荐
相关产品推荐

