Codewars--Basic DeNico

Basic DeNico

Click here to get the problem!

Problem

在这里插入图片描述

My Solution:

def de_nico(key,msg):
    #key_sort = sorted(key)
    key_sort = "".join((lambda x:(x.sort(),x)[1])(list(key)))
    msgs = list(len(msg)*'n')
    dicts = {}
    sums = 0
    i = 0
    k = 0
    for item in key_sort:
        i += 1
        dicts[item] = i
    #print(dicts)
    for j in key:
        sums = sums*10+dicts[j]
    #print(sums)
    while True:
        if not msg[k:k+len(key)]:
            break
        else:
            #print(msg[k:k+len(key)])
            index = 0
            if (k+len(key))<=len(msg):
                for x,y,z in zip(msg[k:k+len(key)],msgs[k:k+len(key)],str(sums)):
                    msgs[k+index] = msg[k+int(z)-1]
                    index += 1
            else:
                for x,y,z in zip(msg[k:],msgs[k:],str(sums)):
                    msgs[k+index] = msg[k+int(z)-1]
                    index += 1
            #print(msgs)
        k += len(key)
    for x in reversed(msgs):
        if x==' ':
            msgs.remove(x)
        else:
            break
    final = ''.join(msgs)
    return final

The code by myself is not good. Let’s look the picture.
在这里插入图片描述一直提示的错误是下标越界,但是我也找不出为什么下标越界了,如果有知道的大佬,很开心能告诉我喔。嘻嘻。
最后为我还是看了一下正确答案,摘录了下来,留给后面的宝宝参考一下。

method1:

def de_nico(key, msg):
    ll, order, s = len(key), [sorted(key).index(c) for c in key], ''
    while msg:
        s, msg = s + ''.join(msg[i] for i in order if i < len(msg)), msg[ll:]
    return s.strip()

method2:

def de_nico(key,msg):
    result = ''
    counter = -1
    while len(result) < len(msg):
        counter += 1
        for i in [sorted(key).index(c) for c in key]:
            try:
                result += msg[i+counter*len(key)]
            except:
                continue
    return result.strip()

method3:

import itertools
def de_nico(key,msg):
    pack =[list(range(len(key)))]+list(list(msg[i:i+len(key)]) for i in range(0,len(msg),len(key)))
    sor = [sorted(key).index(i) for i in key]
    sorting = sorted(itertools.zip_longest(*pack,fillvalue=""), key=lambda col: sor.index(col[0]))
    return "".join(["".join(j) for i,j in enumerate(itertools.zip_longest(*sorting,fillvalue=" ")) if i>0]).strip(" ")

method4:

def de_nico(key,msg):
    result = ''
    counter = -1
    while len(result) < len(msg):
        counter += 1
        for i in [sorted(key).index(c) for c in key]:
            try:
                result += msg[i+counter*len(key)]
            except:
                continue
    return result.strip()
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值