수면 정렬 구현


74

수면 정렬은 인터넷에서 찾은 정수 정렬 알고리즘입니다. 출력 스트림을 열고 각 입력 숫자에 대해 병렬로 숫자 초 동안 지연시키고 해당 숫자를 출력합니다. 지연으로 인해 가장 높은 숫자가 마지막에 출력됩니다. 나는 그것이 O (n + m)을 가지고 있다고 추정합니다. 여기서 n은 요소의 수이고 m은 가장 높은 수입니다.

Bash의 원래 코드는 다음과 같습니다.

#!/bin/bash
function f() {
    sleep "$1"
    echo "$1"
}
while [ -n "$1" ]
do
    f "$1" &
    shift
done
wait

여기 의사 코드는

sleepsort(xs)
 output = []
 fork
   for parallel x in xs:
     sleep for x seconds
     append x to output
 wait until length(output) == length(xs)
 return output

당신의 임무는 선택한 프로그래밍 언어에서 함수로서 슬립 정렬을 구현하는 것입니다. 경쟁 조건과 같은 동시성 요소를 무시하고 공유 리소스를 잠그지 마십시오. 가장 짧은 코드가 승리합니다. 함수 정의는 코드 길이에 포함됩니다.

입력 목록은 음이 아닌 정수로만 제한되며 입력 목록의 길이는 합리적으로 길어야 (최소한 10 개의 숫자 테스트) 레이스 조건이 발생하지 않습니다. 경쟁 조건이 발생하지 않는다고 가정합니다.


3
길이에 중요한 것은 무엇입니까? IO 또는 관련 루틴을 포함한 완전한 프로그램?
Konrad Rudolph 2016 년

8
이것에 문제가 있습니다. 목록의 순서에 따라 첫 번째 값이 인쇄되기 전에 전체 목록을 읽지 못할 수 있습니다. 예를 들어, 읽는 데 45 초가 걸리는 큰 목록, 첫 번째 값은 2, 마지막 값은 1입니다. 2를 인쇄 한 후 1을 인쇄 할 스레드가 실행될 수 있습니다. 죄송합니다. 출력이 더 이상 올바르게 정렬되지 않았습니다. 몇 가지 해결 방법이있을 수 있습니다-스레드를 만든 다음 전체 목록을 읽은 후 시작하십시오 (그러나 골프에 비해 코드가 길어집니다). 누군가이 잠재적 인 문제를 해결하는 골프를 제공 할 수 있는지 궁금합니다.
Thomas Owens

11
또한이 알고리즘을 실제로 흥미롭게 만드는 것은 실제로 실제 응용 프로그램이 존재한다는 것입니다. 예를 들어, DNA 시퀀싱 (Sanger sequencing)은 길이에 따라 DNA 단편을 분류하기 위해 이와 같은 것에 의존합니다 (보다 일반적으로 모든 전기 영동은 유사한 것을합니다). 차이점은 시퀀싱은 컴퓨터가 아니라 물리적으로 수행된다는 것입니다.
Konrad Rudolph 2016 년

12
나는 모든 사람의 퍼레이드에 비가 내리는 것이 싫지만 아마도 O (N ^ 2) 인 방식으로 OS 스케줄러에 복잡성을 오프로드하지 않습니까?
Random832

1
O (n) 시간이 걸리지 만 O (n) 물리적 객체가 필요한 물리적 정렬 알고리즘이 있다고 생각합니다. 우리는 녹는 양초와 튜브를 사용하여 그것을 할 수 있습니다. en.wikipedia.org/wiki/Spaghetti_sort
Ming-Tang

답변:


17

일종의 절름발이 시도, 59 55 52 38 32 문자 :

map{fork||exit print sleep$_}@a

바레 본 : 25 자 :

... 정렬 결과를 다이 출력으로 신경 쓰지 않으면 :

map{fork||die sleep$_}@a

모든 트리밍으로 :

(최대 챌린지 준수를 위해 44 자)

