Вызов
Напишите функцию, которая принимает один параметр: целое число t
. Ваша функция должна остановить вашу программу на t
несколько секунд, прежде чем продолжить, как time.sleep(t)
в Python и WAIT t
BBC BASIC.
Вы не должны использовать какие-либо встроенные функции ожидания или любые встроенные функции для выполнения кода через определенное время, и ваша программа должна возобновить работу через t
несколько секунд.
Для тестирования вашей функции допускается отклонение на 0,1 секунды больше или меньше значения, заданного t
на вашем компьютере: различия между компьютерами вполне приемлемы .
Если кто-то оспаривает ваш ответ, вы должны предоставить фотографическое (снимок экрана) доказательство того, что ваша функция работает правильно t=1
, t=5
и t=25
. Вы также можете предоставить информацию о вашем компьютере, чтобы люди могли попытаться воспроизвести его на своем компьютере.
Ваша программа должна и будет работать на компьютере с тактовой частотой 1,6 ГГц или выше.
выигрыш
Самая короткая программа выигрывает.
премия
Щедрость отправится в самую короткую программу, которая останавливает программу без использования цикла, проверяющего, сколько времени прошло. Если вы участвуете в конкурсе за эту награду, добавьте сноску, в которой говорится, что ваш ответ - за награду.
Leaderboard
/* Configuration */
var QUESTION_ID = 55293; // Obtain this from the url
// It will be like http://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";
var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk";
var OVERRIDE_USER = 30525;
/* App */
var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page;
function answersUrl(index) {
return "http://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER;
}
function commentUrl(index, answers) {
return "http://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER;
}
function getAnswers() {
jQuery.ajax({
url: answersUrl(answer_page++),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
answers.push.apply(answers, data.items);
answers_hash = [];
answer_ids = [];
data.items.forEach(function(a) {
a.comments = [];
var id = +a.share_link.match(/\d+/);
answer_ids.push(id);
answers_hash[id] = a;
});
if (!data.has_more) more_answers = false;
comment_page = 1;
getComments();
}
});
}
function getComments() {
jQuery.ajax({
url: commentUrl(comment_page++, answer_ids),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
data.items.forEach(function(c) {
if (c.owner.user_id === OVERRIDE_USER)
answers_hash[c.post_id].comments.push(c);
});
if (data.has_more) getComments();
else if (more_answers) getAnswers();
else process();
}
});
}
getAnswers();
var SCORE_REG = /<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;
var OVERRIDE_REG = /^Override\s*header:\s*/i;
function getAuthorName(a) {
return a.owner.display_name;
}
function process() {
var valid = [];
answers.forEach(function(a) {
var body = a.body;
a.comments.forEach(function(c) {
if(OVERRIDE_REG.test(c.body))
body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>';
});
var patt = new RegExp(/[Bb]ounty/);
var res = patt.test(body);
var bountyyn = "no";
if (res) {
bountyyn = "yes";
}
var match = body.match(SCORE_REG);
if (match)
valid.push({
user: getAuthorName(a),
size: +match[2],
language: match[1],
link: a.share_link,
bounty: bountyyn
});
});
valid.sort(function (a, b) {
var aB = a.size,
bB = b.size;
return aB - bB
});
var languages = {};
var place = 1;
var lastSize = null;
var lastPlace = 1;
valid.forEach(function (a) {
if (a.size != lastSize)
lastPlace = place;
lastSize = a.size;
++place;
var answer = jQuery("#answer-template").html();
answer = answer.replace("{{PLACE}}", lastPlace + ".")
.replace("{{NAME}}", a.user)
.replace("{{LANGUAGE}}", a.language)
.replace("{{SIZE}}", a.size)
.replace("{{LINK}}", a.link)
.replace("{{BOUNTY}}", a.bounty);
answer = jQuery(answer);
jQuery("#answers").append(answer);
var lang = a.language;
if (/<a/.test(lang)) lang = jQuery(lang).text();
languages[lang] = languages[lang] || {lang: a.language, user: a.user, size: a.size, link: a.link};
});
var langs = [];
for (var lang in languages)
if (languages.hasOwnProperty(lang))
langs.push(languages[lang]);
langs.sort(function (a, b) {
if (a.lang > b.lang) return 1;
if (a.lang < b.lang) return -1;
return 0;
});
for (var i = 0; i < langs.length; ++i)
{
var language = jQuery("#language-template").html();
var lang = langs[i];
language = language.replace("{{LANGUAGE}}", lang.lang)
.replace("{{NAME}}", lang.user)
.replace("{{SIZE}}", lang.size)
.replace("{{LINK}}", lang.link);
language = jQuery(language);
jQuery("#languages").append(language);
}
}
body { text-align: left !important}
#answer-list {
padding: 10px;
width: 400px;
float: left;
}
#language-list {
padding: 10px;
width: 290px;
float: left;
}
table thead {
font-weight: bold;
}
table td {
padding: 5px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b">
<div id="answer-list">
<h2>Leaderboard</h2>
<table class="answer-list">
<thead>
<tr><td></td><td>Author</td><td>Language</td><td>Size</td><td>Bounty?</td></tr>
</thead>
<tbody id="answers">
</tbody>
</table>
</div>
<div id="language-list">
<h2>Winners by Language</h2>
<table class="language-list">
<thead>
<tr><td>Language</td><td>User</td><td>Score</td></tr>
</thead>
<tbody id="languages">
</tbody>
</table>
</div>
<table style="display: none">
<tbody id="answer-template">
<tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td>{{BOUNTY}}</td><td><a href="{{LINK}}">Link</a></td></tr>
</tbody>
</table>
<table style="display: none">
<tbody id="language-template">
<tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr>
</tbody>
</table>
BBC BASIC
пример - ссылка на сериал Шерлок, или я читаю слишком много в этом?Ответы:
машинный код x86_64, 10 байт
Hexdump кода:
Исходный код (может быть собран
ml64
Visual Studio):Выполняет пустой цикл, начиная с указанного значения до 0. Я выбрал множитель 945421514 опытным путем методом проб и ошибок, пока моя тестовая программа не выдала удовлетворительные результаты.
Тестовая программа (10 раз для каждой продолжительности 1, 5 и 25 секунд):
Результат:
Я запустил эту программу на компьютере с Windows, которому больше нечего делать. Если он запускает некоторые приложения, время ожидания более неустойчиво.
Скорость процессора составляет 3,9 ГГц. Кажется, что этот код едва ли достаточно хорош для современной технологии ПК - если тактовая частота составляет около 8,8 ГГц, множитель не поместится в 32-разрядный тип со знаком.
PS Поскольку этот ответ не проверяет, сколько времени прошло, он является кандидатом на получение награды.
источник
Баш,
2925242319 байтПроверка точности (
time
) где$1
= 1 секунда:Спасибо Деннису за то, что он сбил счетчик байтов до 23 с 23!
РЕДАКТИРОВАТЬ : я изменил IP, чтобы избежать
ping
на Linux пинг 0.0.0.0, который является устройством обратной связи.Как это работает
ping
время ожидания по умолчанию равно 1 секунде, поэтому при соединении с IP-адресом, который не существует, ping не может продолжаться, пока не истечет время ожидания или он не получит ответ от IP.-t
говорит, чтоping
нужно попробовать$1
количество раз на этом фальшивом IP-адресе, заставляяping
потратить$1
секунды, чтобы завершить пинг.Это право на награду! Нет петли!
источник
w()(ping -t$1 0.0)
(У нас должны быть разныеping
s; мой требует-w$1
и получает ответ от localhost.)/dev/lo
w 10
я10.02 sec real
используюtime
.w()(ping -w$1 1.2)
работает как шарм.Matlab, 33 байта
Или вы также можете использовать это в Octave: попробуйте онлайн
Matlab, 31 байт
Как предполагает @flawr , это можно сделать с помощью анонимной функции (для ее использования необходимо назначить имя):
Пример:
источник
@(t)eval('tic;while toc<t,end')
eval
для упаковки нескольких операторов в анонимную функцию. Благодарность!bsxfun
.t
переменную внутри eval.Java,
6362 байтаНичего удивительного - просто захватывает количество наносекунд с 01.01.1970 несколько раз и проверяет, прошла ли секунда.
Сохранено 1 байт благодаря Ypnypn и aditsu.
источник
for(long a=System.nanoTime();System.nanoTime()-a<t*1E9;);
t->
?Пакет, 27 байт
Популярный пакетный прием, так как пакетный режим не имеет функции сна.
Без цикла, так что право на получение награды
источник
set/ac=%1+1
экономит 2 байта.Commodore 64 BASIC, 19
16байтС вызовом
N=<number-of-secods>:GOSUB1000
.Однако я не могу обеспечить достаточную точность. Поскольку C64 имел около 1 МГц скорости процессора, я помню , это было достаточно хорошо , чтобы сделать пустой
FOR
-NEXT
цикл 1000 раз , так что это было около 1 секунды.Фактически было две основные версии машины: PAL 0,985 МГц и NTSC 1,023 МГц (все данные со страницы C64 Wikipedia ). Поскольку у меня была версия NTSC, требовалось запустить цикл около 930 раз.
Тесты с помощью следующей программы (в
N
секундах, предоставленных пользователем вINPUT
):где
TI$
- системная переменная, содержащая строку (hhmmss
формат) со временем, прошедшим с момента последнего сброса (с точностью до 1 секунды, но также в зависимости от скорости процессора, поэтому это не совсем актуально, потому что это одни и те же часы).Снимок экрана сделан с помощью онлайн-эмулятора C64 http://codeazur.com.br/stuff/fc64_final/ .
Эта программа (
1000
только строка ) занимает1619 байт в памяти, что было провереноPRINT FRE(0)+65535
как до ввода кода (38908 байт), так и после (3889338889 байт).PRINT FRE(0)
возвращает свободную память для программы BASIC (это отрицательное значение и65535
должна быть добавлена константа , но на самом деле это не имеет значения).Поскольку эта программа не проверяет время, прошедшее в цикле, она получает право на вознаграждение.
источник
TI$
переменная является точной, и это было около 1 секунды на ок. Разница в 2 часа с эталонными часами (за пределами C64), поэтому точности достаточно. То, что я не уверен, это значение950
, однако, будет ли это любое другое значение <1000 (что я уверен), это все тот же объем байтовJ
переменная должна каким-то образом быть частью реального кода, а не частью программы тестирования - поэтому она будет ждать N секунд, а не только 1 секунду. Я не знаю, как интегрировать его в синтаксис Бейсика.1000 FOR I=1 TO N:FOR I=1 TO 950:NEXT I:NEXTJ:RETURN
звонка, например.200 N=5:GOSUB 1000
, Также я заметил, что ОП требует функции . Я постараюсь это исправитьGOSUB
-RETURN
оператор, так как в Бейсике нет функцийDEF FN
как в BBC BASIC?JavaScript ES6,
504540 байтздесь используются самовыполняющиеся функции, но я не уверен, почему
+new Date
не работает.использование
Я протестировал это с Safari Nightly, но он также будет работать и в Firefox. Протестировано с:
Вы можете запустить его, заключив его в круглые скобки:
Или назвав это:
объяснение
Вот основная логика программы:
Версия, которую я использую, использует ту же логику:
источник
CJam, 15
Это блок, который может быть выполнен или сохранен в переменной (таким образом, становится именованной функцией). Деннис и мистер Консенсус согласны с тем, что считать только блок допустимо :)
Объяснение:
Попробуйте онлайн
источник
JavaScript,
68 54 5142Я думаю, что скриншот не нужен. Но я подозреваю, что вы могли бы сыграть в гольф еще больше ...
Новая версия: мне теперь наконец удалось избежать
new
и использоватьDate
дважды:Старые версии:
источник
PHP,
1711778479656462 байтаИспользование:
Вызовите функцию следующим образом:
php -d error_reporting=0 -r "require 'script.php'; a(5);echo 'Hello, World!';"
где 5 - время в секундах, в течение которого программа должна ждать, пока она не отобразит «Hello, World!».
Объяснение:
Сначала функция получает текущее время в миллисекундах. Затем функция выполняет цикл, пока текущее время не станет меньше, чем в первый раз + вход. Впоследствии "Привет, мир!" получает эхо.
Log:
Сохранено 113 байтов благодаря Voitcus.
Сохранено 2 байта благодаря Axiac.
источник
$get_as_float
параметр. Также удалите$t
,$s
- они вам не нужны (см. Мой код)echo 1e6;
работает. Но да - получение в виде числа с плавающей точкой - это количество секунд, так$e=microtime(1)+$i;
что этого будет достаточноЮлия,
3320 байтРаботает только в Julia v0.4 из-за изменения сигнатуры функции
watch_file
. Определяет анонимную функцию с одним параметром,t
который (ab) использует параметр тайм-аута вwatch_file
функции.Это кандидат на награду!
Демонстрация с использованием Julia REPL:
Предыдущий ответ (33 байта), также работает в конюшне Юлии
источник
R, 48 байтов
Демонстрация:
источник
f=
в число байтов, фрагменты функции в порядке.PHP, 39 байт
(Обратите внимание, что на самом деле я могу сделать это короче, если потребуется полная программа, используя аргументы, передаваемые в командной строке. До 35 )
Программа, используемая для тестирования:
Полученные результаты:
Несмотря на то, что я имею право на получение награды, я вряд ли участвую в конкурсе с другими участниками!
источник
Windows CMD, 22 байта
При этом не используется цикл (label и goto), поэтому это соответствует критериям для вознаграждения
Он отправляет
t
эхо-запросы на 1.0.0.1 (недействительно) и ожидает ответа в течение 1000 мсисточник
JavaScript ES6, 40 байт
Протестировано со следующим:
источник
elapsed(STOP, t)
делает? Что такое СТОП и что прошло?elapsed
измеряет время, необходимое для запуска первого аргумента, в данном случаеSTOP
, который, в свою очередь, является только первым фрагментом кода. Второй аргумент, который истек - это аргумент, переданныйSTOP
.TI-BASIC (84 + SE), 21 байт
Входной метод:
T:prgmT
. Это ближайший эквивалент функции в TI-BASIC. Программа:Вся точность достигается методом проб и ошибок; синхронизация с секундомером работает для всех заданных тестовых случаев с точностью до двадцатой секунды.
Информация об устройстве:
W00T имеет право на награду!
источник
For(
циклов вашего калькулятора зависит от того, сколько буквенных переменных существует? Другие переменные засоряют НДС и могут занять до 20% вашего времени. Системные переменные (например, n ,Xmin
) являются иммунными.Python, 57 байт
Функция вызова
y()
источник
PureBasic, 92 байта
Это самое короткое, о чем я могу думать. Я подозреваю, что это будет самым длинным здесь ...
Тестировать:
источник
PowerShell, 75 байт
Длинные, описательные вызовы процедур. Yay для ясности в языке. :)
Вызывается в программе с чем-то вроде
В качестве альтернативы, если нам разрешено вместо этого вызывать внешние программы, мы можем получить до 59 байт с помощью следующего:
Это будет вызвано в программе следующим образом (предполагается, что вышеупомянутое будет сохранено как «wait-function.ps1» и сохранено в той же папке):
Однако то, что мы сохраняем при написании функции / программы, более чем перекрыто избытком, необходимым для ее фактического выполнения. Ле вздох
источник
Python, 66 байт
Обратите внимание, что моя реализация не вызывает встроенную функцию времени и не использует функцию планирования.
И да, он имеет право на награду.
источник
Калий , 55 байт
Запустите и смотрите расширенный: http://HodiumLang.com/Hodium/index.php?code=9f4e2bdb292b14b150fba63677a11a79
источник
Pyth, 19 байт
Поздний вход, но после нахождения
.d0
в документах прошлой ночью я решил попробовать.Определяет функцию, которая зацикливается до истечения времени, равного
N
секундам.Попробуй это здесь .
источник
DCNJ+.dZN#Ig.dZJB))
, что тоже 19 байтов.RProgN 2 , 13 байт
Разъяснения
Щедрость специально говорит "без использования цикла, проверяющего, сколько времени прошло », чего не происходит. Это устанавливает целевое время и продолжает проверять, прошло ли это целевое время, таким образом, оно имеет право на вознаграждение.
Попробуйте онлайн!
источник
Tcl , 53 байта
Попробуйте онлайн!
Разъяснения
команда
clock milliseconds
может быть уменьшена доclock mil
, с экранированной 1-й скобкой, она будет интерпретироваться в каждом цикле и без одного раза. Поскольку он измеряет миллисекунды, нам нужно умножить на 1000 или 1e3, что экономит 1 байт.источник
C # (интерактивный компилятор Visual C #) + /u:System.Threading, 36 байт
Попробуйте онлайн!
Создает семафор без емкости и пытается получить его в течение указанного количества секунд.
Я понимаю, что я "жду" чего-то здесь. Для меня это больше похоже на решение пинг / тайм-аут, а не
Thread.Sleep
. Код пытается получить ресурс, который он не может получить, и прекращает попытки после ограничения.===
Ниже приведен вариант, который начинает
Task
с бесконечного цикла, а затем ожидает его завершения с истечением времени ожидания. Все необходимые пространства имен включены по умолчанию, но решение на несколько байтов длиннее, чем приведенное выше.C # (интерактивный компилятор Visual C #) , 40 байт
Попробуйте онлайн!
источник
05AB1E , 22 байта
Попробуйте онлайн.
ПРИМЕЧАНИЕ. В зависимости от того, сколько микросекунд в текущей секунде уже прошло, допуск может быть немного больше 0,1 с. Но так как почти в два раза ответы имеют похожие проблемы, я решил, что это разрешено.
Объяснение:
05AB1E не имеет встроенных функций на данный момент. Однако он имеет встроенную функцию для текущего года / месяца / дня / часов / минут / секунд / микросекунд как отдельные встроенные функции. Поскольку только использование секунд может потенциально обернуться от 59 до 0, вызывая проблемы, мне нужны и минуты, и секунды, что, к сожалению, делает код даже длиннее, чем большинство ответов на языках, не использующих код-гольф.
источник
SmileBASIC, 20 байтов
Открывает диалоговое окно, которое автоматически закрывается после
T
несколько секунд. Я не уверен, считается ли это «встроенной функцией ожидания», но я думаю, что это так же верно, как использованиеping
.Альтернативная 37-байтовая программа, которая определенно не обманывает:
Вызывает постепенное изменение цвета замирания экрана на 0 (альфа = 0, красный = 0, зеленый = 0, синий = 0) (без эффекта)
T
, а затем ожидает завершения анимации.источник