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>