멈춰라, 당신이있는 곳에 서라!


35

도전

하나의 매개 변수 인 integer를 작성하는 함수를 작성하십시오 t. 파이썬과 BBC BASIC에서 와 t마찬가지로 계속하기 전에 함수가 프로그램을 몇 초 동안 중지해야합니다 .time.sleep(t)WAIT t

특정 시간이 지나면 내장 대기 기능이나 내장 기능을 사용하여 코드를 실행해서는 안되며 프로그램은 t몇 초 후에 다시 시작해야합니다 .

기능을 테스트하기 t위해 자신의 컴퓨터 에서 주어진 것보다 0.1 초 이상 허용 오차 가 있습니다. 컴퓨터 간의 차이는 좋습니다.

답이 누군가에게 도전을 받으면 t=1, t=5및 의 기능이 올바르게 작동한다는 사진 (스크린 샷) 증거를 제공해야합니다 t=25. 사람들이 자신의 컴퓨터에서 복제하려고 시도 할 수 있도록 컴퓨터의 세부 정보를 제공 할 수도 있습니다.

클럭 속도가 1.6GHz 이상인 컴퓨터에서 프로그램을 실행해야합니다.

승리

가장 짧은 프로그램이 승리합니다.

하사품

현상금은 가장 짧은 프로그램으로 이동 하여 얼마나 많은 시간이 경과했는지 확인하는 루프 사용 하지 않고 프로그램을 중지합니다 . 이 현상금으로 달리고 있다면 답이 현상금에 대한 것임을 알리는 각주를 추가하십시오.

리더 보드

