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
要素をコンマと一緒に指定します。次に-replace
、最初の要素aと一致する数字ペアを正規表現*2
で囲み、括弧で囲みます。結果パイプ(入力のためにどの@(2,2,4,4)
ように見えるであろう(4*2),(2*2)
とオーバー)iex
(ショートInvoke-Expression
とに類似しeval
、実際の数値に乗算を変換)。結果の配列を$b
に格納し、それを括弧でカプセル化してパイプラインに配置し、で逆に$b
し[$b.count..0]
ます。結果の要素をパイプラインに残し、出力は暗黙的です。
テストケース
NB-- 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