ঘুমের বাছাই কার্যকর করুন


74

ঘুমের বাছাই হ'ল একটি পূর্ণসংখ্যা বাছাই অ্যালগরিদম যা আমি ইন্টারনেটে পেয়েছি। এটি একটি আউটপুট প্রবাহ খুলবে এবং সমান্তরালে প্রতিটি ইনপুট সংখ্যার জন্য, সংখ্যা সেকেন্ডের জন্য বিলম্ব করে এবং সেই সংখ্যাটি আউটপুট দেয়। বিলম্বের কারণে, সর্বাধিক সংখ্যা সর্বশেষে আউটপুট হবে। আমি অনুমান করি এটিতে O (n + m) রয়েছে, যেখানে n উপাদানগুলির সংখ্যা এবং m সর্বাধিক সংখ্যা।

বাশের মূল কোডটি এখানে is

#!/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
দৈর্ঘ্যের দিকে গণনা কী? আইও সহ কেবলমাত্র সম্পূর্ণ প্রোগ্রাম বা প্রাসঙ্গিক রুটিন?
কনরাড রুডলফ

8
এটি নিয়ে একটি সমস্যা তালিকার ক্রম অনুসারে প্রথম মানটি প্রিন্ট হওয়ার আগে আপনি পুরো তালিকাটি পড়তে পারেন না। উদাহরণস্বরূপ, একটি বড় তালিকা যা পড়তে 45 ​​সেকেন্ড সময় নেয়, প্রথম মান 2 এবং শেষ মান 1 হয় 1 মুদ্রণের জন্য থ্রেডটি 2 মুদ্রণের পরে কার্যকর করা হতে পারে। ওফস - আউটপুট আর সঠিকভাবে সাজানো হয় না। কিছু কাজ থাকতে পারে - থ্রেড তৈরি করা এবং পুরো তালিকাটি পড়ার পরে সেগুলি শুরু করা (তবে এটি গল্ফের বিপরীতে দীর্ঘতর কোডের দিকে পরিচালিত করবে)। আমি ভাবছি কেউ যদি কোনও গল্ফ সরবরাহ করতে পারে যা এই সম্ভাব্য সমস্যাটির সমাধান করে ... আমি চেষ্টা করব।
টমাস ওয়ানস

11
ঘটনাক্রমে, এই অ্যালগরিদমটি কী আকর্ষণীয় করে তোলে তা হ'ল বাস্তবে বাস্তব জীবনের প্রয়োগ রয়েছে। উদাহরণস্বরূপ, ডিএনএ সিকোয়েন্সিং (স্যাঞ্জার সিকোয়েন্সিং) তাদের দৈর্ঘ্য অনুসারে ডিএনএ খণ্ডগুলিকে বাছাই করার জন্য এই জাতীয় কিছুটির উপর নির্ভর করে (এবং আরও সাধারণভাবে, প্রতিটি ইলেক্ট্রোফোরসিস একই রকম কিছু করে)। পার্থক্যটি হ'ল সিকোয়েন্সিং কম্পিউটারে নয়, শারীরিকভাবে সঞ্চালিত হয়।
কনরাড রুডলফ

12
আমি সবার প্যারেডে বৃষ্টিপাত হওয়া এক হিসাবে ঘৃণা করি, তবে এটি কেবল ওএস শিডিয়ুলারের মধ্যে সম্ভবত ও (লোকেট) (O N 2) এর জটিলতাটি অফলোড করে না?
র্যান্ডম 832

1
আমি মনে করি এখানে শারীরিক বাছাই অ্যালগরিদম রয়েছে যা O (n) সময় নেয় তবে ও (এন) শারীরিক বস্তু। ঠিক আছে, আমরা এটি করার জন্য গলে যাওয়া মোমবাতি এবং একটি টিউব ব্যবহার করতে পারি। en.wikedia.org/wiki/Spaghetti_sort
মিং-টাং

উত্তর:


17

একধরনের খোঁড়া পার্ল প্রচেষ্টা, 59 55 52 38 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$_}@_}

নোট করুন যে পার্ল 6-এ, বা যখন 'বলুন' বৈশিষ্ট্যটি ঘোষিত হয়েছে, প্রতিটি ফাংশনটিতে একটি অক্ষর সংরক্ষণ করে printফাংশনটি প্রতিস্থাপন করা সম্ভব say। স্পষ্টতই যেহেতু dieউভয়ই কাঁটাচামচ প্রক্রিয়াটি সমাপ্ত করে এবং আউটপুট লেখেন, এটি সবচেয়ে সংক্ষিপ্ত সমাধান থেকে যায়।


