PowerShell v2 +, 81 Byte
param($n)($b=$n[$n.count..0]-join','-replace'(\d+),\1','($1*2)'|iex)[$b.count..0]
Nimmt die Eingabe als explizites Array $n
, kehrt sie um $n[$n.count..0]
, setzt -join
die Elemente zusammen mit einem Komma und fügt dann ein -replace
übereinstimmendes Ziffernpaar in das erste Element ein *2
, a und ist in Parens eingeschlossen. Pipes, die sich ergeben (was für die Eingabe @(2,2,4,4)
so aussieht (4*2),(2*2)
), wechseln zu iex
(kurz für Invoke-Expression
und ähnlich wie eval
), wodurch die Multiplikation in tatsächliche Zahlen umgewandelt wird. Speichert das resultierende Array in $b
, kapselt es in Parens, um es in der Pipeline zu platzieren, und kehrt es dann $b
mit um [$b.count..0]
. Lässt die resultierenden Elemente in der Pipeline und die Ausgabe ist implizit.
Testfälle
NB: In PowerShell ist das Konzept, ein leeres Array "zurückzugeben", bedeutungslos - es wird konvertiert,$null
sobald es den Gültigkeitsbereich verlässt - und entspricht daher der Rückgabe von nichts, wie hier im ersten Beispiel beschrieben (Nach einigen boshaften Fehlern). Darüber hinaus ist die Ausgabe hier durch Leerzeichen getrennt, da dies das Standardtrennzeichen für Zeichenfolgen-Arrays ist.
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