竞技世界:笔试题(20190915)

字符串排序

提取排序后,按索引赋值返回。

def string_resort(seq):
    container = []
    for su in seq:
        if su.isalpha():
            container.append(su)
    container.sort()
    idx = 0
    for si in range(len(seq)):
        if seq[si].isalpha():
            seq[si] = container[idx]
            idx += 1
    return seq


if __name__ == '__main__':
    seq = list(input().strip())
    if len(seq) > 60:
        res = string_resort(seq[:60]) + seq[60:]
    else:
        res = string_resort(seq)
    print(''.join(res))


'''
Welcom to JJWorld, 17 Go Go Go!
'''

键值对拆分

使用字符串的split方法来解决,输出可以使用字符串的join方法来控制格式。

def split_string(s, each, gap):
    seq = s.split(each)
    res = []
    for su in seq:
        left, right = su.split(gap)
        res.append(''.join([left, '->', right]))
    return res


if __name__ == '__main__':
    s = input().strip()
    each = input().strip()
    gap = input().strip()
    res = split_string(s, each, gap)
    print(' '.join(res))


'''
a1=1&b1=2&c1=3
&
=
'''

在线时长计算

按用户建立关于记录的字典,记录由时间和类型的键值对组成。对单个用户进行数据提取,分别对登录和下线的时间线排序,相应的累加其减值即为最终结果。

import sys
from collections import defaultdict


def online_times(values):
    if not values:
        return 0
    res = dict()
    for user, value in values.items():
        left, right = split_value(value)
        cur = 0
        for lu, ru in zip(left, right):
            cur += (ru-lu)
        res[user] = cur
    return res


def split_value(value):
    left, right = [], []
    for vk, vu in value.items():
        if vu == 0:
            left.append(vk)
        else:
            right.append(vk)
    left.sort()
    right.sort()
    return left, right


if __name__ == '__main__':
    values = defaultdict(dict)
    for line in sys.stdin:
        user, time, type = list(map(int, line.strip().split(',')))
        values[user][time] = type
    res = online_times(values)
    for rk, ru in res.items():
        print(','.join([str(rk), str(ru)]))

'''
1001,1565855421,0
1002,1565855421,0
1001,1565855424,1
1001,1565855426,0
1002,1565855427,1
1001,1565855428,1
'''

(最近更新:2019年09月16日)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值