두 배 길다


15

문제는 입력을 인쇄하고, 일정 시간 동안 기다렸다가, 입력을 인쇄하고, 처음 대기 한 시간의 두 배를 대기하고, 입력을 다시 인쇄하는 등의 작업을 수행하는 것입니다. 초기 지연 시간은 1 시간 미만이어야하며 이후 지연 시간의 정확도는 +/- 5 % 여야합니다. 그 외에는 지연 시간에 제한이 없습니다.

예:

입력 : hi.

출력 : hi(1ms 일시 정지) hi(2ms 일시 정지) hi(4ms 일시 정지) hi(8ms 일시 정지) hi(16ms 일시 정지) 등

또한 허용 :

hi(1 분 멈춤) hi(2 분 멈춤) hi(4 분 멈춤) hi(8 분 멈춤) hi(16 분 멈춤) 등

입력은 프로그램 시작시 제공되어야하며 (STDIN, 명령 행 매개 변수, 함수 매개 변수 등) 문자열입니다.

초기 지연은 0 일 수 없습니다.


출력이 무한해야합니까, 아니면 얼마 후에 출력을 멈출 수 있습니까?
스파클 포니 동지

1
@ComradeSparklePony (우주의 열사, 컴퓨터 충돌, stackoverflow, 메모리 부족 등)까지 가능한 한 출력해야합니다.
programmer5000

그것이 유래 같은 것이, 메모리 부족 등이다 @ComradeSparklePony 경우에만이 y=x=>(x&&alert(x),y())될 것이다 기술적으로 허용,하지만 난 그것을 downvote 것입니다.
programmer5000

@ programmer5000 감사합니다.
스파클 포니 동지

줄 바꿈을 인쇄 할 수 있습니까?
MD XF

답변:


12

05AB1E , 6 바이트

암호:

[=No.W

설명:

[        # Start an infinite loop
 =       # Print the top of the stack without popping
  No     # Compute 2 ** (iteration index)
    .W   # Wait that many milliseconds

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


1 초 정도 기다렸다가 w대신 사용할 수 있습니다 .W.
Riley

@ Riley 나는 그것이 작동하지 않을 것이라고 생각합니다. w무슨 일이 있어도 1 초간 기다렸다가 .Wa를 터뜨려 몇 밀리 초를 기다립니다.
스파클 포니 동지

@ComradeSparklePony 당신이 맞아요. 그럴 것 Gw입니다.
Riley

코드의 문제를 반드시 반영하는지는 모르겠지만 링크 된 예제를 실행하자마자 엔진은 다음과 같이 알려줍니다. "경고 : 요청이 60 초 제한 시간을 초과하여 종료되었습니다."
doppelgreener

@doppelgreener 네,이 경우 온라인 통역사가 최선의 선택이 아닐 수도 있습니다. 오프라인은 매력처럼 작동합니다.
Adnan

15

스크래치, 8 블록 + 3 바이트

set [n] to [1]; forever { say [x]; wait (n) secs; set [n] to ((n) * (2)) }

파이썬과 동일하다 :

import time
n = 1
while 1:
    print("x")
    time.sleep(n)
    n = n * 2

1
왜 "+ 3 바이트"입니까?
Cole Johnson

2
9 개 블록 (예 : Forever, n) + 3 바이트 (예 : x, 2)
OldBunny2800

5

파이썬 3, 60 56 바이트

import time
def f(x,i=1):print(x);time.sleep(i);f(x,i*2)

변경 로그:

  • 재귀 람다를 재귀 함수로 변경했습니다 (-4 바이트)

printPython 2로 전환 하여 문장에 바이트를 절약 할 수 있습니다. :)
numbermaniac

1
예 @numbermaniac,하지만 파이썬 2로 전환해야 할 것 : P
L3viathan

5

MATL , 8 바이트

`GD@WY.T

첫 번째 일시 중지는 2 초입니다.

MATL Online 에서 사용해보십시오 . 또는 프로그램이 시작된 후 경과 된 시간을 표시 하는 수정 된 버전 을 참조하십시오 . (인터프리터가 작동하지 않으면 페이지를 새로 고치고 다시 시도하십시오).

또는 GIF를 참조하십시오 :

enter image description here

설명

`     % Do...while
  G   %   Push input
  D   %   Display
  @   %   Push iteration index (1-based)
  W   %   2 raised to that
  Y.  %   Pause for that time
  T   %   Push true. This will be used as loop confition
      % End (implicit). The top of the stack is true, which produces an infinite loop 

@ programmer5000 호기심 : 온라인 통역사가 도움이 되었습니까?
Luis Mendo

예, 왜 그렇습니까?
programmer5000

@ programmer5000 감사합니다. 그냥 확인하십시오. 때때로 타임 아웃 문제가 있습니다
Luis Mendo

5

Mathematica 34 32 30 29 바이트

원래 솔루션 34 바이트 :

For[x=.1,1<2,Pause[x*=2];Print@#]&

Do로 2 바이트를 면도

x=1;Do[Pause[x*=2];Print@#,∞]&

@MartinEnder의 재귀 솔루션으로 하나 이상의 바이트를 제거하십시오.

±n_:=#0[Print@n;Pause@#;2#]&@1

@ngenisis는 ReplaceRepeated 재귀를 사용하여 다른 바이트를 제거합니다.

1//.n_:>(Print@#;Pause@n;2n)&

4
True입니다 1>0. 그러나 이와 같은 것이 조금 더 짧습니다.±n_:=#0[Print@n;Pause@#;2#]&@1
Martin Ender

나는 1<2당신의 의견에 앞서 그러나 재귀 솔루션은 바이트를 절약합니다. 감사합니다 @MartinEnder
Kelly Lowder

±CP-1252 인코딩 (기본 Windows 인코딩)에서 1 바이트입니다.
JungHwan Min

3
더 짧은 :1//.n_:>(Print@#;Pause@n;2n)&
ngenisis

5

옥타브, 42 41 바이트

x=input('');p=1;while p*=2,pause(p),x,end

rahnema1 덕분에 1 바이트를 절약했습니다 . p*=2보다 짧습니다 p=p*2.

나는 이것을 골프화 할 수 없었다는 것을 믿을 수 없지만 실제로는 쉽지 않았습니다.

  • 입력은 시작에 있어야하므로 첫 번째 부분을 피할 수 없습니다.
  • 두 배가되는 숫자가 필요하며 루프 앞에서 초기화해야합니다.
    • 입력을 루프의 조건부로 사용할 수는 있지만 p*=2다른 곳에 있어야 합니다.
    • 일시 중지에는 반환 값이 없습니다. 그렇지 않으면 while pause(p*=2)

2
rahnema1에서 배운 트릭 : input(0)작품
Luis Mendo

1
@LuisMendo 불행히도 트릭은 최신 버전의 옥타브에서 작동하지 않습니다 :(
rahnema1

4

자바 (OpenJDK 8) 113 바이트

interface M{static void main(String[]a)throws Exception{for(int i=1;;Thread.sleep(i*=2))System.out.print(a[0]);}}

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

Leaky Nun 덕분에 -60 바이트!


2
"골프에 Java를 사용하지 마십시오. +1입니다. 나쁜 생각입니다." TIO 링크를 추가 할 수 있습니까?
programmer5000

@ programmer5000 물론, TIO가 코드가 끝날 때까지 기다리기 때문에 작동하지 않습니다.
HyperNeutrino

2
왜 클래스 대신 인터페이스가 필요한가?
rightfold

2
@rightfold 인터페이스를 사용하면 publicin 을 생략 할 수 있습니다 public static void main.
Leaky Nun

1
@ColeJohnson 인수가 필요합니다.
Leaky Nun

4

R, 50 48 바이트

function(x,i=1)repeat{cat(x);Sys.sleep(i);i=i*2}

하나의 필수 인수 인 인쇄 할 문자열이있는 익명 함수를 반환합니다. 줄 바꿈을 인쇄하지 않고 x화면에서 뱉어 냅니다. i선택적인 인수는 기본값 1이며 i초 동안 기다렸다가 두 배가됩니다.i 됩니다.

pajonk 덕분에 -2 바이트

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


왜 시작 하고 끝에서 i=1사용 i=i*2하고 잠을 자지 i않겠습니까?
pajonk

좋은 생각입니다 ... 변경하겠습니다.
주세페

4

루비, 34 28 23 22 (+2의 경우 -n) = 24 바이트

Value Ink 덕분에 3 바이트 절약!

daniero 덕분에 1 바이트 절약

loop{print;sleep$.*=2}

시작에서 2, 다음 4

설명

-n                       # read a line from STDIN
  loop{                } # while(true):
       print;            # print that line
             sleep$.*=2  # multiply $. by 2, then sleep that many seconds. 
                         # $. is a Ruby special variable that starts at 1.

입력을 읽기 전에 1 초간 잠을 자지 만 이미 입력 할 수 있습니다
John Dvorak

-n플래그를 사용 하여 Ruby 프로그램을 시작하면 gets플래그가 처리 할 수 ​​있기 때문에 초기 호출 을 건너 뛸 수 있습니다.
Value Ink

print인수가 없으면 puts$_1 바이트 절약
daniero

4

Alice , 16 바이트

1/?!\v
T\io/>2*.

온라인으로 사용해보십시오! (물론 그다지 볼 필요는 없지만 1 분 안에 얼마나 자주 인쇄되는지 확인할 수 있습니다.)

설명

1    Push 1 to the stack. The initial pause duration in milliseconds.
/    Reflect to SE. Switch to Ordinal.
i    Read all input.
!    Store it on the tape.
/    Reflect to E. Switch to Cardinal.
>    Move east (does nothing but it's the entry of the main loop).
2*   Double the pause duration.
.    Duplicate it.
     The IP wraps around to the first column.
T    Sleep for that many milliseconds.
\    Reflect to NE. Switch to Ordinal.
?    Retrieve the input from the tape.
o    Print it.
\    Reflect to E. Switch to Cardinal.
v    Move south.
>    Move east. Run another iteration of the main loop.

4

R, 44 43 바이트

44가 여전히 똑같습니다. 44; (

이 답변은 이미 적절한 솔루션을 제공하지만 더 많은 바이트를 절약 할 수 있습니다.

function(x)repeat{cat(x);Sys.sleep(T<-T*2)}

실제로 인쇄 가능한 모든 것을 인수로 취하는 익명 함수 x. 2 초에 시작하여 매번 두 배가됩니다. T기본적으로 TRUE로 평가 되는 것으로 정의 된 사실을 남용합니다 1.

또한 이 의견이 OP에서 녹색 빛을 얻는 한 더 짧게 만들 수는 있지만 도전의 정신에 있다고 생각하지 않습니다. 대기 시간 0은 더 이상 허용되지 않습니다.

function(x)repeat cat(x)

2
가난한 학대, 당신을 보면 T그런. 대답의 짧은 버전에서는 중괄호가 필요하지 않고 공백 만 있으면됩니다.
주세페

1
이봐, T마음에 들지 않으면 T스스로 일 어설 수 있습니다. 또한, 좋은 발견 :)
JAD

3

Cubix , 30 바이트

/(?:u<q.;1A>?ou2$/r;w;q^_q.\*/

여기 사용해보십시오

측면 길이가 3 인 큐브에 매핑됩니다.

      / ( ?              # The top face does the delay.  It takes the stack element with the
      : u <              # delay value, duplicates and decrements it to 0.  When 0 is hit the
      q . ;              # IP moves into the sequence which doubles the delay value.
1 A > ? o u 2 $ / r ; w  # Initiates the stack with one and the input.  For input hi this
; q ^ _ q . \ * / . . .  # gives us 1, -1, 10, 105, 104.  There is a little loop that prints 
. . . . . . . . . . . .  # each item in the stack dropping it to the bottom until -1 is hit.
      . . .              # Then the delay sequence is started om the top face
      . . .
      . . .

오 와우, 이것은 깔끔한 언어처럼 보인다
Skidsdev


3

PHP, 31 바이트

for(;;sleep(2**$i++))echo$argn;
for(;;sleep(1<<$i++))echo$argn;

1, 2, 4, 8, ... 초 동안 대기합니다. 파이프로 실행php -nR '<code>'

64 비트 머신에서 63 번째 프린트까지는 더 이상 기다릴 필요가 없습니다.
버전 1은 경고를 sleep() expects parameter 1 to be integer, float given,
버전 2는 경고를 생성 sleep(): Number of seconds must be greater than or equal to 0합니다.

경고음을 소거 @하기 전에 삽입하십시오 sleep.



2

파이썬 3, 61 바이트

import time;i=1;x=input()
while 1:print(x);time.sleep(i);i*=2

@ L3viathan의 골프와 유사하지만 while루프를 사용 합니다.


2

CJam, 26 바이트

qKes{es1$-Y$<{W$o;2*es}|}h

TIO에서 제대로 작동하지 않습니다.

첫 번째 일시 정지는 20 밀리 초입니다.

설명

q                           e# Push the input.
 K                          e# Push 20 (the pause time).
  es                        e# Push the time (number of milliseconds since the Unix epoch).
    {                       e# Do:
     es1$-                  e#  Subtract the stored time from the current time.
          Y$<{              e#  If it's not less than the pause time:
              W$o           e#   Print the input.
                 ;2*es      e#   Delete the stored time, multiply the pause time by 2, push
                            e#     the new time.
                      }|    e#  (end if)
                        }h  e# While the top of stack (not popped) is truthy.
                            e#  (It always is since the time is a positive integer)

2

C, 51 바이트

main(c,v)char**v;{puts(v[1]);sleep(c);main(2*c,v);}

C, 함수로서 35 바이트

c=1;f(n){puts(n);sleep(c*=2);f(n);}

입력을 명령 행 인수로 사용합니다.


2

배치, 62 바이트

@set/at=%2+0,t+=t+!t
@echo %1
@timeout/t>nul %t%
@%0 %1 %t%

이것은 t루프에서 명시 적으로 배가 하는 것보다 짧은 바이트로 판명되었습니다 .

@set t=1
:g
@echo %1
@timeout/t>nul %t%
@set/at*=2
@goto g


2

C #, 80 79 바이트

s=>{for(int i=1;;System.Threading.Thread.Sleep(i*=2))System.Console.Write(s);};

@raznagul 덕분에 1 바이트를 절약했습니다.


Write명령문을 루프 본문으로 이동하여 1 바이트를 절약 할 수 있습니다 .
raznagul

@raznagul 내가 어떻게 그리웠는지 모르겠다, 고마워!
TheLethalCoder

2

파이썬 2, 54 바이트

타이밍 라이브러리 대신 긴 계산을 사용합니다.

def f(x,a=1):
 while 1:a*=2;exec'v=9**9**6;'*a;print x

나는 이제 내 대답이 당신과 비슷하다는 것을 알았습니다. 게시 할 때 귀하의 답변을 읽지 못했지만 귀하의 솔루션을 귀하의 솔루션에 통합하고 싶다면 행복하게 답변을 제거하겠습니다.
Tim

2

PowerShell, 35 33 30 29 바이트

Joey의 도움이되는 힌트

%{for($a=1){$_;sleep($a*=2)}}

설명

%{          # Foreach
for($a=1){  # empty for loop makes this infinite and sets $a
$_;         # prints current foreach item
sleep($a*=2)# Start-Sleep alias for $a seconds, reassign $a to itself times 2           
}}          # close while and foreach

다음으로 실행 :

"hi"|%{for($a=1){$_;sleep($a*=2)}}

1
``이 % {수면 ($ A * = 2)};에 대한 () {$이 _ $ A = 1} : 대신 동안의에 대한 빈을 사용할 수 있어야합니다
어떤

감사! 전에 for 루프를 사용해 보았지만 넣었습니다 for(;;). 세미콜론을 제거하지도 않았습니다.
SomeShinyMonica

1
다른 바이트 ( ) 를 저장하기 위해를 $a=1초기화로 넣습니다 . 또한 실행중인 실제 루틴은 스크립트 블록이므로을 계산할지 확실하지 않습니다 . (내 문제는 ponderings을 피하는, 프로그램을 필요에 대해 다소 엄격한 경향이 있지만, 위해 아무것도 간다 나는 꽤 확실 PowerShell을 사용하는 다양한 방법을 계산하는 방법을 아직이야 질문에.)forfor($a=1){...}%
조이

@ 조이, 잘 작동합니다. 팁 주셔서 감사합니다
SomeShinyMonica

2

파이썬 3, 49 바이트

b=input();x=6**6
while 1:print(b);exec("x+=1;"*x)

약간의 +=작업 지연을 사용하고 시간을 실행합니다 x. x하나의 값을 여러 번 추가하여x .

~에서 시작 6^6(46656) 하여 지연의 최대 5 % 변동을 고수합니다.


영리하지만 이것은 메모리 호그입니다.
eush77

@ eush77 예, 태블릿에서 루프를 7 회 반복 한 후에 종료되었습니다! 데스크탑에서 더 오래 지속될 것으로 기대합니다.
Tim

1

펄 6 , 39 바이트

print(once slurp),.&sleep for 1,2,4...* 

시도해보십시오 ( print타이밍 정보를 추가하도록 재정의 됨)

넓히는:

  print(        # print to $*OUT
    once slurp  # slurp from $*IN, but only once
  ), 
  .&sleep       # then call sleep as if it was a method on $_

for             # do that for (sets $_ to each of the following)

  1, 2, 4 ... * # deductive sequence generator

1

JS (ES6), 44 42 40 38 36 바이트

44가 여전히 44

i=1,y=x=>setTimeout(y,i*=2,alert(x))

경고 폭탄을 좋아하지 않습니까?

i=1,y=x=>setTimeout(y,i*=2,console.log(x))

기술적으로 정확하지만 허점 남용 :

y=x=>(x&&alert(x),y())

Cyoce 덕분에 -3 바이트, Business Cat 덕분에 -2, Neil 덕분에 -2


2
나는 이것을 제대로 테스트 할 수없는 것 같지만 아마도 i=1,y=x=>(alert(x),setTimeout(y,i*=2))몇 바이트를 절약 할 수 있습니다
Business Cat

1
계속해서 Cyoce의 신용 메시지를 편집했습니다. 변경하려면 자유롭게 편집 / 롤백하십시오.
HyperNeutrino

1
어때요 i=1,y=x=>setTimeout(y,i*=2,console.log(x))?
Neil

1

공통 리스프, 49 바이트

(do((a(read))(i 1(* 2 i)))(())(print a)(sleep i))

첫 번째 지연은 1두 번째 여야합니다 .


1
당신은 321 담당자가 있습니다!
programmer5000

@ programmer5000 당신은 3683 담당자가 있습니다!
Cyoce

1

Pyth, 7 바이트

#|.d~yT

설명:

#           Infinitely loop
  .d         Delay for 
      T      10 seconds
    ~y       and double T each time
 |           print input every iteration, too

1

TI-BASIC, 36 바이트

초기 대기 시간은 1 초입니다.

1→L
Input Str1
checkTmr(0→T
While 1
While L>checkTmr(T
End
Disp Str1
2L→L
End

1

라켓, 51 바이트

(λ(s)(do([n 1(* n 2)])(#f)(displayln s)(sleep n)))

➜  ~  racket -e '((λ(s)(do([n 1(* n 2)])(#f)(displayln s)(sleep n)))"Hello")'
Hello
Hello
Hello
Hello
Hello
^Cuser break
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.