sub t{map{fork||exit print sleep$_}@_;wait}

펄이 당신을 기다리게하면 39 자 :

sub t{map{fork||exit print sleep$_}@_}

그리고 다시, 당신이 괜찮다면 die(), 32 자 ...

sub t{map{fork||die sleep$_}@_}

Perl 6에서 또는 'say'기능이 선언되면 print함수 를로 대체하여 say각 인스턴스에 문자를 저장할 수 있습니다. 분명히 die둘 다 분기 프로세스를 종료하고 출력을 기록하기 때문에 가장 짧은 솔루션으로 남아 있습니다.


다음 perl-E과 같은 5.010 기능을 활성화하기 위해 계속 실행할 수 있습니다.say
mbx

(fork&&die sleep$_)for@a작동
malkaroee

20

C , 127 자, 다소 확실한 해결책 :

main(int c,char**v){
#pragma omp parallel for num_threads(c)
for(int i=1;i<c;++i){int x=atoi(v[i]);sleep(x);printf("%d ",x);}}

( gcc -std=c99 -fopenmp sort.c모든 경고를 편집 하고 무시합니다.)


4
쿨 난 정말 opemp를 배워야 해요
Nils

나는 그 명령을 93 줄 (명령 줄 구문 분석없이)이라고 부를 것입니다. 그러나 C에서 34 개의 문자 만 추가하면됩니다!
렉스 커

1
@KonradRudolph-6 바이트를 거꾸로 저장할 수 있습니다 for(;c>=0;--c){int x=atoi(v[c]);. 그것이 허용되는지 확실하지 않습니다.
owacoder

15

루비 1.9, 32 자

기능으로서 :

s=->a{a.map{|i|fork{p sleep i}}}

사전 정의 된 변수 만 사용할 수 있으면 25 자로 줄어 듭니다.

a.map{|i|fork{p sleep i}}

1
Thread.new{p sleep i}출력을 인쇄하는 데 사용하여 상당히 많은 문자를 저장할 수 있습니다 .
Howard

@Howard : 잘 잡아라, 고마워!
Ventero

@ Ventero, 나는 단지 루비를 배우고 있으며이 람다 함수를 어떻게 실행할지 또는 더 구체적으로 입력하는 방법을 알고 싶습니다. IRB로 실행할 수 있습니까? 감사!
벤 힐리

14

JavaScript , 65 자 (사용 여부 console.log또는 결과 출력 에 따라 다름 )

a.map(function(v){setTimeout(function(){console.log(v)},v*1000)})

이것은 a음수가 아닌 정수 map()의 배열 이고 배열 프로토 타입 (JavaScript 1.6+)에 존재 한다고 가정합니다 .


1
정확성을 떨어 뜨리지 않고 1000 대신 10 (또는 9)을 곱하여 2 ~ 3 개의 문자를 제거 할 수 있습니다.
Konrad Rudolph 2016 년

12
1 초를 유지하려는 경우 1e3대신 사용할 수 있습니다 .
Joey

2
@Tomalak alert은 JavaScript의 블로킹 출력 prompt이며 JavaScript의 블로킹 입력 confirm이며 JavaScript의 블로킹 이진 입력입니다. JS가 명령 행에 작성되어야한다면, 이것이 당신이 사용하는 호출 일 것입니다.
zzzzBov

1
@zzzzBov, 블로킹 출력을 사용하는 것은 거의 확실히이 작업에 좋지 않은 아이디어입니다.
피터 테일러

2
@zzzzBov, JS 사양이 setTimeout 큐에 넣은 썽크가 호출되는 순서에 대해 강력한 보장을 제공하지 않는 한, 내가 걱정하는 순서입니다.
피터 테일러

13

APL ( 15 13)

{⎕←⍵⊣⎕DL⍵}&¨⎕

그것이하는 일 :

¨⎕       : for each element of the input
&        : do on a separate thread
⎕DL⍵    : wait approx. ⍵ seconds
⎕←⍵     : output ⍵

3 자 대신 상자가 표시됩니다.
defhlt

8
@ArtemIce : 세 개의 상자 (쿼드)가 있어야합니다. 2 개는 I / O 변수 (입력 읽기 및 쓰기 출력)이며, 하나 ⎕DL는 절전 기능 의 이름입니다 .
marinus

9

Erlang에서의 4 가지 시도 :

콘솔로의 출력은이 작업을 수행하기에 9ms * Number충분하기 때문에이 작업을 수행 할 수있는 자유를 얻었습니다 (Atom 임베디드 보드에서 테스트 = 느림).

60 자 필요

s(L)->[spawn(fun()->timer:sleep(9*X),io:write(X)end)||X<-L].

콘솔로의 출력은 비언어적이므로 P대신 처리 할 메시지를 보냅니다 .

55 자 필요

s(P,L)->[spawn(fun()->timer:sleep(9*X),P!X end)||X<-L].

시간이 지난 후 보내기는 다르게 수행 할 수도 있습니다 (이것은 작동합니다 1ms * Number).

41 자 필요

s(P,L)->[erlang:send_after(X,P,X)||X<-L].

실제로 내장 함수 send_after가 늦게 나오고이 erlang:네임 스페이스를 가져온 것으로 간주하는 경우 (모듈 수준에서 완료된) 네임 스페이스 접두사가 필요하기 때문에 실제로 이것은 다소 불공평합니다 .

34 자 필요

s(P,L)->[send_after(X,P,X)||X<-L].

7

C #-137 자

다음은 C #의 답변입니다 (주석에 따라 병렬 처리 수준으로 업데이트 됨)

void ss(int[]xs){xs.AsParallel().WithDegreeOfParallelism(xs.Length).Select(x=>{Thread.Sleep(x);return x;}).ForAll(Console.WriteLine);}

1
OpenMP C 코드와 비슷하게 WithDegreeOfParallelism작동 하도록 지정해야합니다 num_threads.
Konrad Rudolph 2016 년

120 바이트 :void m(int[] l){foreach(var i in l){var t=new Thread(()=>{Thread.Sleep(int.Parse(s));Console.Write(s);});t.Start();}}}
MrPaulch

