介绍
这是长度为5的对数:
#####
我想将这些原木堆在一起。我的操作方式是将新的日志从右侧滑动到最上面的日志,并在它们的左端或右端对齐时停止滑动(不要问为什么)。如果新日志更长,它将一直滑动到最上面的日志的左端:
######## <-
#####
如果更短,则仅滑动直到其右端对齐:
###### <-
########
#####
当我将更多的原木滑入桩中时,它们的位置由当前最上面的原木确定:
##
######
###
####
##
######
########
#####
这看起来在物理上是不可能的,但让我们假装它可行。
任务
您的输入应该是一个非空的正整数列表,代表我的日志长度。最左边的数字是我放到堆中的第一个原木,因此它最终在底部。在上面的示例中,输入为[5,8,6,2,4,3,6,2]
。对于所得桩的每一列,您的输出应为越过该列的原木数量。在以上示例中,正确的输出为[2,2,3,3,3,2,4,6,3,3,1,2,2]
。
规则和计分
输入和输出可以采用任何合理的格式。输出只能包含正整数,即它不得包含前导或尾随0
。普通的代码高尔夫球规则适用:您可以编写完整的程序或函数,最低字节数获胜,并且禁止标准漏洞。
测试用例
[1] -> [1]
[4] -> [1,1,1,1]
[3,2] -> [1,2,2]
[2,3] -> [2,2,1]
[2,2,2] -> [3,3]
[2,3,2] -> [2,3,2]
[3,2,3] -> [1,3,3,1]
[1,3,2,2,1,3,1] -> [2,3,5,1,2]
[4,3,4,2,4,3,4,2] -> [1,3,3,5,5,3,4,2]
[5,8,6,2,4,3,6,2] -> [2,2,3,3,3,2,4,6,3,3,1,2,2]
[5,10,15,1,1,1,1,1,2] -> [3,3,3,3,3,2,2,2,2,2,1,1,1,1,7,1]
[13,12,2,10,14,12] -> [1,2,2,2,2,2,2,2,2,2,2,5,5,3,3,3,3,3,3,3,3,2,2,2,2]
[12,14,3,6,13,1,1] -> [2,2,2,2,2,2,2,2,2,2,2,5,4,4,2,2,2,1,1,1,1,1,1,3]
[7,5,12,5,1,10,14,5] -> [1,1,3,3,3,3,3,1,1,2,2,2,2,5,2,2,2,2,2,2,2,2,3,2,2,2,2]
[14,5,1,3,12,6,2,2,1,7,9,15] -> [1,1,1,1,1,1,1,1,1,2,2,2,2,5,2,2,1,1,1,2,2,2,2,4,8,3,3,3,3,3,3,2,2,1,1,1,1,1,1]
2
我们可以轻松地“假装”它起作用,只需将它们全部放在地面上,而不是将它们堆叠在空中(将它们彼此相邻滑动)。
—
乔纳森·艾伦
最后一个测试用例看起来像挪威!
—
Stewie Griffin