美国情景喜剧之友的六个主要演员均同意,在整个系列的整个过程中(至少在第二季之后),他们将获得相同的薪水。但这并不意味着他们都具有相同的播放时间,也不意味着它们在屏幕上彼此交互的时间相同。
在这个挑战中,您将编写一个程序来帮助确定哪些Friends朋友确实是最好的。
设定
考虑观看“ 朋友”的情节或场景,并准确记录每次相机拍摄期间谁在屏幕上显示多长时间。
我们将缩写每个字符的名称:
然后,对于每个相机镜头(或角色每次进入/退出镜头),我们都会列出屏幕上的人物。例如:
504 CRS
200 J
345 MP
980
2000 CJMPRS
这就是说:
- 在504毫秒内,钱德勒,雷切尔和罗斯出现在屏幕上。
- 然后持续200毫秒,乔伊就呆了。
- 然后持续345毫秒,莫妮卡和菲比都在。
- 然后持续980毫秒,屏幕上没有显示6个主要角色。
- 然后两秒钟,所有的人都。
(这不是来自实际剪辑,而是由我组成的。)
请注意,以下内容是等效的:
504 CRS
1 J
199 J
345 MP
980
2000 CJMPRS
为了分析哪些字符组合具有最大的屏幕显示时间,我们查看了6个字符的所有64个可能子集,并总计了它们的屏幕显示时间。如果在拍摄镜头期间某个子集中的每个人都出现在屏幕上,即使其中的字符比该子集中的人物更多,该镜头拍摄的时间也会添加到该子集的总屏幕时间中。
空子集有一个例外-仅计算不包含6个主要角色的场景。
因此,以上示例的分析将是:
980
2504 C
2200 J
2345 M
2345 P
2504 R
2504 S
2000 CJ
2000 CM
2000 CP
2504 CR
2504 CS
2000 JM
2000 JP
2000 JR
2000 JS
2345 MP
2000 MR
2000 MS
2000 PR
2000 PS
2504 RS
2000 CJM
2000 CJP
2000 CJR
2000 CJS
2000 CMP
2000 CMR
2000 CMS
2000 CPR
2000 CPS
2504 CRS
2000 JMP
2000 JMR
2000 JMS
2000 JPR
2000 JPS
2000 JRS
2000 MPR
2000 MPS
2000 MRS
2000 PRS
2000 CJMP
2000 CJMR
2000 CJMS
2000 CJPR
2000 CJPS
2000 CJRS
2000 CMPR
2000 CMPS
2000 CMRS
2000 CPRS
2000 JMPR
2000 JMPS
2000 JMRS
2000 JPRS
2000 MPRS
2000 CJMPR
2000 CJMPS
2000 CJMRS
2000 CJPRS
2000 CMPRS
2000 JMPRS
2000 CJMPRS
我们可以看到J
(仅Joey)有2200ms的屏幕显示时间,因为他自己有200个屏幕,每个人都有2000个屏幕时间。
挑战
编写一个包含字符串或文本文件的程序,例如
504 CRS
200 J
345 MP
980
2000 CJMPRS
其中每行的格式为[time in ms] [characters on screen]
,并输出屏幕上6个字符的64个子集中的每个子集在屏幕上所花费的总时间,其中每行的格式为[total time in ms for subset] [characters in subset]
(如上所述)。
输入可以作为标准输入,命令行或函数的字符串,也可以是包含数据的文本文件的名称。
- 毫秒数将始终为正整数。
- 字符字母将始终
CJMPRS
按字母顺序排列。 - 您可以选择假设场景中没有字符时存在尾随空格(例如
980
)。 - 您可以选择假定尾随换行符。
- 输入将至少有1行,并且可能有许多行。
输出应作为64行字符串打印或返回或写入另一个文本文件。
- 这些行可以以任何顺序排列。
- 字符字母不必按
CJMPRS
顺序排列。 - 确实需要列出总时间为0毫秒的子集。
- 在空子集总数之后可以有一个尾随空格。
- 可能会有尾随换行符。
(这个问题当然可以推广到更多的字符,但是我们将继续使用6个CJMPRS
Friends字符。)
以字节为单位的最短代码获胜。
请注意,我实际上很喜欢Friends,并不认为某些角色比其他角色更重要。统计数据将是有趣的。;)