codewars4

Recover a secret string from random triplets

def recoverSecret(triplets):
    res=''
    while triplets!=[]:
        non_firsts=[num for t in triplets for num in t[1:]]
        firsts=[t[0] for t in triplets]
        for f in firsts:
            if f not in non_firsts:
                res+=f
                for t in triplets:
                    if t[0]==f:
                        t.pop(0)
                break
        triplets=[t for t in triplets if t!=[]]
    return res

每次可以确定谁在最前面

def recoverSecret(triplets):
  r = list(set([i for l in triplets for i in l]))
  for l in triplets:
    fix(r, l[1], l[2])
    fix(r, l[0], l[1])
  return ''.join(r)

def fix(l, a, b):
   """let l.index(a) < l.index(b)"""
   if l.index(a) > l.index(b):
       l.remove(a)
       l.insert(l.index(b), a)

判断每个子列表中先后顺序,将其在r列表中的位置按子列表中排好,但是若原列表中有重复元素,set()会把重复的元素去除
Getting along with Integer Partitions
这道题原意是输入一个整数,然后将其分解为若干个数字的和,例如:

5 = 5
5 = 4 + 1
·
·
·
5 = 1 + 1 + 1 + 1 + 1
于是这样就形成了一个集合:

enum(5)-> [[5],[4,1],[3,2],[3,1,1],[2,2,1],[2,1,1,1],[1,1,1,1,1]]
接下来计算每个子集合的积(product),并去重、排序,于是得到:

prod(5) -> [1,2,3,4,5,6]
接下来就是求这个数组中的极差、平均数和中位数了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值