Codingame平台“CHUCK NORRIS”的Python实现

一、CodinGame平台极简介绍

在这里插入图片描述
CodinGame是一个家法国创业公司打造的创新型编程学习平台。将编程与游戏结合,但又不是游戏开发,也不是游戏化,只是将程序代码的逻辑与实际游戏相连,能够或得实时视觉反馈。
对于每一种练习,可以从20种语言(Python、Java、C等)中选择自己喜欢的进行编程;平台提供多人游戏模式,通过编程游戏对抗,看看谁的代码效率更高。

二、CHUCK NORRIS介绍

该练习在平台上属于Easy类别,通过率目前为73%,可以说平台上大部分人都会尝试解答。涉及的知识有ConditionsLoopsEncodingStrings,本文通过Python 3 进行编程解决。
1、 The Goal
带有0和1的二进制数很好,但是只有0或几乎为0的二进制数更好!这是 Chuck Norris设计的一个概念,用来发送所谓的一元信息。
编写一个程序,该程序将传入的消息作为输入,并将使用Chuck Norris的方法编码的消息显示为输出。

2、Rule
(1). 输入消息由ASCII字符(7位)组成
(2). 编码的输出消息由0个块组成
(3). 一个块与另一个块之间用一个空格隔开
(4). 两个连续的块用于产生一系列相同的值位(只有1或0个值)
-第一块:总是0或00。如果它是0,那么这个级数包含1,如果不是,它包含0
-第二个数据块:这个数据块中的0是这个序列中的比特数

3、Example
C在二进制中表示为1000011,用该方法编码为:0 0 00 0000 0 00
0 0(第一个数据块只有一个1)
00 0000 (第二个数据块有四个0)
0 00 (第三个数据块有两个1)

三、分析及注意点

每个块第一部分的的0分表代表二进制中的1或0,其中0→1,00→0
每个快中第二部分0的个数代表第一部分所表示数字的个数,即
0 0 表示一个1
0 00表示两个1
0 000表示三个1

00 0 表示一个0
00 00表示两个0
00 0000表示四个0

值得注意的是输进的字符二进制编码不全为7位数,例如**%**的二进制表示为100101,为六位数,则需要在前面补0

四、代码如下

std_input = input()
#得到字符的二进制编码
sstr=[bin(ord(c)).replace('0b', '') for c in std_input]
for i in range(len(sstr)):
    #如果该字符的二进制不满足7位,则用0补足
    if sstr[i] != 7:
        sstr[i] = '0'*(7-len(sstr[i]))+sstr[i]
message=''.join(sstr) #将二进制连接
code = ''
n = 1;m=1
for i in range(len(message)):
    '''
    将最后一个元素与其他元素分开
    进行判断和赋值
    '''    
    a = message[i]
    if i < (len(message) - 1):
        if a == '1':
            #若当前元素与下一元素相等,则计数加1,否则,对当前元素编码,赋值
            if a == message[i + 1]:
                n += 1
            else:
                code += '0' + ' ' + '0' * n + ' '
                n = 1
        else:
            if a == message[i + 1]:
                m += 1
            else:
                code += '00' + ' ' + '0' * m + ' '
                m = 1
    else:
        #最后一个元素若与前一个元素相等,则进行*n赋值操作,若不等,则对最后一个元素进行编码,赋值
        if a == '1':
            if a == message[i - 1
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值