আপনি perl-E5.010 বৈশিষ্ট্যগুলি সক্ষম করতে চালাতে পারেনsay
এমবিএক্স

(fork&&die sleep$_)for@aখুব কাজ করে
মলকারয়ে

20

সি , 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
শীতল আমাকে সত্যিই অপার্প শিখতে হবে
নীল

আমি এটিকে 93 টি অক্ষর (কমান্ড-লাইন পার্সিং এবং এ জাতীয় ছাড়াই) বলব, তবে এটি চিত্তাকর্ষক যে আপনি কেবল সি এর 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}আউটপুট মুদ্রণ করে আপনি বেশ কয়েকটি অক্ষর সংরক্ষণ করতে পারেন ।
হাওয়ার্ড

@ হাওয়ার্ড: ভাল ক্যাচ, ধন্যবাদ!
ভেন্টোরো

@ ভেন্তোরো, আমি কেবল রুবি শিখছি এবং আমি জানতে চাই আপনি কীভাবে এই ল্যাম্বদা ফাংশনটি চালাবেন বা আরও নির্দিষ্টভাবে আপনি কীভাবে এটিকে একটি ইনপুট দেবেন। আইআরবি দিয়ে চালানো কি সম্ভব? ধন্যবাদ!
বেন হিলি

14

জাভাস্ক্রিপ্ট , 65 টি অক্ষর (আপনি console.logফলাফলটি আউটপুট দেওয়ার জন্য ব্যবহার করেন বা অন্য কোনও কিছুর উপর নির্ভর করে )

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

এটি ধরে নেওয়া হয় যে aঅ-নেতিবাচক পূর্ণসংখ্যার map()অ্যারে এবং এটি অ্যারে প্রোটোটাইপের (জাভাস্ক্রিপ্ট ১.6+) উপস্থিত রয়েছে।


1
আপনি যথাযথতার সাথে আপোষ না করে 1000 এর পরিবর্তে 10 (বা 9) দিয়ে গুণ করে দুটি বা তিনটি অক্ষর মুণ্ডন করতে পারেন।
কনরাড রুডলফ

12
যদি এক সেকেন্ডটি স্থির থাকে তবে আপনি সম্ভবত এর 1e3পরিবর্তে ব্যবহার করতে পারেন ।
জোয়

2
@Tomalak, alertজাভাস্ক্রিপ্ট এর ব্লক আউটপুট হল promptজাভাস্ক্রিপ্ট এর ব্লক ইনপুট, এবং confirmজাভাস্ক্রিপ্ট এর ব্লক বাইনারি ইনপুট হয়। জেএস যদি কমান্ড লাইনে লেখা থাকে তবে সেগুলি আপনার ব্যবহৃত কল।
zzzzBov

1
@zzzzBov, ব্লকিং আউটপুট ব্যবহার করা অবশ্যই এই কাজের জন্য খারাপ ধারণা হবে।
পিটার টেলর

2
@zzzzBov, এটি যে আদেশে বলা হয়েছে সে সম্পর্কে আমি উদ্বিগ্ন - যদি না জেএস স্পেকের সেই আদেশ সম্পর্কে দৃ strong় গ্যারান্টি না থাকে যেখানে সেটটাইমআউট-এনকুইড থঙ্কস বলা হয়।
পিটার টেলর

13

APL ( 15 13)

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

এর মানে কি:

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

আমি 3 টি অক্ষরের পরিবর্তে বাক্সগুলি দেখতে পাচ্ছি।
ডিফ্ল্ট

8
@ আর্টেমটাইস: তিনটি বাক্স (কোয়াড) থাকার কথা। দুটি হ'ল আই / ও ভেরিয়েবল (এটি পড়ার ফলে ইনপুট আসে এবং এতে লেখা আউটপুট প্রিন্ট করে), এবং একটি হ'ল ⎕DLফাংশনের নামে which
মেরিনাস

9

এরলংয়ে চারটি প্রচেষ্টা:

কনসোলের আউটপুট, এটি প্রতিটি কাজ করার জন্য স্বাধীনতা গ্রহণ করেছে 9ms * Numberযেহেতু এটির কাজ করার জন্য এটি যথেষ্ট পরিমাণে রয়েছে (একটি পরমাণু এমবেডেড বোর্ডে পরীক্ষা করা = ধীর):

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

