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>