কয়টি দৃষ্টান্ত চলছে?


13

অনির্দিষ্টকালের জন্য চলমান একটি প্রোগ্রাম লিখুন যা বর্তমানে নিজেই কয়টি দৃষ্টান্ত চলছে তা রিপোর্ট করে। প্রোগ্রামটির প্রতিটি উদাহরণে বর্তমানে চলমান অন্যান্য সমস্ত দৃষ্টান্তের মধ্যে ক্রমটি খোলার আদেশেরও প্রতিবেদন করা উচিত।

উদাহরণ

ব্যবহারকারী প্রথমবারের জন্য প্রোগ্রামটি চালু করে - আমরা এই ইনস্ট্যান্সটিকে কল করব ১ টি উদাহরণ 1 টি প্রদর্শন 1/1, কারণ এটি বর্তমানে চলমান মোট টি দৃষ্টান্তের মধ্যে প্রথম সূচনা ।

ইন্সটান্স 1 চলমান সময়, ব্যবহারকারী লঞ্চ প্রোগ্রাম একটি দ্বিতীয় সময় এখন ইন্সটান্স 2. ইন্সটান্স 1 প্রদর্শন পরিণত 1/2হচ্ছে প্রথম মোট বাইরে উদাহরণস্বরূপ 2 বর্তমানে চলমান দৃষ্টান্ত। উদাহরণ 2 প্রদর্শন করে 2/2, কারণ এটি বর্তমানে চলমান মোট 2 টির মধ্যে দ্বিতীয় ঘটনা the

আসুন যাক যে ব্যবহারকারী তাদের মধ্যে 5 টি না হওয়া পর্যন্ত আরও উদাহরণ উপস্থাপন করে চলেছে । লঞ্চ ক্রমানুসারে তাদের আউটপুট আছেন: 1/5 2/5 3/5 4/5 5/5

এখন, আসুন যাক ব্যবহারকারী ইন্সট্যান্স ৩ টি বন্ধ করার সিদ্ধান্ত নেন Inst ইনস্ট্যান্সেশন 4 এর পরে নতুন ইনস্ট্যান্স 3 এবং ইনস্ট্যান্স 5 টি নতুন ইনস্ট্যান্স 4 হয়ে যায়, কারণ তারা যথাক্রমে তৃতীয় এবং চতুর্থ উদাহরণ যা এখন মোট 4 টির মধ্যে চালু হয়েছিল been দৃষ্টান্ত। সুতরাং প্রতিটি উদাহরণের আউটপুট পরিবর্তন নিম্নলিখিত হবে:

  • 1/51/4
  • 2/52/4
  • 3/5 → (সমাপ্ত)
  • 4/53/4
  • 5/54/4

বিধি

  • আপনি কোনও যুক্তিসঙ্গত ফর্ম্যাটে দুটি সংখ্যা (উদাহরণ সংখ্যা, মোট উদাহরণ) আউটপুট করতে পারেন।
  • যখনই কোনও উদাহরণ চালু করা বা সমাপ্ত করা হয়, অন্য সমস্ত দৃষ্টান্তগুলিকে অবশ্যই 100 মিলিসেকেন্ডের মধ্যে নিজ নিজ আউটপুট আপডেট করতে হবে।
  • আপনি যদি কোনও নতুন লাইনে (বা অন্যান্য "সংযোজন" আউটপুট ফর্ম্যাট; প্রতিস্থাপনের বিপরীতে) মুদ্রণ করে আউটপুট আপডেট করার সিদ্ধান্ত নেন তবে আপনাকে কেবল তখনই মুদ্রণ করতে হবে যখন অন্য কোনও সময়ে নয় ances
  • এটি কোড গল্ফ। বাইটস মধ্যে সংক্ষিপ্ততম প্রোগ্রাম।
  • আপনার উত্তরে, আপনাকে একাধিক ইনস্ট্যান্স খোলার জন্য ব্যবহারকারীকে কী করতে হবে তা নির্দিষ্ট করতে উত্সাহিত করা হবে এবং / অথবা প্রদর্শনের জন্য একটি স্ক্রিনকাস্ট রেকর্ড করতে হবে।

