codewars

codewars:Tournament Cross Table with Sonneborn-Berger Score

import copy

def crosstable(players, result):
#     return (
#         "#  Player             1 2 3  Pts  SB\n"
#         "=====================================\n"
#         "1  Boris Spassky        1 =  1.5 1.25\n"
#         "2  Garry Kasparov     0   1  1.0 0.50\n"
#         "3  Viswanathan Anand  = 0    0.5 0.75")
    num_players = len(players)
    str_num = [str(i) for i in range(num_players+1)]
    str_num = ' '.join(str_num[1:])
    res = f'# Player {str_num} Pts SB\n'
    res += '==================================================\n'
    print(res)
    dict_res = {}
    for i in range(len(result)):
        sum_n = sum([0 if x==None else x for x in result[i]])
        result[i].append(sum_n)
        
    results = copy.deepcopy(result)
    for i in range(len(result)):
        SB_num1, SB_num2 = 0, 0
        for j in range(len(result[0])):
            if result[i][j] == 1:
                SB_num1 += result[j][-1]
            if result[i][j] == 0.5:
                SB_num2 += result[j][-1]

        results[i].append(SB_num1 + SB_num2 / 2)

    # 获取列表的下标和值
    results = sorted(enumerate(results), key=lambda x:x[1][num_players:], reverse=True)
    flag = [i[0] for i in results]

    for i in range(len(results)):
        reslist = [None] * (num_players+2)
        for j in range(len(reslist)):
            if j >= num_players:
                reslist[j] = results[i][1][j]
            else:    
                reslist[j] = results[i][1][flag[j]]
        results[i] = reslist

    for i in range(num_players):
        dict_res[players[flag[i]]] = results[i]
    for keys, values in dict_res.items():
        for i in range(len(values)):
            if values[i] == None:
                values[i] = ' '
            if values[i] == 0.5:
                values[i] = '='
            else:
                values[i] = str(values[i])
        res = str(keys) + ' '.join(values)
        print(res)

输出:

# Player 1 2 3 4 5 6 Pts SB
==================================================

Renee Preston  = = = 1 1 3.5 7.25
Deandre Bullock=   = = = 1 3.0 6.75
Norah Underwood= =   = 1 = 3.0 6.75
George Bautista= = =   0 1 2.5 6.25
Cruz Sullivan0 = 0 1   0 1.5 4.0
Emmett Frost0 0 = 0 1   1.5 3.0

和要求的结果不太一样
记录一下大概思路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值