সি # - 137 টি অক্ষর

এখানে সি # তে একটি উত্তর দেওয়া হয়েছে (মন্তব্য হিসাবে সমান্তরালতার ডিগ্রি সহ আপডেট করা হয়েছে)

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

1
এটির WithDegreeOfParallelismজন্য আপনার num_threadsওপেনএমপি সি কোডের সাথে সাদৃশ্যপূর্ণভাবে কাজ করতে আপনাকে নির্দিষ্ট করতে হবে ।
কনরাড রুডলফ

120 বাইট:void m(int[] l){foreach(var i in l){var t=new Thread(()=>{Thread.Sleep(int.Parse(s));Console.Write(s);});t.Start();}}}
মিঃপল্যাচ

@ মিআরপালচ নোট করুন যে আপনার প্রোগ্রামটি প্রত্যাশিত আচরণ করতে চাইলে আপনাকে আবার থ্রেডগুলিতে যোগ দিতে হবে
তবুও আরও একজন গিঙ্ক ২

কেন? দীর্ঘতম চলমান থ্রেডটি প্রক্রিয়াটি বাঁচিয়ে রাখবে।
মিঃপল্যাচ

7

পাইথন - 81 93 148 150 153

@ বিগএল এর কোড টুইট করা, যেহেতু আমরা সেই খেলাটি খেলছি ....

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()

কমান্ড লাইনের মাধ্যমে ইনপুট নেয়, আলা

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

অনেক অজগর গল্ফের মতো, একটি পয়েন্ট আসে যেখানে কোডটি যথেষ্ট কমপ্যাক্ট থাকে যে নামগুলি সংক্ষেপিত করে ভেরিয়েবলগুলি পৃথক করে এমনকি অক্ষরও সংরক্ষণ করে না।

এটি একটি ছদ্মরূপে কারণ এটি সিজকে আলাদা করে দেয় এবং উভয়কে T হিসাবে থ্রেড করে, তাই sys.argv t.argv হয়। ফু আমদানি * এবং নেট ক্যারেক্টার সঞ্চয় থেকে কম! তবে আমি মনে করি গুডো সন্তুষ্ট হবে না ...

স্ব - কে লক্ষ্য করুন এবং সি শিখুন এবং অজগরটিতে গল্ফ করা বন্ধ করুন। পবিত্র এই সমাধানটি সমাধানের চেয়ে কম!


আমি কিছু টুইট করতে সক্ষম হয়েছি, তবে ফর্ম্যাটটি মন্তব্যগুলিতে খুব ভালভাবে দেখা যাচ্ছে না তাই আমি নিজের উত্তরটি দিয়েছি। daemonআপনি এটি ডেমন হিসাবে শুরু না করা পর্যন্ত সেটিংয়ের দরকার নেই এবং অবস্থানগত আরোগুলি ব্যবহার করা কম, এসএসপি। যদি আপনি উপন্যাস NoneকরেনN
হেডহেডাব্রুম

ওহ এবং প্রথমটি আমার জন্য ২.7.১ এর নিচে কাজ করে না, যেমন jমনে হয় False- এক লাইনে খুব বেশি করার চেষ্টা করার একটি পার্শ্ব-প্রতিক্রিয়া?
হেডহেডফাবরুম

ছিঃ আমি বুঝতে পারিনি যে আপনি একই উরফে একাধিক মডিউল আমদানি করতে পারবেন - আমি সেখানে কিছু ব্যবহারের কথা ভাবতে পারি যেখানে একই কাস্টম বেস শ্রেণীর একাধিক সাবক্লাস আমার কাছে পৃথক সাব-মডিউলগুলিতে পড়ে আছে। আমরা যদি আরও ৩০ টি শেভ করতে পারি তবে এটি বাশের চেয়ে কম ... তবে আমি মনে করি না এটি ঘটবে।
হেডহেডব্যাব্রুম

আমি কেন জানি না তার কারণটি হ'ল কারণ আপনি পারবেন না - আমি কেবল এটি চালানোর চেষ্টা করেছি এবং থ্রেডিংটি কোনও বিকল্প নয়, এটি কেবল থ্রেডিং বলে called এটি টি-এর সাথে আলিয়াযুক্ত সমস্যা ... আপনি কি এটি চালানোর চেষ্টা করেছিলেন? এটি প্রতিটি অতিরিক্ত মাত্র 2 অক্ষর হলেও আমদানি করতে হয় as t,sএবং তারপরে ব্যবহারের sজন্য পরিবর্তন করতে হয়sys
হেডহেডব্যাব্রুম

