PowerShell v4, 144 byte
$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
Đặt $d
bằng Get-Date
và xóa mọi lịch sử công việc hiện có với Get-Job | Remove-Job
. Sau đó chúng ta lặp 1..20|%{...}
và mỗi lần lặp thực thi Start-Job
chuyển qua khối kịch bản lệnh {$x=date;sleep 3;((date)-$x).ticks/1e7}
cho công việc (nghĩa là mỗi công việc sẽ thực thi khối kịch bản lệnh đó). Chúng tôi đưa ra kết quả đầu ra để >$null
ngăn chặn phản hồi (ví dụ: tên công việc, trạng thái, v.v.) được trả về.
Khối tập lệnh được đặt $x
thành Get-Date
, sau đó Start-Sleep
trong 3
vài giây, sau đó lấy một lần Get-Date
đọc mới , trừ $x
, lấy .Ticks
và chia 1e7
cho để có được giây (với độ chính xác).
Quay lại chủ đề chính, miễn là mọi công việc vẫn còn là dấu -S
vết "Running"
, chúng ta sẽ quay vòng trong một while
vòng lặp trống . Khi đã xong, chúng ta Get-Job
sẽ kéo các đối tượng cho tất cả các công việc hiện có, đưa các đối tượng Receive-Job
đó sẽ kéo lên tương đương với STDOUT (nghĩa là những gì chúng tạo ra), -join
kết quả cùng với +
và chuyển nó sang iex
( Invoke-Expression
và tương tự eval
). Điều này sẽ tạo ra thời gian ngủ kết quả cộng với chi phí.
Dòng cuối cùng là tương tự, trong đó nó có một ngày mới, trừ dấu ngày ban đầu $d
, lấy .Ticks
và chia 1e7
cho đầu ra tổng thời gian thực hiện.
Lưu ý
OK, vì vậy đây là một chút uốn cong của các quy tắc. Rõ ràng trong lần thực hiện đầu tiên, PowerShell cần tải một loạt các cụm .NET từ đĩa cho các hoạt động luồng khác nhau vì chúng không được tải với cấu hình shell mặc định. Các lần thực hiện tiếp theo , vì các hội đồng đã có trong bộ nhớ, hoạt động tốt. Nếu bạn để cửa sổ vỏ không đủ lâu, bạn sẽ có bộ sưu tập rác tích hợp của PowerShell đi cùng và dỡ tất cả các cụm đó, khiến lần thực thi tiếp theo mất nhiều thời gian khi tải lại chúng. Tôi không chắc chắn về cách này.
Bạn có thể thấy điều này trong thời gian thực hiện trong các lần chạy dưới đây. Tôi bắt đầu một lớp vỏ mới, điều hướng đến thư mục chơi gôn của mình và thực hiện kịch bản. Lần chạy đầu tiên rất khủng khiếp, nhưng lần thứ hai (được thực hiện ngay lập tức) hoạt động tốt. Sau đó tôi để cái vỏ nhàn rỗi trong vài phút để cho bộ sưu tập rác đi qua, và sau đó lần chạy đó lại kéo dài, nhưng các lần chạy tiếp theo lại hoạt động tốt.
Ví dụ chạy
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>