/* 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>


선택한 프로그래밍 언어 ( 기침 기침 )가 1 초 정확도로 시간을 얻는 것만 지원한다면 어떨까요?
Doorknob

@Doorknob 글쎄, 입력은 정수이므로 괜찮습니다
Beta Decay

3
@Doorknob 아마도 프로그램 외부의 실행 시간, 예를 들어 디버그 출력을 측정하고 DebugView의 타임 스탬프를 볼 수 있습니다.
Thomas Weller

1
제목과 BBC BASIC예제가 TV 쇼 Sherlock에 대한 참조 입니까 아니면 너무 많이 읽습니까?
Fatalize

1
글쎄, 적어도 당신은 당신의 제목이 정확하지 않다는 것을 깨달았습니다;)
Fatalize

답변:


36

x86_64 기계 코드, 10 바이트

코드의 16 진 덤프 :

48 69 c9 ca fc 59 38 e2 fe c3

소스 코드 ( ml64Visual Studio에서 조립 가능 ) :

    TITLE   heh

PUBLIC  mywait
_TEXT   SEGMENT
mywait  PROC
    imul rcx, 945421514
myloop:
    loop myloop
    ret
mywait  ENDP
_TEXT   ENDS
END

지정된 값에서 0까지 빈 루프를 수행합니다. 테스트 프로그램이 만족스러운 결과를 출력 할 때까지 시행 착오를 통해 승수 945421514를 경험적으로 선택했습니다.

테스트 프로그램 (1, 5, 25 초마다 10 번 대기) :

#include <stdio.h>
#include <time.h>

extern "C" void mywait(int);

int main()
{
    int durations[] = {1, 5, 25};
    for (int duration: durations)
    {
        for (int i = 0; i < 10; ++i)
        {
            clock_t before = clock();
            mywait(duration);
            clock_t after = clock();
            printf("%f\n", (after - before) / (double)CLOCKS_PER_SEC);
        }
    }
    getchar(); // now take a screenshot
}

결과:

1.003000
1.000000
1.004000
1.006000
1.005000
0.998000
0.995000
1.000000
1.005000
1.004000
4.999000
5.003000
5.035000
5.010000
4.992000
5.003000
5.003000
5.019000
5.026000
4.989000
25.041000
24.993000
25.049000
24.988000
25.038000
24.948000
25.007000
25.014000
25.053000
25.021000

다른 프로그램이없는 Windows 컴퓨터에서이 프로그램을 실행했습니다. 일부 응용 프로그램을 실행하면 대기 시간이 더 불규칙합니다.

CPU 속도는 3.9GHz입니다. 이 코드는 현재 PC 기술에 거의 적합하지 않은 것 같습니다 . 클럭 주파수가 약 8.8GHz 인 경우 승수는 부호있는 32 비트 int에 맞지 않습니다.


추신 :이 답변은 시간이 얼마나 지 났는지 확인하지 않기 때문에 현상금의 후보입니다.


4
멋지다 : D
Beta Decay

12
3900 GHz? 우와! 아마도 MHz?
WayToDoor

2
@ WayToDoor 고정! 또한 이와 관련된 재미있는 정보를 추가했습니다.
anatolyg

1
소스는 142 바이트이므로이 답변의 점수를 매 깁니다.
피터 테일러

3
@PeterTaylor 어셈블리 언어의 142 바이트 ; 머신 코드 에서는 훨씬 적습니다 . 이들은 다른 언어입니다. 내 의견으로는 머신 코드가 더 재미있다. 머신 코드의 문제점은 비 ASCII이며 큰 문제는 아니라고 생각합니다. 관련 문제는 여기에서 설명 합니다 . 기계 코드에 대한 토론을 시작해야합니까?
anatolyg

21

배쉬, 29 25 24 23 19 바이트

w()(ping -t$1 1.2)

정확도 테스트 ( time) $1: 1 초 :

real    0m1.012s
user    0m0.001s
sys     0m0.002s

바이트 수를 23에서 19로 줄인 데니스에게 감사드립니다!

편집 : ping루프백 장치 인 Linux ping 0.0.0.0 을 피하기 위해 IP를 변경했습니다 .


작동 원리

ping 기본 시간 제한이 1 초이므로 존재하지 않는 IP 주소에 연결할 때 시간 초과가지나거나 IP에서 응답을받을 때까지 핑을 계속할 수 없습니다.

-t이야기 ping하려고 $1강제로,이 가짜 IP 주소에 횟수를 ping취할 $1핑을 완료하기 위해 초.


현상금을받을 자격이 있습니다! 루프가 없습니다!


골프를 쳤다 : w()(ping -t$1 0.0)(우리는 서로 다른 pings 를 가져야한다 ; 내 -w$1호스트는 로컬 호스트로부터 응답을 받는다.)
Dennis

그렇다면 OS X에서만 작동해야합니다./dev/lo
georgeunix

Linux에서 0.0을 1.2로 변경
georgeunix

OS X에 대해 w 10, 내가 얻을 10.02 sec real사용 time.
georgeunix

w()(ping -w$1 1.2)매력처럼 작동합니다.
Dennis

18

Matlab, 33 바이트

function f(t)
tic;while toc<t,end

또는 옥타브에서도 사용할 수 있습니다 : 온라인으로 사용해보십시오

Matlab, 31 바이트

@flawr 에서 제안한 것처럼 익명 함수로 수행 할 수 있습니다 (사용하려면 이름을 지정해야 함).

@(t)eval('tic;while toc<t,end')

예:

>> f=@(t)eval('tic;while toc<t,end');
>> tic, f(2), toc
Elapsed time is 2.000323 seconds.

5
Tic ... Toc ... Tic ... Toc
Caridorc

4
할당되지 않은 함수 핸들도 괜찮다면 다음을 사용할 수도 있습니다.@(t)eval('tic;while toc<t,end')
flawr

@flawr 와우! eval익명 함수에 여러 문장을 묶는 데 사용 하는 아주 좋은 트릭 감사!
Luis Mendo

그렇습니다. 때로는 유용한 트릭이지만, eval 내에서도 변수에 값을 할당 할 수 없습니다. 나는 여전히 재귀 함수에 대한 함수 핸들을 남용하는 방법을 연구하고 있습니다 =) PS : 함수 핸들에 이름을 지정할 필요는 없으며 때로는 핸들을 다른 함수에 대한 인수로 직접 전달할 수도 있습니다 (예 :) bsxfun.
flawr

+1이지만 익명 함수 버전은 Octave (v 3.8.1)에서 작동하지 않습니다. teval 내부의 변수 를 인식하지 못합니다 .
pawel.boczarski

11

자바, 63 62 바이트

t->{for(long a=System.nanoTime();System.nanoTime()-a<t*1E9;);}

놀라운 것은 없습니다-1/1/1970 이후 나노초 수를 여러 번 잡고 1 초가 지 났는지 확인합니다.

Ypnypn 및 aditsu 덕분에 1 바이트를 절약했습니다.


25
예이! 100 바이트 미만의 Java 프로그램; D
Beta Decay

5
@BetaDecay 실제로는 프로그램이 아닙니다.
user253751

1
누군가 당신이 그것을 짧게 할 수 있다고 언급하지 않았습니까? for(long a=System.nanoTime();System.nanoTime()-a<t*1E9;);
aditsu

무엇입니까 t->?
Luminous

1
@Luminous Java 8에서 일반적으로 사용되는 람다 식입니다 .
TNT

8

배치, 27 바이트

set /a c=%1+1
ping -n %c% 0

배치에는 절전 기능이 없기 때문에 널리 사용되는 배치 트릭입니다.

루프가 없으므로 현상금 적용 가능


골프 : set/ac=%1+12 바이트를 절약합니다.
stevefestl

7

코모도어 64 베이직, 19 16 바이트

1000 FORI=1TO930*N:NEXT:RETURN

전화로 N=<number-of-secods>:GOSUB1000.

그러나 나는 충분한 정확성을 제공 할 수 없습니다. C64는 1 MHz의 CPU 속도에 대한 있었기 때문에, 나는 빈 만드는 좋은 충분했다 기억 FOR- NEXT이 것을 1000 배 그래서 루프 에 대해 일초.

실제로 PAL 0.985MHz 및 NTSC 1.023MHz ( C64 Wikipedia Page의 모든 데이터)라는 두 가지 주요 버전의 시스템이있었습니다 . NTSC 버전을 사용 했으므로 약 930 회 루프를 실행해야했습니다.

다음 프로그램으로 테스트합니다 ( N초,에서 사용자가 제공함 INPUT).

10 INPUT N
20 PRINT TI$
30 GOSUB 1000
40 PRINT TI$
50 END
1000 FOR I=1 TO 930*N:NEXT I:RETURN

여기서 마지막 재설정에서 경과 된 시간 TI$(문자열 hhmmss형식)을 포함하는 시스템 변수는 1 초 정확도이지만 CPU 속도에 따라 다르므로 시계와 동일하므로 관련이 없습니다.

여기에 이미지 설명을 입력하십시오

스크린 샷 온라인 C64 에뮬레이터로 만든 http://codeazur.com.br/stuff/fc64_final/ .

이 프로그램 (라인 1000만) 점유 16 와 같이 테스트 메모리에 19 바이트 PRINT FRE(0)+65535코드 (38,908 바이트)과 후 (입력하기 전에 모두 38,893 38,889 바이트). PRINT FRE(0)BASIC 프로그램의 사용 가능한 메모리를 리턴합니다 (음수 값이고 상수 65535를 추가해야하지만 실제로는 중요하지 않습니다).

이 프로그램은 루프에서 경과 한 시간을 테스트하지 않기 때문에 현상금을받을 자격이 있습니다.


TI$변수가 얼마나 정확한지 테스트를 수행했으며 ca 당 약 1 초였습니다. 기준 클럭 (C64 외부)과 2 시간 차이가 있으므로 정확도가 충분합니다. 내가 확실하지 않은 것은 value 950이지만, 다른 값 <1000 (확실하지
않다) 일지라도

J변수는 테스트 프로그램의 일부가 아닌 실제 코드의 일부 여야 한다고 생각합니다. 따라서 1 초가 아닌 N 초 동안 기다릴 것입니다. 그래도 BASIC의 구문에 통합하는 방법을 모르겠습니다.
anatolyg

@anatolyg 흠, 맞아, 1000 FOR I=1 TO N:FOR I=1 TO 950:NEXT I:NEXTJ:RETURN전화와 같은 것이어야합니다 . 200 N=5:GOSUB 1000. 또한 OP에 기능이 필요하다는 것을 알았습니다 . 나는 그것을 고치려고 노력할 것이다
Voitcus

@anatolyg 내가 수정했습니다 GOSUB- RETURN베이직에 함수가 없기 때문에 - 문을 사용합니다
Voitcus

@Voitcus DEF FNBBC BASIC 에서조차 좋아하지 않습니까?
Beta Decay

7

자바 스크립트 ES6, 50 45 40 바이트

n=>{for(g=Date.now,z=g();z+n*1e3>g(););}

이것은 자체 실행 기능을 사용하지만 왜 +new Date작동 하지 않는지 확실 하지 않습니다.


용법

Safari Nightly로 이것을 테스트했지만 Firefox에서도 작동합니다. 로 테스트 :

(
  n=>{for(g=Date.now,z=g();z+n*1e3>g(););}
)(1); // 1 is the delay is seconds
console.log( 'foo' );

괄호로 묶어 실행할 수 있습니다.

( n=>{for(g=Date.now,z=g();z+n*1e3>g(););} )(5)

또는 그것을 명명함으로써 :

const wait=n=>{for(g=Date.now,z=g();z+n*1e3>g(););}
wait(5)

설명

프로그램의 주요 논리는 다음과 같습니다.

function (n) {
    var start = Date.now();   // Save start time (ms)
    while (                   // while is synchronous, it'll block the code execution until it has finished
           start + (n * 1000) // This is the end time (start + delay)
            > Date.now()      // When the current time is 1 ms past the target end time, stop. resuming the code execution
          );
}

내가 사용하는 버전은 동일한 논리를 사용합니다.

n=>{ // Function with argument n, { is required if the functions is not just an expression
   for(           // For will also block code execution
                  // This first part is used to define variables
      g=Date.now, // Add an alias for Date.now as "g"
      z=g()       // get current time and store in z
      ;           // Next part, condition
      z + n*1e3   // Target end time, ( start + delay (converted to seconds) ) 1e3 is 1000 but in big e notation
      ;           // Is required for a valid for loop
   );
}

6

CJam, 15

{e3es+{_es>}g;}

변수로 실행하거나 저장할 수있는 블록입니다 (따라서 명명 된 함수가 됨). Dennis와 Mr Consensus는 블록 만 계산하는 것이 허용된다는 데 동의합니다. :)

설명:

e3       multiply the argument by 1000 (to get milliseconds)
es       get the current timestamp in milliseconds
+        add the values, obtaining the stopping time
{…}g     do…while
  _      duplicate the stopping time
  es>    check if we reached that time yet (loop condition)
;        discard the stopping time

온라인으로 사용해보십시오


1
메타에 대한 합의는 함수의 이름을 지정할 필요가 없기 때문에 스택에 남겨진 블록을 람다처럼 사용할 수 있다고 주장합니다.
Dennis

6

자바 스크립트, 68 54 51 42

스크린 샷이 필요 없다고 생각합니다. 그러나 나는 당신이 이것을 훨씬 더 골프로 칠 수 있다고 생각합니다 ...

새 버전 : 이제 마침내 피하고 두 번 new사용 Date했습니다.

f=t=>{for(x=(d=Date.now)();d()<x+t*1e3;);}

이전 버전 :

f=t=>{for(x=new Date();(new Date()|0)<x|0+t*1e3;);}

f=t=>{x=(new Date())|0;while((new Date()|0)<x+t*1e3);}

f=t=>{x=new Date().getSeconds();while(new Date().getSeconds()<x+t);}

1
어떤 스크린 샷은 이제 필요하지 않습니다 :) 누군가가이 프로그램에 도전하는 경우에만
베타 붕괴를

5

PHP, 171 (177) 84 79 65 64 62 바이트

<?php function a($i){for($f=microtime,$e=$f(1)+$i;$f(1)<$e;);}


사용법 : 다음
과 같이 함수를 호출하십시오.
php -d error_reporting=0 -r "require 'script.php'; a(5);echo 'Hello, World!';"
여기서 5는 프로그램이 "Hello, World!"를 에코하기 전에 기다려야하는 시간 (초)입니다.


설명 :
처음에 함수는 현재 시간을 밀리 초 단위로 가져옵니다. 그런 다음 함수는 현재 시간이 처음 + 입력보다 작을 때까지 루프를 수행합니다. 그 후 "Hello World!" 반향됩니다.

로그 :
Voitcus 덕분에 113 바이트 절약 Axiac 덕분에
2 바이트 절약


1
설명서 , $get_as_float매개 변수를 참조하십시오 . 또한 제거 $t, $s당신이 (내 코드 참조)을 필요로하지 않습니다 -
Voitcus

1
1e6 = 1000000 백만. echo 1e6;공장. 그러나 그렇습니다 $e=microtime(1)+$i;
-float

2
작업 바이올린 당신을 위해
Voitcus

1
@Voitcus 도와 주셔서 감사합니다!
jrenk

1
2 바이트를 더 절약 할 수 있습니다 (PHP 7의 경우 3 바이트) : 3v4l.org/fU11Y
axiac

5

줄리아, 33 20 바이트

t->watch_file(".",t)

의 함수 서명 변경으로 인해 Julia v0.4에서만 작동합니다 watch_file. 함수 t에서 시간 초과 매개 변수를 사용 하는 단일 매개 변수로 익명 함수를 정의합니다 watch_file.

이것은 현상금의 후보입니다!

Julia REPL을 사용한 데모 :

julia> f=t->watch_file(".",t)
(anonymous function)

julia> @elapsed f(1)
1.002134983

julia> @elapsed f(5)
5.006161965

julia> @elapsed f(25)
25.026096192

Julia 안정에서 일하는 이전 답변 (33 바이트)

t->(b=time();while b+t>time()end)

4

R, 48 바이트

f=function(t){a={g=Sys.time}();while(g()<a+t){}}

데모:

t0 <- Sys.time();f(1); Sys.time() - t0 
## Time difference of 1.000272 secs

t0 <- Sys.time();f(5); Sys.time() - t0 
## Time difference of 5.011189 secs

t0 <- Sys.time();f(25); Sys.time() - t0 
## Time difference of 25.00848 secs

1
f=바이트 수에을 포함시킬 필요는 없다고 생각합니다 . 함수 조각은 괜찮습니다.
Solomon Ucko

4

PHP, 39 바이트

function a($a){while($i++<.4583e8*$a);}

(명령 행에서 전달 된 인수를 이용하여 전체 프로그램이 필요한 경우 실제로이 길이를 줄일 수 있습니다. 최저 35 )

<?php while($i++<.4583e8*$argv[1]);

테스트에 사용되는 프로그램 :

<?php function a($a){while($i++<.4583e8*$a);}

record(1);
record(5);
record(25);

function record($t)
{
    $time = microtime_float();
    a($t);
    echo microtime_float() - $time."\n";
}

function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}

결과 :

JamesWebster:Documents jameswebster$ php A.php
1.0093479156494
4.9945771694183
24.971961975098

여기에 이미지 설명을 입력하십시오


현상금을받을 자격이 있지만 다른 출품작들과 달리기가 거의 없습니다!


그렇습니다. 바이트 수는 괜찮습니다
Beta Decay

4

Windows CMD, 22 바이트

ping -w 1000 -n %1 1.1

이것은 루프 (라벨과 고토)를 사용하지 않으므로 현상금에 적합합니다.

t핑을 1.0.0.1 (잘못된)로 보내고 1000 ms 동안 응답을 기다립니다.


3

자바 스크립트 ES6, 40 바이트

t=>{for(t=(d=Date.now)()+t*1e3;d()<t;);}

다음과 같이 테스트했습니다.

elapsed=(f,t,b=(d=Date.now)())=>(f(t),console.log(d()-b+"ms elapsed")) // accepts func, delay
STOP=t=>{for(t=(d=Date.now)()+t*1e3;d()<t;);}
elapsed(STOP,1)  // prints 1000ms elapsed
elapsed(STOP,5)  // prints 5000ms elapsed
elapsed(STOP,25) // prints 25000ms elapsed

무엇을 설명 할 수 있습니까 elapsed(STOP, t)? 중지 및 경과 란 무엇입니까?
Beta Decay

elapsed는 첫 번째 인수를 실행하는 데 걸리는 시간을 측정합니다.이 경우 STOP에는 첫 번째 코드 스 니펫입니다. 경과 된 두 번째 인수는에 전달 된 인수 STOP입니다.
Dendrobium

3

TI-BASIC (84 + SE), 21 바이트

입력 방법 : T:prgmT. TI-BASIC에서 가장 가까운 기능입니다. 프로그램:

For(A,1,841Ans
End

시행 착오를 통해 모든 정확성을 얻습니다. 스톱워치로 타이밍을 지정하면 주어진 모든 테스트 사례에 대해 20 초 이내에 작동합니다.

장치 정보 :

RAM FREE   23312
ARC FREE  889802


 TI-84 Plus Silver Edition
          2.55MP
PROD #: 0A-3-02-37
ID: 0A3DC-C3469-FFE8

현상금을받을 수있는 W00T!


1
알고 계십니까 : 계산기 For(루프 의 속도는 존재하는 문자 변수의 수에 따라 다릅니다. 더 많은 변수가 부가가치세를 막아 최대 20 % 정도 걸릴 수 있습니다. 시스템 변수 (예를 들어 , n은 , Xmin) 면역 있습니다.
lirtosiast

@ThomasKwa 허! 흥미 롭군 파일을 전송할 시간이 있으면 깨끗한 계산기로 다시 보정하겠습니다.
Conor O'Brien

2

파이썬, 57 바이트

import time
b=time.time
def y(i):
 x=b()
 while x+i>b():x

통화 기능 y()


2

PureBasic, 92 바이트

Procedure z(t)
t=t*1e3+ElapsedMilliseconds()
While t>ElapsedMilliseconds():Wend
EndProcedure

내가 생각할 수있는 최단입니다. 나는 이것이 여기에서도 가장 길 것이라고 생각합니다 ...

테스트하려면 :

OpenConsole()
i=Val(Input())
s=ElapsedMilliseconds()
z(i)
PrintN(Str(ElapsedMilliseconds()-s))
Input()

2

PowerShell, 75 바이트

길고 설명적인 프로 시저 호출 언어의 명확성을 위해 예. :)

function w{param($i);$n=(Get-Date).AddSeconds($i);while($n-gt(Get-Date)){}}

같은 프로그램으로 호출

Get-Date
w(15)
Get-Date

또는 외부 프로그램을 대신 호출하도록 허용 하면 다음과 같이 59 바이트 로 줄일 수 있습니다 .

$n=(Get-Date).AddSeconds($args[0]);while($n-lt(Get-Date)){}

이는 다음과 같이 프로그램 내에서 호출됩니다 (위의 "wait-function.ps1"로 저장되고 동일한 폴더에 저장되는 것으로 가정).

Get-Date
& ((Split-Path $MyInvocation.InvocationName) + "\wait-function.ps1 15")
Get-Date

우리가 함수 / 프로그램을 작성함으로써 절약하는 것은 실제로 그것을 실행하는 데 필요한 초과분에 의해 방해를받습니다. 르 한숨.


2

파이썬, 66 바이트

내 구현은 내장 시간 함수를 호출하거나 일정 기능을 사용하지 않습니다.

def S(t):
 try:__import__("Queue").Queue().get(1,t)
 except:pass

그리고 네, 현상금을받을 자격이 있습니다.


아니요, 유효하지 않습니다. 특정 시간 이후에 코드를 실행하기 위해 내장 된 대기 함수 나 내장
Beta Decay

@ BetaDecay : 내 이해에 따라 Queue (). get은 "특정 시간 후에 코드를 실행하기위한 내장 함수"가 아닙니다. 이것이 왜 자격이되는지 설명하십시오.
Abhijit

다른 많은 답변에는 다른 일에 시간 초과를 사용하는 코드가 있으므로 이것도 좋습니다.
Solomon Ucko


2

Pyth, 19 바이트

늦게 입장했지만 .d0지난 밤 문서에서 찾은 후에 나는 그것을 가기로 결정했습니다.

DCNK.d0W<-.d0KNJ1))

경과 시간이 N초가 될 때까지 반복되는 함수를 정의합니다 .

여기에서 시도 하십시오 .


좋은. 나는 DCNJ+.dZN#Ig.dZJB))또한 19 바이트입니다.
hakr14

2

RProgN 2 , 13 바이트

°°°)*™+]³]™>:

설명

°°°)*™+]³]™>:
°°°             # Push 3 tens to the stack.
   )*           # Get the product of the entire stack, including the implicit input. This is the shortest way to multiply the input by 1000.
     ™+         # Add it to the current time in miliseconds.
       ]        # Duplicate it to use as a (throwaway) conditional.
        ³   :   # Create a function using the next 3 concepts, and while the top of the stack is truthy, execute it.
         ]      # Duplicate the target time
          ™>    # Is it larger than the current time?

현상금은 구체적으로 "얼마나 많은 시간이 경과 했는지 확인하는 루프를 사용하지 않고"라고 말하지만 , 그렇지 않습니다. 이것은 목표 시간을 설정하고 목표 시간이 지 났는지 계속 확인하므로 현상금을받을 수 있습니다.

온라인으로 사용해보십시오!


1

Tcl , 53 바이트

proc W t {while "\[clock mil]-[clock mil]<$t*1e3" {}}

온라인으로 사용해보십시오!

설명

첫 번째 대괄호를 이스케이프 clock milliseconds하면 명령 을로 줄일 수 있으며 clock mil각 루프에서 해석되며 한 번만 수행됩니다. 밀리 초를 측정 할 때 1000 또는 1e3 씩 곱해야 1 바이트를 절약 할 수 있습니다.


1

C # (Visual C # Interactive Compiler) + /u:System.Threading, 36 바이트

x=>new SemaphoreSlim(0).Wait(x*1000)

온라인으로 사용해보십시오!

용량이없는 세마포어를 작성하고 지정된 시간 (초) 동안 가져 오려고 시도합니다.

나는 내가 여기서 뭔가를 기다리고 있다는 것을 알고 있습니다. 나에게 이것은 반대로 Ping / timeout 솔루션처럼 보입니다 Thread.Sleep. 코드는 얻을 수없는 리소스를 가져 오려고 시도하고 제한 후에 시도를 중지합니다.

===

아래는 Task무한 루프로 시작 하여 타임 아웃으로 완료 될 때까지 기다리는 변형입니다 . 모든 필수 네임 스페이스가 기본적으로 포함되지만 솔루션은 위의 것보다 몇 바이트 더 깁니다.

C # (Visual C # 대화식 컴파일러) , 40 바이트

x=>Task.Run(()=>{for(;;);}).Wait(x*1000)

온라인으로 사용해보십시오!


0

05AB1E , 22 바이트

žcžb60*+[Džcžb60*+αIQ#

온라인으로 사용해보십시오.

참고 : 현재 초의 마이크로 초 수에 따라 허용 오차는 0.1 초보다 약간 클 수 있습니다. 그러나 거의 절반의 답변에 비슷한 문제가 있으므로 허용되는 것으로 나타났습니다.

설명:

05AB1E에는 현재 시간이 내장되어 있지 않습니다. 그러나 현재 년 / 월 / 일 /시 / 분 / 초 / 마이크로 초 동안 별도의 내장으로 내장되어 있습니다. 초만 사용하면 잠재적으로 59에서 0까지 문제가 발생할 수 있으므로 분과 초가 모두 필요하므로 코드가 아닌 언어의 대부분의 답변보다 코드가 더 길어집니다.

žc                # Push the current seconds
  žb              # Push the current minutes
    60*           # Multiply it by 60
       +          # Add them together
[                 # Start an infinite loop:
 D                #  Duplicate the initial (minutes*60 + seconds) from before the loop
  žcžb60*+        #  Push the current (minutes*60 + seconds) again
          α       #  And take the absolute difference between the two
           IQ     #  And if this is equal to the input:
             #    #   Stop the infinite loop

0

SmileBASIC, 20 바이트

INPUT T
DIALOG"",,,T

T몇 초 후에 자동으로 닫히는 대화 상자를 엽니 다 . 이것이 "내장 대기 기능"으로 계산되는지 확실하지 않지만 이것이 사용하는 것만 큼 유효하다고 생각합니다 ping.

부정 행위가 아닌 대체 37 바이트 프로그램 :

INPUT T
FADE.,T*60WHILE FADECHK()WEND

화면 페이드 색상이 T몇 초에 걸쳐 점차적으로 0 (알파 = 0, 빨간 = 0, 녹색 = 0, 파란 = 0) (효과 없음)으로 바뀐 다음 해당 애니메이션이 끝날 때까지 기다립니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.