1
আপনি printপরিবর্তে ফাংশন ব্যবহার করবেন না কেন sys.stdout.write?
উড়ন্ত ভেড়া

6

মজা করার জন্য, এখানে একটি কোল্ডফিউশন (8+) সংস্করণ ;-) এর 109 টি অক্ষর রয়েছে যা আমি এখানে সুসংগঠনের জন্য যুক্ত করেছি এমন লাইন মোড়ক এবং ইন্ডেন্টেশন গণনা করে না।

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

এটি <cfoutput>কার্যকর যে ধরে নেওয়া হয়। কয়েকটি অক্ষরে সব এক লাইনে লিখে সংরক্ষণ করা যায় be


6

জাভা (ওরফে কোডগল্ফে কখনই জিততে পারে না): 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();}}

ungolfed:

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();
    }
}

@ জো সোজা এটি সেট করার জন্য ধন্যবাদ।
ট্রুথিলিটি

শ্রেণিটি অ-সর্বজনীন হতে পারে, 7 টি অক্ষর সংরক্ষণ করে।
ড্যানিয়েল লুবারভ

1
আপনি throws Throwableএই catchধারাটি ঘোষণা এবং মুক্তি থেকেও মুক্তি পেতে পারেন ।
ড্যানিয়েল লুবারভ

আমার মনে হয় আপনি প্রতিস্থাপন 2 বাইট সংরক্ষণ করতে পারবেন Long.parseLongসঙ্গে Long.valueOf
হাইপারনিউত্রিনো

আমি জানি এটি 6.5 বছর হয়েছে, তবে আপনি কিছু অংশ গল্ফ করতে পারেন: publicএবং finalসরানো যেতে পারে; (জাভা 8+) class M{public static void mainহতে পারে interface M{static void main; Long.parseLong(a)হতে পারে new Long(a)(ফলস্বরূপ 165 বাইট )
কেভিন ক্রুইজসেন 12'18

5

জাভাস্ক্রিপ্ট - 52 টি অক্ষর

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

কোডগলফ.এসই তে স্বাগতম! কোডটি প্রদর্শন হিসাবে এটির জন্য আপনার কোডটি চারটি স্পেসে ইনডেন্ট করে আমি আপনার জন্য উত্তরটি ফর্ম্যাট করেছি। আপনি সম্পাদনা পৃষ্ঠার সাইডবারে অন্য ফর্ম্যাটিং সহায়তা পাবেন।
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)

আমি যতদূর জানি আপনি ব্যবহার করবেন না {}যখন এক লাইনে স্থিত।
উড়ন্ত ভেড়া

@ ফ্লাইং ভেড়া - আপনি {}একটি বিবৃতি দিয়ে বাদ দিতে পারেন , তবে আপনার এখনও এটির প্রয়োজন একটি জিনিস ;বা এক লাইন দ্বারা পৃথক করে গোষ্ঠীভুক্ত করা । এবং আপনি {}কিছু ক্ষেত্রে ছাড়াই মাল্টি-লাইন স্টেটমেন্ট লিখতে পারেন (যদি / অন্যথায় উদাহরণস্বরূপ)।
রেক্স কের

ওহ, আমি বলতে চাইনি আপনি এগুলি বাদ দিতে পারেন, তবে আপনি ()পরিবর্তে ওয়ান-লাইনার ব্যবহার করতে পারেন । আমি মনে করি এটি এখানে স্বাদের বিষয়। ( এগুলি ছাড়িয়ে ()যাওয়ার পরে কেন {}মোটেই সমর্থন করা যায় তা আমি সত্যিই পাই না maybe সম্ভবত জাভা ব্যবহারকারীদের তাত্ক্ষণিকভাবে বিচ্ছিন্ন না করার জন্য)। স্কালা দুর্দান্ত, তবে ইনডেন্টেশন দ্বারা কোড ব্লক সংজ্ঞায়িত করা স্পষ্টতই উচ্চতর। (এবং তাই, ধর্মীয় যুদ্ধের পরিণতি;))
উড়ন্ত ভেড়া