@MrPaulch 프로그램이 예상 된 동작을하게하려면 스레드를 다시 결합해야합니다.
또 다른 괴짜

왜? 가장 긴 실행 스레드는 프로세스를 활성 상태로 유지합니다.
MrPaulch

7

파이썬-81 93 148 150 153

@BiggAl의 코드를 조정하면 우리가 플레이하는 게임이기 때문에 ....

import threading as t,sys
for a in sys.argv[1:]:t.Timer(int(a),print,[a]).start()

... 또는 97 175 스레드 시작 지연

import threading as t,sys
for x in [t.Timer(int(a),print,[a]) for a in sys.argv[1:]]:x.start()

ala 명령 행을 통해 입력을받습니다.

./sleep-sort\ v0.py 1 7 5 2 21 15 4 3 8

많은 파이썬 골프와 마찬가지로 이름을 짧게하는 앨리어싱 변수가 문자를 저장하지 않을 정도로 코드가 컴팩트 한 지점이 있습니다.

이것은 sys의 별칭을 지정하고 BOTH를 t로 스레딩하기 때문에 펑키하지만 sys.argv는 t.argv가됩니다. foo import *보다 짧고 순 문자 절약! 그러나 나는 귀도가 기뻐하지 않을 것이라고 생각합니다 ...

자기주의 사항-파이썬을 배우고 c를 배우십시오. 이 성소는 C 솔루션보다 더 중요합니다!


나는 약간의 비틀기를 만들었지 만, 형식화는 주석에 잘 표시되지 않으므로 직접 대답했습니다. daemon이것을 데몬으로 시작하지 않는 한 설정이 필요하지 않으며 esp 위치 인수를 사용하는 것이 더 짧습니다. 별칭 None이있는 경우N
theheadofabroom