ট্যাগ অন্তর্ভুক্ত করার জন্য কারও কাছে পরামর্শ আছে?
darrylyeo

এই জাতীয় প্রোগ্রাম ওএস-নির্দিষ্ট হবে।
ব্যবহারকারী 202729

"যখনই কোনও উদাহরণ চালু করা বা বন্ধ করা হয়, অন্য সমস্ত দৃষ্টান্তগুলি অবশ্যই তাদের নিজস্ব আউটপুটগুলি 100 মিলিসেকেন্ডের মধ্যে আপডেট করতে হবে" এমনকি আমাদের নিয়ন্ত্রণের মধ্যেও যে আমাদের যোগাযোগের জন্য ওএসের উপর নির্ভর করতে হবে (এবং আমরা অনেকগুলি উদ্দীপনা দিতে পারি যে, অনেক প্রক্রিয়া করতে পারে ') টি সাহায্য)?
জোনাথন অ্যালান

@ ওরোস প্রক্রিয়া আন্তঃব্যবস্থা ওএস থেকে
আলাদা

উত্তর:


3

এপিএল (ডায়ালগ ইউনিকোড) , 39 বাইট এসবিসিএস

নামবিহীন উপসর্গ ফাংশন। ডামি আর্গুমেন্ট (ফাঁকা সংখ্যাসূচক ভেক্টর), দিয়ে স্প্যান করে কল করুন f&⍬। বর্তমানে ⎕TNUMSএক বা একাধিক থ্রেড সহ থ্রেডগুলি চালাচ্ছেন এবং অনুসন্ধান করুন ⎕TKILL n। প্রসেসরের সময় পাওয়ার সাথে সাথে আউটপুট পরিবর্তনগুলি [নিজস্ব সংখ্যা, মোট সংখ্যা] এ পরিবর্তিত হবে, অর্থাত্ তাত্ক্ষণিকভাবে।

{⍵≡nn[⍋n←⎕TNUMS~0]:∇n⋄∇n⊣⎕←n⍳⎕TID,⊢/n}

এটি অনলাইন চেষ্টা করুন!

{} বেনাম ল্যাম্বদা আর্গুমেন্টটি কোথায় (প্রাথমিকভাবে , খালি সংখ্যাসূচক ভেক্টর)

n[] সূচক n(সংজ্ঞায়িত করা) এর সাথে:

  ⎕TNUMS~0সংখ্যা ব্যতীত  সমস্ত টি হেড নুম বিয়ারস 0(আরপিএল)

   n← হিসাবে সঞ্চয় n

    ক্রমায়ন যা আরোহী বাছাই করবে would

  এখন আমাদের ক্রমযুক্ত সক্রিয় থ্রেড রয়েছে

  ⍵≡ যদি তর্কটি অভিন্ন হয় ...

  : তারপর:

   ∇⍵ যুক্তির উপর লেজ পুনরাবৃত্তি

   অন্য:

   ⊢/n ডানতমতম থ্রেড নম্বর

   ⎕TID, এই টি হিড়কের আইডি (থ্রেড নম্বর) এতে চাপ দেওয়া হয়েছে

   n⍳ এই দুজনের d n টি সন্ধান করুন

   ⎕← এটি প্রবন্ধ মুদ্রণ করুন

   n⊣ এর পক্ষে ফেলে দিন n

    তার উপর পুনরাবৃত্তি


2

পাইথন 3, 694 691 বাইট

main.py

from requests import post as u
from _thread import*
import os
os.system("start cmd /C python s")
def l():
 def p(q):
  while 1:print(u(*q).text,end="\r")
 q=['http://localhost']
 q+=[u(q[0],'*').text]
 start_new_thread(p,(q,))
 input()
 u(q[0],'-'+q[1])
while 1:
 try:l();break
 except:0

গুলি (সার্ভার.পাইয়ের জন্য সংক্ষিপ্ত)

from bottle import*
from requests import post as q
try:
 q("http://localhost")
except:
 ids=["0"]
 @post('/')
 def _():
  content = request.body.read().decode('utf-8')
  if len(content)==0:return""
  if content[0]=="*":ids.append(str(int(ids[-1])+1));return str(ids[-1])
  elif content[0]=="-":del ids[ids.index(content[1:])]
  else:return str(ids.index(content)) + "/" + str(len(ids)-1)
 run(port="80")

এত দিন কেন?

দুর্ভাগ্যক্রমে, এই কার্যকারিতাটি পাইথনের মধ্যে নির্মিত বলে মনে হচ্ছে না। আমি মাল্টিপ্রসেসিং ব্যবহার করার জন্য প্রলুব্ধ হয়েছিলাম তবে আমরা যা করছি তার জন্য এটি পুরোপুরি উপযুক্ত বলে মনে হচ্ছে না (কোনও ব্যবহারকারীকে কোথাও থেকে কোনও প্রোগ্রাম খুলতে দেওয়া)।

সুতরাং, আমি দেখেছি স্ট্যাকওভারফ্লো পোস্টের পরামর্শ নিয়েছি (আমি লিঙ্কটি ভুলভাবে প্রতিস্থাপন করেছি) এবং ব্যবহার করে এটি প্রয়োগ করেছি bottle। (আমি নতুন পরামর্শের জন্য উন্মুক্ত)

আমি আমার নিজের মিনি সার্ভার চালানোর জন্য বোতল লাইব্রেরিটি ব্যবহার করেছি যাতে সমস্ত ভিন্ন উদাহরণ একে অপরের সাথে যোগাযোগ করতে পারে। আমি মনে করি আমি একটি সকেট ব্যবহার করতে পারতাম, যদিও আমি নিশ্চিত নই যে বাইট সংখ্যাটি হ্রাস করতে পারত।

আমার দুটি পৃথক ফাইল রয়েছে sএবং main.pysসার্ভারের সংক্ষিপ্ত এবং এটি কোডে উপস্থিত হওয়ার কারণে, আমি মনে করেছি যে নামটি যতটা সম্ভব সংক্ষিপ্ত করা উচিত।

যোগাযোগ ওয়েব সার্ভারের এপিআই

ওয়েব সার্ভার কেবলমাত্র POST অনুরোধগুলি গ্রহণ করে এবং কেবলমাত্র POST এর শরীরে ইনপুট দেয়।

সমস্ত অনুরোধ /(বা localhost/) মাধ্যমে যায় ।

বৈধ ইনপুট:

  • * পোস্ট বডিতে সার্ভারের কাছে ক্লায়েন্টকে নিয়োগের জন্য একটি নতুন আইডি ফিরিয়ে দেওয়ার অনুরোধ করবে।
  • -<id> পোস্ট বডিতে আইডির সক্রিয় তালিকা থেকে আইডিটি সরিয়ে ফেলবে, সমস্ত প্রাসঙ্গিক আইডি এবং মোট গণনা হ্রাস করবে।
  • পোস্ট বডিটিতে একটি খালি অনুরোধ খালি স্ট্রিংটি ফিরিয়ে দেবে। এটি সার্ভারটি অনলাইনে আছে কিনা তা পরীক্ষার জন্য ব্যবহৃত হয়।

অনুষ্ঠানটি বন্ধ করে দেওয়া হচ্ছে

আমি মাল্টি-থ্রেডিং প্রয়োগ করেছি তাই প্রোগ্রামটি বন্ধ করা এন্টার টিপানোর মতোই সহজ।

প্রোগ্রাম খোলার

আপনি আপনার পরিবেশ ভেরিয়েবল ভিতরে সঠিকভাবে পাইথন সেটআপ না থাকে তাহলে কেবল একটি তৈরি .batফাইল এবং হিসাবে একই ফোল্ডারে রাখা main.pyএবং sনিম্নলিখিত কোড সহ (যদি আপনি সকল ব্যবহারকারীর জন্য পাইথন ইনস্টল, এটি একটি ভিন্ন অবস্থান হতে পারে):

set PATH=%userprofile%\AppData\Local\Programs\Python\Python36
python main.py

ক্রেডিট

694 থেকে 691 অ্যাডাম বাইট করে


আপনি কি সরাতে পারবেন না :8080/?
অ্যাডম

আমি যদি 80 বন্দরটি বন্দরটি বরাদ্দ করি তবে হ্যাঁ; অন্যথায়, না। ওয়েব ব্রাউজারগুলির জন্য ডিফল্ট বন্দর (এবং অনুরোধগুলি) 80 বন্দর, তবে আমি এটি মুছে ফেলতে পারি /
নীল

@ অ্যাডাম আমি বন্দর পরিবর্তন দিয়ে এটি আপডেট করেছি, 1 বাইট সেভাবে সংরক্ষণ করেছি।
নীল

1

sh + লিনাক্স / ইউনিক্স সরঞ্জাম, 128 বাইট

ঘুম যদি ভাসমান পয়েন্ট সংখ্যা সমর্থন করে

trap '(flock 9;grep -vw $$ p>t;mv t p)9>l' exit;(flock 9;echo $$>>p)9>l;f(){ echo $(sed -n /^$$\$/= p)/$(wc -l<p);sleep .1;f;};f

অন্যথায়, 159 বাইট

trap '(flock 9;grep -vw $$ p>t;mv t p)9>l' exit;(flock 9;echo $$>>p)9>l;perl -MTime::HiRes=usleep -nE/^$$'$/&&say("$./",$.+(@a=<>)),usleep 1e5,$.=-(@ARGV=p)' p

বা ঘুম :(কোনও বিকল্প) দিয়ে প্রতিস্থাপন করা যেতে পারে তবে এটি সক্রিয় অপেক্ষারত করে দেবে।


এটি সত্যই নিকটে - "আপনাকে কেবল তখনই মুদ্রণ করতে হবে যখন উদাহরণগুলির সংখ্যা পরিবর্তন হয়, অন্য কোনও সময় নয়" "
darrylyeo

@ সেনারিলিও ঠিক ঠিক করেছেন, তবে সংক্ষিপ্ত সমাধানের সন্ধান করছেন কিন্তু সময় নেই, 100 মিমি ঘুমানোর জন্যও, আমার একটি সমাধান রয়েছে তবে দীর্ঘতর
নাহুয়েল ফিউইলুল

0

জাভা 8, (199 + 301 =) 500 বাইট

এম.জার: (মূল প্রোগ্রাম)

import javafx.collections.*;class M{static ObservableList o=FXCollections.observableArrayList();static int j,F;int i,f;{F=0;ListChangeListener e=(ListChangeListener.Change c)->{if(f<1)System.out.println((F>0&i>F?--i:i)+"/"+j);};o.addListener(e);o.add(i=++j);}public void f(){F=f=i;j--;o.remove(--i);}}

এস। জার: (প্রোগ্রাম-প্রবাহ নিয়ন্ত্রণ করার জন্য সার্ভার)

import java.util.*;interface S{static void main(String[]a){List<M>l=new Stack();for(Scanner s=new Scanner(System.in);;){Float n=s.nextFloat();if(n%1==0)l.add(new M());else{int t=(int)(n*10-1);l.get(t).f();l.remove(t);}}}}

কোডের ব্যাখ্যা:

import javafx.collections.*;
                  // Required import for ObservableList, FXCollections, and ListChangeListener
class M{          // Program-class
  static ObservableList o=FXCollections.observableArrayList(); 
                  //  Static list to keep record of all instances
  static int j,   //  Static integer (total number of instances)
             F;   //  Static flag (remove occurred?)
  int i,          //  Non-static integer (id of this instance)
      f;          //  Non-static flag (has been removed)
  {               //  Non-static initializer-block (shorter than constructor)
    F=0;          //   Reset the static flag remove_occurred, because we add a new instance
    o.addListener((ListChangeListener.Change c)->{
                  //   Add a change listener for the ObservableList
                  //   This will monitor any additions or removes on the List
       if(f<1)    //    If this instance is not removed yet:
         System.out.println(
                  //     Print:
           (F>0&i>F?
                  //      If a removed occurred and this id is larger than the removed instance
             --i  //       Decrease its id by 1 before printing it
            :     //      Else:
             i)   //       Just print its id
           +"/"+j);
                  //      Plus the total number of instances left
    });
    o.add(        //   Add anything to the Observable list to trigger the listener
     i=++j);      //    Increase the total amount of instances, and set the id of this instance to the last one
  }               //  End of non-static initializer-block
  public void f(){//  Finalize-method
    F=f=i;        //   Set both flags to the current id
    j--;          //   Decrease the total amount of instances
    o.remove(--i);//   Remove the current instance from the list to trigger the listener
  }               //  End of Finalize-method
}                 // End of Program-class

import java.util.*;
                  // Required import for List, Stack and Scanner
interface S{      // Server-class
  static void main(String[]a){
                  //  Mandatory main-method
    List<M>l=new Stack();
                  //   List of programs
    for(Scanner s=new Scanner(System.in);
                  //   Create a STDIN-listener for user input
        ;){       //   Loop indefinitely
      int t=s.nextInt();
                  //    Get the next integer inputted
      if(t<1)     //    If it's 0:
        l.add(new M());
                  //     Startup a new program, and add its instance to the list
      else{       //    Else:
        l.get(t).f();
                  //     Close the program with this integer as id
        l.remove(t);}
                  //     And remove it from the list of programs
    }             //   End of loop
  }               //  End of main-method
}                 // End of Server-class

সাধারণ ব্যাখ্যা:

সমস্ত প্রোগ্রাম তাদের নিজস্ব আইডি রেকর্ড রাখবে; অবশিষ্ট দৃষ্টান্তের সংখ্যা; একটি অপসারণ ঘটেছে কিনা; এবং কোন প্রোগ্রাম বন্ধ হয়ে গেছে।

প্রোগ্রামগুলি শুরু করার এবং বন্ধ করার জন্য সার্ভারটি কেবল একটি র‍্যাপার-ক্লাস। যখন কোনও ব্যবহারকারী ইনপুট দেয় 0, এটি একটি নতুন প্রোগ্রাম শুরু করে। ব্যবহৃত যখন কোনও ধনাত্মক পূর্ণসংখ্যা ইনপুট করে (অর্থাত্ 2), এটি সেই আইডি দিয়ে প্রোগ্রামটি বন্ধ করে দেবে। (দ্রষ্টব্য: এসজার এর অ্যাক্সেসের জন্য লাইব্রেরী হিসাবে এমজার রয়েছে))

এটি কার্যকরভাবে দেখতে জিআইএফ:

এখানে চিত্র বর্ণনা লিখুন

এটি আরও গল্ফ করার চিন্তাভাবনা:

আমি কেবল ব্যাখ্যাটি লেখার সময় লক্ষ্য করেছি যে আমি কেবল ObservableListএটির জন্য / অপসারণের জন্য ব্যবহার করি ListChangeListenerএবং এর সামগ্রীটি মোটেই ব্যবহার করি না। এটি অপসারণ এবং স্ট্যাটিক শ্রোতার অন্য ধরণের ব্যবহার সংক্ষিপ্ত হতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.