不久前,我购买了一个新钱包,该钱包可容纳8张卡(两面均为4张)。但是,我似乎拥有比这更多的卡片,并且我需要选择要随身携带的卡片。有些卡片比其他卡片使用得更多,但是我更喜欢随身携带的卡片不一定是我使用最多的卡片。
挑战
给定一堆纸牌,以我的喜好和限制尽可能的最好的方式返回我的钱包的布局。布局应如下所示:
__ __ (row 1)
__ __ (row 2)
__ __ (row 3)
__ __ (row 4)
目前,我摆出了以下几张纸牌-堆叠中总是有以下选择:
- 1张身份证(ID)
- 1张驾照(DL)
- 2张信用卡(CC)
- 5张借记卡(DC)
- 1张公共交通卡(PC)
- 1张健身房出入卡(GC)
- 随机商店和仓库(MC)的9张会员卡
我有一些偏好和限制:
- 卡按优先级排序:ID,DL,CC,DC,PC,GC,MC
- 卡按使用频率排序:CC,DC,PC,GC,MC,ID,DL
- 出于安全原因,借记卡和信用卡在我的钱包总数可以比所有其它卡的总和,将在我的钱包去(至多更多ň DC + ñ CC ≤ ñ ID + ñ DL + ñ PC + N GC + N MC +1)。
- 如果有的话,我的身份证和驾驶执照应始终排在第1行。这并不意味着其他卡可能不会在第1行占据位置。
- 堆栈中使用最频繁的卡应始终排在第4行。
规则
- 没有2张卡可以占据同一位置。
- 除非DC / CC限制生效,否则始终优先使用优先级较高的卡而不是优先级较低的卡。
- 第1行的ID / DL否决了频率规则:如果仅提供ID,则它将进入第1行,而第4行将为空!
- 只要保留输入堆栈的顺序,就可以以任何您喜欢的方式进行输入格式化。例如
ID,CC,PC,MC,MC,MC,DL
也可以作为1ID 1CC 1PC 3MC 1DL 0DC 0GC
或提供ID CC PC MC MC MC DL
。 输出格式确实有一些限制:行必须全部以换行开头,列必须以某种方式定界。只要不干扰4x2布局,就可以用任何您喜欢的方式显示空白点。
可以有多个解决方案/订单,这取决于您提供哪种输出。
- 您可以假设相同类型的卡总是在输入时分组。
- 除了上述标准 代码高尔夫球 规则和漏洞适用。
奖金
如果您还退还钱包中没有的任何卡,则可以删除15%的字节数。打印“很合适!” 如果没有剩余的卡。此额外的输出应与后勤布局明确分开。
例子
输入:
ID, DL, CC, GC, MC
2种可能的输出:
ID DL DL ID
__ __ or __ MC
MC __ __ __
CC GC GC CC
optional: It fits!
输入:
ID, CC, DC, PC, GC, MC, MC, MC, MC, MC
2种可能的输出:
ID MC GC ID
MC MC or MC PC
PC GC MC MC
CC DC DC CC
optional: e.g. (MC, MC) or (2MC)
输入:
DC, DC, CC, CC, GC, DL
2种可能的输出:
DL __ GC DL
__ __ or DC __
GC DC __ __
CC CC CC CC
optional: e.g. (DC) or (1DC)
输入:
CC, DC, DC, DC
2种可能的输出:
__ __ __ __
__ __ or __ __
__ __ __ __
CC __ __ CC
optional: e.g. (DC, DC, DC) or (3DC)
输入:
CC, CC, MC, MC, MC, MC, MC, MC, PC, DC, DC, DC, DC, DC, GC
2种可能的输出:
MC MC MC DC
PC GC or DC GC
DC DC PC MC
CC CC CC CC
optional: e.g. (DC, DC, DC, MC, MC, MC, MC) or (3DC, 4MC)
输入:
MC, MC, MC, MC, MC, MC, MC
2种可能的输出:
__ MC MC MC
MC MC or MC MC
MC MC MC __
MC MC MC MC
optional: It fits!
输入:
ID, CC
2种可能的输出:
ID __ __ ID
__ __ or __ __
__ __ __ __
CC __ CC __
optional: It fits!
这是 代码高尔夫球,因此最短的代码(以字节为单位)获胜。
您忘记了一些重要的卡片。;)
—
Sleafar