奖牌榜
* * * *
拉格朗日计划
* * * *
奖牌榜

短码高尔夫按照提交的代码的长度排名授予以下奖牌:

第三名授铜牌 🥉,第二名授银牌 🥈,第一名授金牌 🥇。此外,若第一名只有一个(无其它并列第一者),则还额外授予钻石 💎。

给定一组升序排列的代码长度,输出对应的奖牌榜情况。

注:原题面的含义很模糊,现作补充说明如下:

数字越小表示排名越前。

若金牌数超过1人,则不授银牌。

若金牌和银牌数超过3人,则不授铜牌。

输出格式为 a 💎 b 🥇 c 🥈 d 🥉,表示四种奖牌的数量分别是a,b,c,d,但若某一项的人数为0,则不显示。例如有两人并列第一(此时无银牌,第三人只能得铜牌),三人得铜牌的情况应显示为2 🥇 3 🥉

本题难度:



解答

先计算第一名的数量,假设有x个,那么列表中下标为x的就是第二名的得分,以此类推。

用内建函数count计数,按规则计算四种奖牌的数量,最后拼接字符串输出。

需要注意的若列表中只有一种分数,那么按上述取法可能会下标越界,因此在原列表后添加一个元素0以避免此类情况。

最终代码有两行。

代码长度:191字节 vs. 全站第一:129字节。

import sys
for a in sys.argv[1:]:b=[*map(int,a.split())];c=b+[0];d=b.count;x=d(b[0]);u=x<2;y=d(c[x])*u;z=d(c[x+y])*(x+y<3);print("1💎 "*u+f"{x}🥇"+(f" {y}🥈")*(y>0)+(f" {z}🥉")*(z>0))