아 그리고 첫 번째는 2.7.1에서 나를 위해 작동하지 않습니다. j결국 False한 줄로 너무 많은 일을 시도하는 부작용?
theheadofabroom

똥 나는 당신이 같은 별칭으로 여러 모듈을 가져올 수 있다는 것을 몰랐다. 실제로 별도의 서브 모듈에 놓여있는 동일한 커스텀 기본 클래스의 여러 서브 클래스가있는 용도에 대해 생각할 수있다. 우리가 30을 더 깎을 수 있다면 그것은 bash보다 짧다. 그러나 나는 그것이 일어날 것이라고 생각하지 않는다.
theheadofabroom

내가 알지 못하는 이유는 당신이 할 수 없기 때문입니다. 방금 실행을 시도했지만 스레딩이 별칭이 아니며 스레딩이라고합니다. t로 별칭이 지정된 sys입니다 ... 이것을 실행 해 보셨습니까? 그것은 가져올 각 비록에만 추가로 2 개 문자있어 as t,s다음 사용 변경 s에 대한sys
theheadofabroom

1
print대신에 함수 를 사용하지 sys.stdout.write않습니까?
날으는 양

6

재미를 위해, 여기 ColdFusion (8+) 버전이 있습니다. ;-) 여기에 가독성을 위해 추가 한 줄 바꿈과 들여 쓰기를 세지 않는 109자가 있습니다.

<cfloop array="#a#" index="v">
  <cfthread><cfthread action="sleep" duration="#v*1000#"/>#v#</cfthread>
</cfloop>

이것은 <cfoutput>효과가 있다고 가정합니다 . 한 줄에 모두 써서 몇 개의 문자를 저장할 수 있습니다.


6

자바 (일명 결코 codegolf에서 승리 없음) : 234 개 (211) 187 문자를

public class M{public static void main(String[]s){for(final String a:s)new Thread(){public void run(){try{sleep(Long.parseLong(a));}catch(Exception e){}System.out.println(a);}}.start();}}

언 골프 :

public class M {
    public static void main(String[] s) {
        for(final String a:s) new Thread(){
            public void run() {
                try {
                    sleep(Long.parseLong(a));
                } catch(Exception e){}
                System.out.println(a);
            }
        }.start();
    }
}

@Joey 똑바로 설정해 주셔서 감사합니다.
진실성

이 수업은 비공개 일 수 있으며 7자를 절약 할 수 있습니다.
Daniel Lubarov

1
조항을 선언 throws Throwable하고 제거 할 수도 있습니다 catch.
Daniel Lubarov

로 교체 Long.parseLong하여 2 바이트를 절약 할 수 있다고 생각합니다 Long.valueOf.
HyperNeutrino