@ ফ্লাইং ভেড়া - আপনার ভুল তথ্য রয়েছে। আপনি ()একক বিবৃতি জন্য ব্যবহার করতে পারেন । প্রবেশ করানোর চেষ্টা করুন (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

স্ট্যান্ডিনে ইনপুট নিয়ে এটি সম্ভবত একটি সংক্ষিপ্ত আকারে তৈরি করা যেতে পারে যদি এটি কোনও বিকল্প ছিল তবে এটি দেরী এবং কোনওভাবেই হয়, এটি এখনও ফাংশনটির জন্য 104 অক্ষর।


4

বেফুঞ্জ -98, 38 31 বাইট

আমি জানি এটি একটি পুরানো চ্যালেঞ্জ, তবে আমি সম্প্রতি স্লিপসোর্ট এবং 2 ডি উভয় ভাষা আবিষ্কার করেছি, কীভাবে তাদের একত্রিত করা যায় সে সম্পর্কে ধারণা ছিল এবং এটি পোস্ট করার জন্য একটি স্থান সন্ধান করেছি, তাই আমরা এখানে আছি।

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

মূল আইপি একটি সংখ্যা ( &) পড়ে, তারপরে tকোনটি ক্লোন করে তা হ'ল : একটি একই লাইন এবং চক্রের দিকে এগিয়ে যায়, নতুন নম্বর পড়ে এবং নতুন বাচ্চা তৈরি করে যতক্ষণ না এটি ইওএফ পৌঁছায় যা ক্রমটি শেষ করে না। মূল আইপি ইনপুটটি পড়া শেষ না করে এবং কমান্ডের ক্রম সম্পাদন না করে সমস্ত বাচ্চাদের প্রক্রিয়াগুলি একটি বন্ধ লুপে ( vএবং ^তৃতীয় কলামের) আটকে যায় '<21p, যা অক্ষরটিকে <অবস্থানে রাখে (1,2), ওভাররাইটিং ^এবং সমস্ত বিনামূল্যে করে শিশু প্রক্রিয়াগুলি, যা প্রতিটি পুনরাবৃত্তিতে তাদের সংখ্যা 1 দ্বারা হ্রাস করে এক সাথে চক্র শুরু করে। যেহেতু বিভিন্ন আইপির এক্সিকিউশন স্পিড বেফুঞ্জে সিঙ্ক্রোনাইজ করা হয়, তাই তারা ইনপুট তালিকাটি বাছাই করে ক্রমে সমাপ্ত (এবং তাদের মান মুদ্রণ) করবে।


নিয়ন্ত্রণ প্রবাহকে কিছুটা আবর্তিত করে 26 বাইট
জো কিং

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 প্রয়োজন এবং তালিকাটি এল অনুসারে বাছাই করা প্রত্যাশা করে)


3

সি, 70 69 অক্ষর

শিশু প্রক্রিয়াগুলি ফিরে আসার অপেক্ষা রাখে না, অন্যথায় এটি কাজ করে।

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

2

পিএইচপি 57 বাইট

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

pcntl_fork () কেবল লিনাক্সের অধীনে উপলব্ধ।


2

বাশ (38):

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

সম্পাদনা: স্পেন বা নিউলাইন দ্বারা পৃথক স্টিডিন থেকে ভাসমান-পয়েন্ট।


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। বিলম্বিত থ্রেড শুরুর পদ্ধতির তালিকা বোধগম্যতা থেকে উপকার হয় কারণ এটি সূচনায় আলাদাভাবে তালিকা শুরু করার প্রয়োজনীয়তা সরিয়ে দেয়, যদিও "["+"]"+" "-":"লুপের চেয়ে এটি দুটি অক্ষর দীর্ঘ ( ) লম্বা হওয়ার কারণে এটি অকারণে শুরু হয়, এবং আপনাকে একটি তালিকা ব্যবহার করতে সতর্ক থাকতে হবে জেনারেটরের পরিবর্তে, অথবা আপনি জেনারেটরের মাধ্যমে সঙ্কুচিত হওয়া পর্যন্ত আপনি টাইমার থ্রেডগুলি তৈরি করছেন না।

অন্য কারও কি কোন আশাবাদ আছে?


