PowerShell v2 +,81字节
param($n)($b=$n[$n.count..0]-join','-replace'(\d+),\1','($1*2)'|iex)[$b.count..0]
将输入作为一个显式数组$n
,将其反转$n[$n.count..0]
,将-join
s个元素与一个逗号一起,然后将正则表达式-replace
与第一个元素a匹配的数字对与正则表达式*2
包围。产生的管道(用于输入的管道@(2,2,4,4)
看起来像(4*2),(2*2)
)到iex
(的缩写Invoke-Expression
,类似于eval
),将乘法转换为实际数字。将结果得到的数组$b
,封装在括号将它放置在管道上,然后反转$b
用[$b.count..0]
。将结果元素留在管道上,并且输出是隐式的。
测试用例
注意:在PowerShell中,“返回”一个空数组的概念是没有意义的-它$null
会在离开范围后立即转换为空数组-因此,它等同于不返回任何内容,这是第一个示例中的操作(经过一些邪恶的冗长的错误)。此外,此处的输出以空格分隔,因为这是字符串化数组的默认分隔符。
PS C:\Tools\Scripts\golfing> @(),@(2,2,4,4),@(2,2,2,4,4,8),@(2,2,2,2),@(4,4,2,8,8,2),@(1024,1024,512,512,256,256),@(3,3,3,1,1,7,5,5,5,5)|%{"$_ --> "+(.\2048-like-array-shift.ps1 $_)}
Invoke-Expression : Cannot bind argument to parameter 'Command' because it is an empty string.
At C:\Tools\Scripts\golfing\2048-like-array-shift.ps1:7 char:67
+ param($n)($b=$n[$n.count..0]-join','-replace'(\d+),\1','($1*2)'|iex)[$b.count. ...
+ ~~~
+ CategoryInfo : InvalidData: (:String) [Invoke-Expression], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.InvokeExpressionCommand
Cannot index into a null array.
At C:\Tools\Scripts\golfing\2048-like-array-shift.ps1:7 char:13
+ param($n)($b=$n[$n.count..0]-join','-replace'(\d+),\1','($1*2)'|iex)[$b.count. ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArray
-->
2 2 4 4 --> 4 8
2 2 2 4 4 8 --> 2 4 8 8
2 2 2 2 --> 4 4
4 4 2 8 8 2 --> 8 2 16 2
1024 1024 512 512 256 256 --> 2048 1024 512
3 3 3 1 1 7 5 5 5 5 --> 3 6 2 7 10 10