6.5 년이 지났다는 것을 알고 있지만 일부 부품은 골프를 타 public거나 final제거 할 수 있습니다. (Java 8+) 일 class M{public static void main수 있습니다 interface M{static void main. Long.parseLong(a)가능 new Long(a)( 165 바이트 결과 )
Kevin Cruijssen

5

자바 스크립트-52 자

for(i in a)setTimeout("console.log("+a[i]+")",a[i])

CodeGolf.SE에 오신 것을 환영합니다! 나는 당신이 당신을 위해 대답하도록, 특히 코드로 표시하기 위해 4 칸씩 코드를 들여 쓰도록 포맷했습니다. 편집 페이지의 사이드 바에 다른 서식 도움말이 있습니다.
dmckee

5

스칼라 -42 40 자 (특별한 경우)

스레드 풀이 적어도 목록 요소 수의 크기 인 경우 :

a.par.map{i=>Thread.sleep(i);println(i)}

스칼라-72 자 (일반)

a.map(i=>new Thread{override def run{Thread.sleep(i);println(i)}}.start)

{}한 줄에 머물 때 사용하지 않는 afaik .
날으는 양

@flying sheep- {}하나의 문장으로 생략 할 수 있지만 ;, 한 줄 또는 다른 줄로 구분 된 것을 그룹화하려면 여전히 필요합니다 . 그리고 {}어떤 경우에는 (예를 들어 if / else) 없이 여러 줄로 된 문장을 작성할 수 있습니다 .
Rex Kerr

아, 나는 당신이 그것들을 생략 할 수 있다는 것을 의미하지는 않지만 ()대신 한 줄짜리에 사용할 수 있습니다 . 그것은 맛의 문제라고 생각합니다. (나는 그들을 대체 할 ()때 전혀 지원 되지 않는 이유를 실제로 얻지 {}못합니다. 아마도 Java 사용자를 즉시 ​​소외시키지 않을 것입니다). 스칼라는 멋지지만 들여 쓰기로 코드 블록을 정의하는 것이 분명히 우수합니다. (그래서 종교 전쟁이 계속됩니다.)
날아 오는 양

@ 날아 다니는 양-당신은 잘못 알고 있습니다. ()단일 명령문에 사용할 수 있습니다 . (1 to 9).map(i => {val j = i+1; i*j})REPL을 입력 한 다음를 사용하면 어떻게되는지 확인하십시오 (1 to 9).map(i => (val j = i+1; i*j)).
렉스 커

사실이지만 표현과 물건만을 언급했습니다. 죄송합니다, 나는 줄 바꿈을 사용하지 않고 물건을 쓰는 것을 싫어합니다;)
날으는 양

4

하스켈-143 자

import Control.Concurrent
import System
d=threadDelay
f x=d(10^6*x)>>print x
g s=mapM(forkIO.f)s>>d(10^6*maximum s+1)
main=getArgs>>=g.map read

옵션 인 경우 stdin에 입력을 사용하여 짧게 만들 수는 있지만 늦거나 어쨌든 함수 자체의 경우 여전히 104 자입니다.


4

베 펀지 -98, 38 31 바이트

나는 이것이 오래된 도전이라는 것을 알고 있지만 최근에 최근에 sleepsort와 2D 언어를 발견하고 결합하는 방법에 대한 아이디어가 있었고 그것을 게시 할 곳을 찾았으므로 여기에 있습니다.

&#vt6j@p12<'
v:^ >$.@
>:!#^_1-

주 IP는 숫자 ( &)를 읽은 다음이 t를 복제합니다. 하나는 동일한 행과 주기로 진행하여 새 숫자를 읽고 EOF에 도달 할 때까지 새 자식을 생성하여 시퀀스를 종료합니다. 모든 하위 프로세스는 폐쇄 루프 (에 박히 v^세 번째 열의) 기본 IP는 입력을 판독 완료 및 명령 시퀀스 실행까지 '<21p의 문자를두고, <덮어 쓰기, 위치 (1,2)에서를 ^모두 확보 자식 프로세스는 동시에 순환을 시작하여 각 반복에서 1 씩 감소합니다. 서로 다른 IP의 실행 속도가 자동으로 동기화되므로 입력 목록을 정렬하여 순서대로 종료하고 값을 인쇄합니다.


제어 흐름을 조금 움직여서 26 바이트 .
Jo King

3

파티에 조금 늦었다 :

메이플 -91 83 자

91 년에 :

M:=():use Threads in p:=proc(n)Sleep(n);:-M:=M,n;end:Wait(map(i->Create(p(i)),L)[])end:[M];

83에서 :

M:=():use Threads in Wait(seq(Create(proc(n)Sleep(n);:-M:=M,n end(i)),i=L))end:[M];

(이것은 메이플 버전 15가 필요하며 목록이 L로 정렬 될 것으로 예상합니다)


3

C, 70 69 자

자식 프로세스가 돌아 오기를 기다리지 않으면 작동합니다.

main(n) {
    while(~scanf("%d",&n)?fork()||!printf("%d\n",n,sleep(n)):0);
}

2

PHP 57 바이트

<?for(;$i=fgets(STDIN);)pcntl_fork()?:die($i.usleep($i));

pcntl_fork ()는 리눅스에서만 사용할 수 있습니다.


2

배쉬 (38) :

xargs -P0 -n1 sh -c 'sleep $0;echo $0'

편집 : 공백이나 줄 바꿈으로 구분 된 stdin의 부동 소수점.


2

하스켈, 90

import Control.Concurrent
s::[Int]->IO()
s=mapM_(\x->forkIO$threadDelay(x*9999)>>print x)

이것이 모든 요구 사항을 충족하기를 바랍니다.



1

@rmckenzie의 버전에서 약간의 조정 :

파이썬 지연 스레드 시작 155 152 114 108 107 :

import sys, threading as t
for x in [t.Timer(int(a),sys.stdout.write,[a]) for a in sys.argv[1:]]:x.start()

지연없이 파이썬 130 128 96 95 93 :

import sys,threading as t
for a in sys.argv[1:]:t.Timer(int(a),sys.stdout.write,[a]).start()

보다 간결한 호출이 있고 가져 오기 필요성을 제거하는 Timer대신을 Thread(를) 사용하여 몇 가지 최적화를 더 관리했습니다 time. 지연된 스레드 시작 방법은 시작시 목록을 별도로 초기화 할 필요가 없기 때문에 목록 이해에서 이점을 얻습니다.하지만 "["+"]"+" "-":"for 루프보다 두 문자가 길기 때문에 ( ) 지연된 시작 없이는 쓸모가 없으므로 목록을 신중하게 사용해야합니다. 생성기가 아닌 생성기를 통과 할 때까지 실제로 타이머 스레드를 생성하지 않습니다.

다른 사람이 최적화를 했습니까?


와 트릭은 as도움이되지만 2.7.1에서 당신은 단지 별칭에 하나 개의 모듈을 가져올 수 있습니다, 그리고 당신에 대한 몇 가지 재생 후에도 수 없습니다 import mod1,mod2 as a,b, 당신은에 있습니다 import mod1 as a, mod2 as b. 그것은 여전히 ​​몇 문자를 절약하지만 내가 생각한 치료법은 아닙니다 ... 실제로 sys를 sys로 두는 것이 좋습니다. 앨리어싱 스레딩은 여전히 ​​도움이됩니다 ...


당신은 내가 이길있어, upding있다. 나는 x = []; x + = []를 좋아한다. 당신이 그렇게 할 수 있는지 몰랐어요 ....
arrdem

... 루프의 : [statement]와 f (x) 사이의 공백을 풀면 128 에서이 작업을 수행 할 수 있습니다 ... 어쨌든 127에 도달했지만 최종 줄 바꿈을 계산하지 않는 것 같습니다. CG에서 합법적입니다). 도구가되어 코드를 도용하는 대신 업데이트를 제공 할 것이라고 생각했습니다.
arrdem

