创新是一种纸牌游戏,玩家在从史前时代到现代时代的各个年龄段中进行战斗,以期比对手更快地获得成就。
创新中的每张卡都是唯一的,并为玩家提供了许多图标。如果我们将每张卡都视为2x3网格,那么左右两侧四个插槽中的三个插槽将始终被图标占用(黑色六边形中的符号不计算在内)。
该游戏有6种图标(城堡,树冠,树叶,灯泡,工厂和时钟),我们将使用chars任意代表它们012345
。使用#
代表黑色六边形,我们可以使用4个字符来表示每个卡上的图标。例如,上面的卡片是
0.. #.. 3.. 1.. -> 03#0 #331 355# 144#
3#0 331 55# 44#
现在,在“创新”中,游戏区域中的纸牌被分组为一堆*,以四种方式之一展开。对于每个示例,我们将使用上面的纸牌,假设最左边的纸牌03#0
位于堆的顶部。
无花哨:只有最上面的卡片可见
0..
3#0
向左张开:顶部的卡片完全可见,下面所有卡片的右三分之一
0..|.|.|.|
3#0|1|#|#|
向右张开:顶部的卡片完全可见,而下面所有卡片的左三分之一
1|3|#|0..
4|5|3|3#0
向上张开:顶部的卡片完全可见,下面所有卡片的下半部分也完全可见。
0..
3#0
---
331
---
55#
---
44#
挑战
输入将是由空格分隔的单个字符串,该字符串由两部分组成:
- 展开方向,是中的一个
!<>^
,分别表示不展开,向左展开,向右展开或向上展开。 - 非空卡片列表,每个卡片长4个字符,由chars组成
012345#
。最左边的卡片在纸堆的顶部,每张卡片正好包含一张#
。
答案可能是函数,完整程序或等效的。您可以选择展开方向是第一个还是最后一个,即选择以下两种格式之一:
> 03#0 #331 355# 144#
03#0 #331 355# 144# >
输出将是六个数字的列表,代表每个图标的计数,例如,上面的示例卡:
! 03#0 #331 355# 144# -> 2 0 0 1 0 0
< 03#0 #331 355# 144# -> 2 1 0 1 0 0
> 03#0 #331 355# 144# -> 2 1 0 3 1 1
^ 03#0 #331 355# 144# -> 2 1 0 3 2 2
例如,no splay案例具有两个0
图标和一个3
图标,显示第一行。请注意#
,由于黑色六边形不是图标,因此我们不计算s。
您可以选择任何合理且明确的方式表示列表,例如,以分隔符分隔或使用语言的自然列表表示法。
测试用例
! 113# -> 0 2 0 1 0 0
< 113# -> 0 2 0 1 0 0
> 113# -> 0 2 0 1 0 0
^ 113# -> 0 2 0 1 0 0
! 000# 12#2 -> 3 0 0 0 0 0
< 000# 12#2 -> 3 0 1 0 0 0
> 000# 12#2 -> 3 1 1 0 0 0
^ 000# 12#2 -> 3 0 2 0 0 0
! 000# 111# 222# -> 3 0 0 0 0 0
< 000# 111# 222# -> 3 0 0 0 0 0
> 000# 111# 222# -> 3 2 2 0 0 0
^ 000# 111# 222# -> 3 2 2 0 0 0
! 335# #101 21#2 333# 2#20 3#33 4#54 #133 3#33 32#2 -> 0 0 0 2 0 1
< 335# #101 21#2 333# 2#20 3#33 4#54 #133 3#33 32#2 -> 1 1 2 5 1 1
> 335# #101 21#2 333# 2#20 3#33 4#54 #133 3#33 32#2 -> 0 3 3 7 1 1
^ 335# #101 21#2 333# 2#20 3#33 4#54 #133 3#33 32#2 -> 2 4 4 10 1 2
请注意,类似这样的内容!
是无效输入,因为保证列表是非空的。
*就此挑战而言,我们将忽略绒头颜色。