PowerShell v4, 144 ไบต์
$d=date;gjb|rjb
1..20|%{sajb{$x=date;sleep 3;((date)-$x).Ticks/1e7}>$null}
while(gjb -s "Running"){}(gjb|rcjb)-join'+'|iex
((date)-$d).Ticks/1e7
ชุด$d
เท่ากับGet-Date
และล้างออกประวัติงานใด ๆ Get-Job | Remove-Job
ที่มีอยู่ด้วย จากนั้นเราวนซ้ำ1..20|%{...}
และการวนซ้ำแต่ละครั้งจะStart-Job
ส่งผ่านบล็อกสคริปต์{$x=date;sleep 3;((date)-$x).ticks/1e7}
สำหรับงาน (หมายถึงแต่ละงานจะดำเนินการบล็อกสคริปต์นั้น) เราไพพ์เอาท์พุทนั้นไป>$null
เพื่อยับยั้งข้อเสนอแนะ (เช่นชื่องานสถานะ ฯลฯ ) ที่ได้รับคืน
ชุดสคริปต์บล็อก$x
ไปGet-Date
แล้วStart-Sleep
สำหรับ3
วินาทีแล้วยิงใหม่Get-Date
อ่านหัก$x
, ได้รับ.Ticks
และแบ่งโดย1e7
จะได้รับวินาที (ที่มีความแม่นยำ)
ย้อนกลับไปในเธรดหลักตราบใดที่งานยังคง-S
ยุ่งเหยิง"Running"
เราหมุนwhile
วงวนที่ว่างเปล่า เมื่อเสร็จแล้วเราGet-Job
จะดึงวัตถุสำหรับงานที่มีอยู่ทั้งหมดไปป์Receive-Job
ที่จะดึงเทียบเท่า STDOUT (เช่นสิ่งที่พวกเขาส่งออก) -join
ผลลัพธ์พร้อมกับ+
และท่อไปiex
( Invoke-Expression
และคล้ายกับeval
) สิ่งนี้จะเอาท์พุทเวลาสลีปผลลัพธ์บวกค่าใช้จ่าย
บรรทัดสุดท้ายมีความคล้ายคลึงกันซึ่งจะได้รับวันที่ใหม่ลบการประทับวันที่ต้นฉบับ$d
รับ.Ticks
และหารด้วย1e7
เพื่อแสดงเวลาดำเนินการทั้งหมด
NB
ตกลงดังนั้นนี้เป็นเพียงเล็กน้อยโก่งของกฎ เห็นได้ชัดว่าในการดำเนินการครั้งแรก PowerShell จำเป็นต้องโหลดแอสเซมบลี. NET จำนวนมากจากดิสก์สำหรับการดำเนินการเธรดต่าง ๆ เนื่องจากไม่ได้โหลดด้วยโปรไฟล์เชลล์เริ่มต้น การประหารชีวิตครั้งต่อไปเนื่องจากแอสเซมบลีที่อยู่ในหน่วยความจำแล้วทำงานได้ดี หากคุณปล่อยให้เชลล์หน้าต่างว่างนานพอคุณจะได้รับคอลเลคชั่นขยะในตัวของ PowerShell เพื่อมารวมกันและยกเลิกการโหลดแอสเซมบลีเหล่านั้นทั้งหมดทำให้การดำเนินการครั้งต่อไปใช้เวลานานในการโหลดซ้ำ ฉันไม่แน่ใจเกี่ยวกับวิธีนี้
คุณสามารถเห็นสิ่งนี้ในเวลาดำเนินการในการทำงานด้านล่าง ฉันเริ่มเปลือกสดนำทางไปยังไดเรกทอรีกอล์ฟของฉันและรันสคริปต์ การวิ่งครั้งแรกนั้นน่ากลัว แต่การวิ่งครั้งที่สองก็ทำได้ดี จากนั้นฉันก็ปล่อยเชลล์ไม่ได้ใช้งานเป็นเวลาสองสามนาทีเพื่อให้การรวบรวมขยะมาจากนั้นการรันนั้นจะยาวอีกครั้ง แต่การรันในภายหลังจะทำงานได้ดี
ตัวอย่างการวิ่ง
Windows PowerShell
Copyright (C) 2014 Microsoft Corporation. All rights reserved.
PS H:\> c:
PS C:\> cd C:\Tools\Scripts\golfing
PS C:\Tools\Scripts\golfing> .\wait-a-minute.ps1
63.232359
67.8403415
PS C:\Tools\Scripts\golfing> .\wait-a-minute.ps1
61.0809705
8.8991164
PS C:\Tools\Scripts\golfing> .\wait-a-minute.ps1
62.5791712
67.3228933
PS C:\Tools\Scripts\golfing> .\wait-a-minute.ps1
61.1303589
8.5939405
PS C:\Tools\Scripts\golfing> .\wait-a-minute.ps1
61.3210352
8.6386886
PS C:\Tools\Scripts\golfing>