保加利亚纸牌是马丁·加德纳(Martin Gardner)在《科学美国人》的数学专栏中最受欢迎的单人游戏。
您有N
相同的卡片,分成几堆。您从每堆纸牌中取出一张纸牌,并与移除的纸牌形成新纸堆。您重复此过程,直到达到已经看到的状态,因此继续操作将重复该循环。
例如,假设您有8
几张纸牌,分成一堆5
和一堆3
。我们在写从大到小的顺序堆大小:5 3
。这是游戏的文字记录:
5 3
4 2 2
3 3 1 1
4 2 2
首先,您从两堆纸叠中各取出一张卡片,留下堆4
和2
,以及新堆成的2
给予4 2 2
。下一步,将这些减小到3 1 1
一堆新的3
。最终,最后一步清空了已经出现的一堆堆大小1
和产量4 2 2
,因此我们停止了。
请注意,桩大小的总和保持不变。
您的目标是从给定的起始配置中打印游戏的副本。这是代码高尔夫,所以最少的字节获胜。
输入项
代表初始堆大小的降序正数列表。通过STDIN或功能输入进行输入。您可以使用所需的任何类似列表的结构。
您没有得到总卡数N
作为输入。
输出量
打印保加利亚纸牌游戏所经历的桩号顺序。请注意,需要打印,不能返回。每个步骤应该是自己的一行。
每行应有一个正数序列,其降序为no 0
。您可能有分隔符以及开始标记和结束标记(例如[3, 3, 1, 1]
)。这些数字可能有多个数字,因此应以某种方式将它们分开。
打印您看到的绒头大小的裂缝,直到达到并包括重复为止。因此,第一行应该是输入,最后一行应该是前一行的重复。不应有其他重复。
测试用例
>> [1]
1
1
>> [2]
2
1 1
2
>> [1, 1, 1, 1, 1, 1, 1]
1 1 1 1 1 1 1
7
6 1
5 2
4 2 1
3 3 1
3 2 2
3 2 1 1
4 2 1
>> [5, 3]
5 3
4 2 2
3 3 1 1
4 2 2
>> [3, 2, 1]
3 2 1
3 2 1
>> [4, 4, 3, 2, 1]
4 4 3 2 1
5 3 3 2 1
5 4 2 2 1
5 4 3 1 1
5 4 3 2
4 4 3 2 1
v$input()$
使用Q
。2.如果您以降序存储列表,则完全不需要N
:W!}QYQ~Y]Q=Q_S+fTmtdQ]lQ;Q