@rmckenzie 그것을 위해, 나는 당신을 훔쳤다. 저는 항상 CG 파이썬을 보는 것에 관심이 있습니다. 언어의 목표를 고려할 때 매우 왜곡 된 일을하는 것 같습니다.
theheadofabroom

그래, 나는 문자 그대로의 "유리 바닥"을 희생시키면서 읽을만한 대부분의 파이썬 골프가 어떻게 유지되는지에 정직하게 충격을 받았다. 이것을 확인하십시오 : import threading, sys as t
arrdem

1

클로저, 54

(defn s[n](doseq[i n](future(Thread/sleep i)(prn i))))


생략 defn(인 괄호 + 인수 목록 : 54 ~ 43 chrs)을 생략하여 몇 가지 문자를 제거 하거나 => len- = 2 fn대신 사용 defn하여 clj에 43 : D
test30

1

녹-150 바이트

그리고 이것이 Rust에서 골프를 코딩하지 않는 이유입니다 .Java보다 더 장황합니다.). 외부 상자에 따라 다름crossbeam , 그것이 없으면 더 나빠질 것입니다.

|x|{extern crate crossbeam;crossbeam::scope(|s|for&v in x{s.spawn(move||{std::thread::sleep(std::time::Duration::from_secs(v));println!("{}",v)});})}

