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
Setel $d
dengan Get-Date
, dan hapus semua riwayat pekerjaan yang ada Get-Job | Remove-Job
. Kami kemudian mengulang 1..20|%{...}
dan setiap iterasi mengeksekusi Start-Job
melewati blok skrip {$x=date;sleep 3;((date)-$x).ticks/1e7}
untuk pekerjaan (artinya setiap pekerjaan akan mengeksekusi blok skrip itu). Kami menyalurkan output itu ke >$null
untuk menekan umpan balik (yaitu, nama pekerjaan, status, dll.) Yang dikembalikan.
Blok skrip disetel $x
ke Get-Date
, lalu Start-Sleep
untuk 3
detik, lalu mengambil Get-Date
bacaan baru , kurangi $x
, dapatkan .Ticks
, dan 1e7
bagi dengan untuk mendapatkan detik (dengan presisi).
Kembali ke utas utama, selama pekerjaan apa pun masih -S
tatus "Running"
, kami berputar di dalam while
lingkaran kosong . Setelah selesai, kita Get-Job
menarik objek untuk semua pekerjaan yang ada, menyalurkan Receive-Job
yang akan menarik setara dengan STDOUT (yaitu, apa yang mereka hasilkan), -join
hasilnya bersama-sama +
, dan pipa itu ke iex
( Invoke-Expression
dan mirip dengan eval
). Ini akan menampilkan waktu tidur yang dihasilkan ditambah overhead.
Baris terakhir serupa, yaitu mendapat tanggal baru, mengurangi cap tanggal asli $d
, mendapatkan .Ticks
, dan membaginya dengan 1e7
untuk menghasilkan total waktu eksekusi.
NB
OK, jadi ini sedikit aturan yang membengkok . Rupanya pada eksekusi pertama, PowerShell perlu memuat sekelompok .NET assemblies dari disk untuk berbagai operasi thread karena mereka tidak dimuat dengan profil shell default. Eksekusi berikutnya , karena majelis sudah dalam memori, berfungsi dengan baik. Jika Anda membiarkan jendela shell cukup lama, Anda akan mendapatkan pengumpulan sampah bawaan PowerShell untuk datang dan membongkar semua rakitan, yang menyebabkan eksekusi berikutnya memakan waktu lama karena memuat ulang mereka. Saya tidak yakin dengan cara ini.
Anda dapat melihat ini di waktu eksekusi di bawah berjalan. Saya memulai shell baru, menavigasi ke direktori golf saya, dan mengeksekusi skrip. Run pertama menghebohkan, tetapi yang kedua (dieksekusi segera) bekerja dengan baik. Saya kemudian meninggalkan shell menganggur selama beberapa menit untuk membiarkan pengumpulan sampah datang, dan kemudian menjalankan itu lagi panjang, tetapi berjalan selanjutnya berfungsi dengan baik.
Contoh berjalan
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>