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 องค์ประกอบด้วยกันด้วยเครื่องหมายจุลภาคแล้ว regex -replace
SA จับคู่คู่หลักที่มีองค์ประกอบแรก*2
และรายล้อมไปใน parens ท่อที่เป็นผลลัพธ์ (ซึ่งสำหรับการป้อนข้อมูล@(2,2,4,4)
จะมีลักษณะ(4*2),(2*2)
) ไปเป็นiex
(ย่อมาจากInvoke-Expression
และคล้ายกับeval
) ซึ่งแปลงการคูณเป็นตัวเลขจริง เก็บอาร์เรย์ผลในการเข้า$b
, สุนทรีย์ว่าใน parens ที่จะวางไว้ในท่อแล้วกลับด้วย$b
[$b.count..0]
ปล่อยให้อิลิเมนต์ที่เกิดขึ้นบนไพพ์ไลน์และเอาต์พุตเป็นค่าปริยาย
กรณีทดสอบ
NB -ใน PowerShell แนวคิดของ "การคืน" อาเรย์ที่ว่างเปล่านั้นไม่มีความหมาย - มันถูกแปลง$null
เป็นทันทีที่มันออกจากขอบเขต - และมันก็เท่ากับการคืนค่าอะไรซึ่งเป็นสิ่งที่ทำในตัวอย่างแรก (หลังจากข้อผิดพลาด verbose บางอย่างชั่วร้าย) นอกจากนี้ผลลัพธ์ที่นี่จะถูกคั่นด้วยช่องว่างเนื่องจากเป็นตัวคั่นเริ่มต้นสำหรับอาร์เรย์ที่เป็นสตริง
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