완벽한 테스트 프로그램 :

fn main() {
    let z =
    |x|{extern crate crossbeam;crossbeam::scope(|s|for&v in x{s.spawn(move||{std::thread::sleep(std::time::Duration::from_secs(v));println!("{}",v)});})}
    ;
    z(&[4, 2, 3, 5, 7, 8, 9, 1, 6, 10])
}

0

언어를 다시 시작하기 위해 C #의 포트 인 지루한 종류 :

F #-90 자

PSeq.withDegreeOfParallelism a.Length a|>PSeq.iter(fun x->Thread.Sleep(x);printfn "%A" x)

0

자바 스크립트, 74

function(a){for(i=0;i<a.length;i++)setTimeout('alert('+a[i]+')',a[i]*1e3)}

비표준의 71/65 자 :

function(a){a.map(function(v){setTimeout('console.log('+v+')',v*1e3)})}

2011 년에도 function(a){a.map(function(v){setTimeout(console.log,v,v)})}60 바이트 동안 적어도 하나의 브라우저에서 작동했을 것 입니다. 물론 요즘에는 a=>a.map(v=>setTimeout(console.log,v,v))대신 쓸 것입니다.

0

Tcl 8.6, 41 자

lmap c $argv {after $c "puts $c"};vwait f

당신은 그것을 죽여야합니다 ^C


0

VB.NET 100 바이트

VB.Net에는 단일 행 람다가 하나의 명령문 만 포함해야하므로이 코드에는 여러 행이 있어야합니다.

Array.ForEach(i, Async Sub(x)
Await Threading.Tasks.Task.Delay(x*1000)
Console.WriteLine(x)
End Sub)

언 골프 드 :

Option Strict Off

Sub Main(i() as String)
    Array.ForEach(i, Async Sub(x)
                         Await Threading.Tasks.Task.Delay(x * 1000)
                         Console.WriteLine(x)
                     End Sub)
End Sub

그러나 바이트 수로 imports 문을 계산하는지 확실하지 않은 경우 계산하지 않으면 다음과 같이 작성할 수 있습니다.

VB.NET 71 바이트

a.ForEach(i, Async Sub(x)
Await t.Delay(x*1000)
c.WriteLine(x)
End Sub)

언 골프 드 :

Option Strict Off
Imports t = System.Threading.Tasks.Task
Imports c = System.Console
Imports a = System.Array

Sub Main(i() as String)
    a.ForEach(i, Async Sub(x)
                     Await t.Delay(x * 1000)
                     c.WriteLine(x)
                 End Sub)
End Sub

0

그루비, 47 바이트

명령 행에 숫자가 있다고 가정합니다.

args.each{i->Thread.start{sleep(i*22)print i}}


0

Mathematica, 34 또는 36 바이트

RunScheduledTask[Print@#,{#,1}]&/@

이 코드의 끝에 정렬 할 목록을 추가하고 평가하십시오. 유효한 함수 정의 여야하는 경우 두 개의 추가 바이트가 필요합니다.

RunScheduledTask[Print@#,{#,1}]&/@#&

0

C ++ 11, 229 바이트

#import<future>
#import<iostream>
using namespace std;int main(int a,char**v){auto G=new future<void>[a];while(--a){G[a]=move(async([=](){this_thread::sleep_for(chrono::seconds(atoi(v[a])));cout<<v[a]<<" "<<flush;}));}delete[]G;}

언 골프 및 사용법 :

#import<future>
#import<iostream>
using namespace std;
int main(int a,char**v){
 auto G=new future<void>[a];
 while(--a){
  G[a]=move(async(
   [=](){
    this_thread::sleep_for(chrono::seconds(atoi(v[a])));
    cout<<v[a]<<" "<<flush;
   }
  ));
 }
 delete[]G;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.