সঙ্গে কৌতুক asসাহায্য করে, কিন্তু 2.7.1 আপনি শুধুমাত্র একটি উপনাম মধ্যে এক মডিউল আমদানি করতে পারেন, এবং আপনার সম্পর্কে কিছু বাজানো পরে এমনকি করতে পারেন import mod1,mod2 as a,b, আপনি করতে হবে import mod1 as a, mod2 as b। এটি এখনও কয়েকটি চরিত্র সাশ্রয় করেছে, তবে এটি বেশ নিরাময় নয়, যা আমি ভেবেছিলাম এটিই ছিল ... এবং আসলে সিএস হিসাবে সিএস ছেড়ে রাখা ভাল। আলিয়াজিং থ্রেডিং এখনও সহায়তা করে ...


তুমি আমাকে মারতে পারো, বাড়িয়ে দাও আমি x = []; x + = [] পছন্দ করি। আপনি কি করতে পারেন তা জানতেন না ....
অ্যারেডেম

... আপনি 128 এ এটি করতে পারলে আপনি যদি আপনার লুপ এবং এফ (এক্স) এর মধ্যে: [বক্তব্য] এর মধ্যে ফাঁকা স্থানগুলি আলগা করে রাখেন ... তবে কোনওভাবে আমি এটি 127 এ পেয়েছি, তবে আমি মনে করি এটি চূড়ান্ত নিউলাইনটি গণনা না করে (যা কোনটি নয়) সিজি তে বৈধতা রয়েছে)। ভেবেছিলাম আমি হাতিয়ার না হয়ে এবং আপনার কোড চুরি করার পরিবর্তে আপনাকে আপডেটটি দেব।
14

@ আরমেকেনজি এর জন্য যান, আমি আপনার চুরি করেছি। আমি সিজি'ড অজগরটি দেখতে আগ্রহী - আমি মনে করি ভাষার লক্ষ্য বিবেচনা করে আমি খুব বিকৃত কিছু করছি ...
হেডহেডব্রুম

হ্যাঁ, বেশিরভাগ অজগর গল্ফগুলি কতটা সুগঠিত থাকতে পারে তা দেখে আমি সত্যিই হতবাক হয়েছি ... "কাচের মেঝে" চরিত্রের জন্য। এটি পরীক্ষা করে দেখুন: থ্রেডিং আমদানি করুন, t
arrেমিম

1

ক্লোজার, 54

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


আপনি বাদ দিয়ে কিছু অক্ষর থেকে মুক্তি পেতে পারেন defn(এর বন্ধনী + আর্গুমেন্ট তালিকা: 54 থেকে 43 চিরিস পর্যন্ত), বা => লেন- 2 2 এর fnপরিবর্তে ব্যবহার করতে পারেন defnতাই আমি ক্লিজে এর 43: ডি
টেস্ট

1

মরিচা - 150 বাইট

এবং এই কারণেই আপনি মরিচায় গল্ফ কোড করেন না, এটি জাভা এর চেয়ে বেশি ভার্বোজ;)। বাহ্যিক ক্রেট উপর নির্ভর করে 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

উদাসীন ধরনের, সি # এর বন্দর, কেবল আবার ভাষা দিয়ে শুরু করতে:

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)})}

এমনকি ২০১১ সালে ফিরেও আমার ধারণা function(a){a.map(function(v){setTimeout(console.log,v,v)})}60 বাইটের জন্য কমপক্ষে একটি ব্রাউজারে কাজ করেছে। অবশ্যই এই দিন আপনি a=>a.map(v=>setTimeout(console.log,v,v))পরিবর্তে লিখতে হবে।
নীল


0

ভিবি.এনইটি 100 বাইট

যেহেতু ভিবি ডট নেট শুধুমাত্র একটি বিবৃতি ধারণ করতে একক লাইন ল্যাম্বডাস প্রয়োজন, এই কোডটিতে একাধিক লাইন থাকতে হবে:

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

Ungolfed:

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

তবে আমি নিশ্চিত নই যে আপনি বাইট গণনাগুলিতে আমদানি করে বিবৃতি গণনা করেন কারণ আপনি যদি সেগুলি গণনা না করেন তবে আমি এটি লিখতে পারতাম:

ভিবি.এনইটি 71 বাইট

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

Ungolfed:

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

গণিত, 34 বা 36 বাইট tes

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

এই কোডটির শেষে বাছাই করার জন্য তালিকাটি যুক্ত করুন এবং মূল্যায়ন করুন। যদি এটির বৈধ ফাংশন সংজ্ঞা হওয়া দরকার তবে এটি দুটি অতিরিক্ত বাইট নেয়:

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

0

সি ++ 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.