PowerShell v2 +, 81 octets
param($n)($b=$n[$n.count..0]-join','-replace'(\d+),\1','($1*2)'|iex)[$b.count..0]
Prend l'entrée en tant que tableau explicite $n
, l'inverse $n[$n.count..0]
, -join
s les éléments avec une virgule, puis regex est -replace
une paire de chiffres correspondante avec le premier élément, a *2
, et entourée de parenthèses. Les tubes qui résultent (qui @(2,2,4,4)
ressemblera à l' entrée (4*2),(2*2)
) à iex
(abrégé Invoke-Expression
et similaire à eval
), qui convertit la multiplication en nombres réels. Stocke le tableau résultant dans $b
, encapsule celui-ci entre parenthèses pour le placer sur le pipeline, puis l'inverse $b
avec [$b.count..0]
. Laisse les éléments résultants sur le pipeline et la sortie est implicite.
Cas de test
NB-- Dans PowerShell, le concept de "retourner" un tableau vide n'a pas de sens - il est converti$null
en dès qu'il quitte la portée - et équivaut donc à ne rien renvoyer, ce qui est fait ici dans le premier exemple. (après quelques erreurs vachement verbeuses). De plus, la sortie ici est séparée par des espaces, car c'est le séparateur par défaut pour les tableaux stringifiés.
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