উইন্ডোজ স্টাইল - একটি ফাইল অনুলিপি করুন


40

এই চ্যালেঞ্জটি এক্সকেসিডি দ্বারা অনুপ্রাণিত :

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

চ্যালেঞ্জ:

আপনি একটি বড় ফাইল অনুলিপি করতে পারবেন (1 গিগাবাইট)। স্থানান্তর হার 10 কেবি / সেকেন্ড থেকে 100 এমবি / সেকেন্ডের মধ্যে পরিবর্তিত হবে। আপনার কাজটি ফাইল স্থানান্তরের বাকি সময় আউটপুট করা। ফলাফলটি দেখতে হবে:

Time remaining: 03:12    (meaning it's 3 minutes and 12 seconds left)
Time remaining: 123:12   (meaning it's 2 hours, 3 minutes and 12 seconds left)
Time remaining: 02:03:12 (optional output, meaning the same as above)

শীর্ষস্থানীয় শূন্যগুলি কয়েক মিনিট এবং ঘন্টা (alচ্ছিক) প্রদর্শনের প্রয়োজন নেই, তবে কয়েক সেকেন্ডের জন্য অবশ্যই এটি প্রদর্শিত হবে। কেবলমাত্র কয়েক সেকেন্ড ব্যবহার করে সময় দেখানো ঠিক নয়।

ফাইল স্থানান্তর:

  • স্থানান্তর হার 10 এমবি / সেকেন্ডে শুরু হবে।
  • প্রতি সেকেন্ডে, স্থানান্তর হার পরিবর্তিত হওয়ার 30% সুযোগ থাকবে
  • নতুন স্থানান্তর হার [10 kB/s, 100 MB/s]10 কেবি / সেকেন্ডের ধাপে এলোমেলোভাবে (অভিন্ন বিতরণ) বাছাই করা উচিত ।

দ্রষ্টব্য: আপনার আসলে কোনও ফাইল অনুলিপি করার দরকার নেই।

আপনি ব্যবহার করতে পারেন: 1 GB = 1000 MB, 1 MB = 1000 kB, 1 kB = 1000 Bবা 1 GB = 1024 MB, 1 MB = 1024 kB, 1 kB = 1024 B

আউটপুট:

  • আপনি শুরু 01:40, না 01:39
  • স্থানান্তর হার পরিবর্তনের পরে আপনি সময়টি প্রদর্শন করেন তবে কিছু কিছু সেই হারে স্থানান্তরিত হওয়ার আগেই
  • সেকেন্ডটি দশমিক নয়, পূর্ণসংখ্যা হিসাবে প্রদর্শিত হবে। এটি নিচে / নিচে / নিকটবর্তী হওয়া optionচ্ছিক।
  • আপনার ভাষাতে এটি অসম্ভব না হলে আপনার প্রতি সেকেন্ডে পর্দা সাফ করা উচিত।
  • আউটপুট অবিচ্ছিন্ন হওয়া উচিত: Time remaining: 00:00ফাইল স্থানান্তর শেষ হলে।

উদাহরণ:

আমি সমস্ত দশমিক সেকেন্ডে গোল করেছি। ধরুন নীচের লাইনগুলি 1 সেকেন্ডের মধ্যে দেখানো হয়েছে এবং প্রতিটিটির মধ্যে পর্দা সাফ হয়ে গেছে:

Time remaining: 01:40  (Transfer rate: 10 MB/s)
Time remaining: 01:39      1 GB - 10 MB
Time remaining: 01:38      1 GB - 2*10 MB
Time remaining: 01:37      1 GB - 3*10 MB
Time remaining: 01:28:54   1 GB - 4*10 MB  (TR: 180 kB/s)
Time remaining: 01:28:53   1 GB - 4*10 MB - 180 kB
Time remaining: 01:28:52   1 GB - 4*10 MB - 2*180 kB  
Time remaining: 00:13      1 GB - 4*10 MB - 3*180 kB  (TR: 75 MB/s)
Time remaining: 00:12      1 GB - 4*10 MB - 3*180 kB - 75 MB
Time remaining: 00:11      1 GB - 4*10 MB - 3*180 kB - 2*75 MB
Time remaining: 00:10      1 GB - 4*10 MB - 3*180 kB - 3*75 MB
Time remaining: 00:09      1 GB - 4*10 MB - 3*180 kB - 4*75 MB
Time remaining: 00:08      1 GB - 4*10 MB - 3*180 kB - 5*75 MB
Time remaining: 14:09:06   1 GB - 4*10 MB - 3*180 kB - 6*75 MB  (TR: 10 kB/s)
Time remaining: 14:09:05   1 GB - 4*10 MB - 3*180 kB - 6*75 MB - 10 kB
Time remaining: 00:06      1 GB - 4*10 MB - 3*180 kB - 6*75 MB - 20 kB  (TR: 88.110 MB/s)
Time remaining: 00:05
Time remaining: 00:04
Time remaining: 00:03
Time remaining: 00:02
Time remaining: 00:01
Time remaining: 00:00     <- Transfer is finished. Display this.

1
আপনার চিত্রের নীচে XKCD সরঞ্জাম-টিপ পাঠ্য রাখা উচিত। লোকেরা নিজেরাই এটি দেখার সময় সাশ্রয় করুন।
mbomb007

6
@ এমবম্ব ২০০7, ছবিটি হোভার করুন :)
স্টিভি গ্রিফিন

যে হতে, "তোমার দিকে চালু হবে 1:40(বা 1:42) না 1:39(অথবা 1:41)"?
জোনাথন অ্যালান

এছাড়াও যদি আমরা 1024সংস্করণটি ব্যবহার করি তবে আমাদের ব্যবহার করা উচিত পদক্ষেপের আকারগুলি কী কী?
জোনাথন অ্যালান

যদি ঘন্টাগুলি বাকি থাকে তবে আমরা 00:00:10উদাহরণস্বরূপ আউটপুট ছেড়ে যেতে পারি ?
অ্যাডমবর্কবর্ক 21

উত্তর:


9

পাইথ - 70 68 বাইট

K^T5J^T3W>KZ%." r3úBTê;¥
í".D/KJ60=J?<OT3O^T4J=-KJ.d1.

ঘুম না করে অনলাইনে চেষ্টা করে দেখুন


@ ডিজিটালট্রামা দুঃখিত, লুইসের উত্তরটি গাইড হিসাবে ব্যবহার করছিলেন।
মালটিসেন

@ ডিজিটালট্রামা স্থির
মালটিসেন

6
হাঃ হাঃ হাঃ. (গল্ফিং) ভাষা বি থেকে পোর্ট করার সময় বি থেকে স্পিচ পড়ার চেয়ে বি;
ডিজিটাল ট্রমা

@ মালটিসেন এর জন্য দুঃখিত! :-)
লুইস মেন্ডো

2
আপনি কি এখানে হেক চলছে এর ব্যাখ্যা দিতে পারেন?
মনিকা পুনরায়

8

পাওয়ারশেল , 190 215 187 বাইট

($t="Time remaining: ")+"00:01:42";for($f,$r=1gb,10mb;$f-gt0;$f-=$r){if((Random 10)-lt3){$r=(Random -mi 1kb -ma (10mb+1))*10}$t+[Timespan]::FromSeconds([int]($f/$r));sleep 1}$t+"00:00:00"

এটি অনলাইন চেষ্টা করুন! (টিআইও লাইনগুলির মধ্যে ক্লিয়ারিং স্ক্রিন সমর্থন করে না)

আমাদের প্রাথমিক $fআইল আকার নির্ধারণ করে এবং আমাদের প্রাথমিক স্থানান্তর যথাক্রমে এবং / গুলি $rখেয়েছিল । তারপরে, এতক্ষণ আমাদের এখনও আইল বাকি রয়েছে, আমরা লুপ করব।1gb10mb$f

লুপ ভিতরে, ifনির্বাচন থেকে একটি নম্বরে 0থেকে 9সমেত, এবং যদি এটা 0, 1, বা 2 এর (অর্থাত, সময় 30%), আমরা হার পরিবর্তন করুন। এটি আমাদের ধাপ গণনা পেতে এর মধ্যে একটি এলোমেলো পূর্ণসংখ্যার 1kbএবং 10mbতারপথে এর দ্বারা গুণিত হয় 10

এরপরে আমরা অবশিষ্ট সময়টি নির্মানের জন্য .NET গ্রন্থাগার থেকে FromSeconds স্থিতির পদ্ধতিটি উত্তোলন করি TimeSpan। এই কলটির আউটপুট ফর্ম্যাট হুবহু চ্যালেঞ্জের প্রয়োজনীয়তার সাথে মেলে, তাই অতিরিক্ত বিন্যাসের প্রয়োজন নেই।

(@ কনৌরএলএসডাব্লুকে ধন্যবাদ একটি গোছা সংরক্ষণ করা)


1
@ স্টেভিগ্রিফিন টিআইওর আউটপুট ক্যাচিং রয়েছে। সেটিংস ড্রয়ারে "আউটপুট ক্যাশে অক্ষম করুন" নির্বাচন করুন এবং এটি বিভিন্ন ফলাফল দেয়।
দ্য বাইকিংভিাইকিং ২২ শে

হয়তো আমি কিছু মিস করছি তবে -fঅপারেটর কিছু করার জন্য উপস্থিত হয় না। যে গ্রহণ এবং ব্যবহারের forপরিবর্তে লুপ while, এবং তারপর উভয় স্থানেই পরিবর্তন get-dateকরতে date, আমি 22 বাইট বন্ধ শেভ করতে সক্ষম হন। এটি অনলাইন চেষ্টা করুন!
ব্রিটিশবাদী

@ ব্রায়ান্টিস্ট টিআইওর প্রয়োজন Get-Dateকারণ অন্যথায় এটি লিনাক্স dateকমান্ডটি ব্যবহার করে যা ভিন্ন। আপনি এটি উইন্ডোতে ফেলে দিতে পারেন কারণ পাওয়ারশেল উইন্ডোজ dateকমান্ডটি মোড় করে । তবে, forলুপ নির্মাণের জন্য ধন্যবাদ !
অ্যাডমবর্কবর্ক

@ অ্যাডমবার্কবার্ক হ্যাঁ আমি এটি লক্ষ্য করেছি, তবে একটি স্টক উইন্ডোজ পরিবেশে এটি কার্যকর হবে। আমি অবাক হয়েছি nal date get-dateটিআইও-তে কেবল শিরোনামটি রাখলে তা গ্রহণযোগ্য ?
ব্রিটিশবাদী

@ অ্যাডমবর্কবার্ক এবং উইন্ডোজগুলিতে এটি উইন্ডোজের তারিখ কমান্ডটি আবদ্ধ করে না, এটি কেবল এটিকে উপেক্ষা করে কারণ এটি উইন্ডোতে একটি। এক্সাই নয়, সুতরাং এটি একই আচরণে ফিরে আসে random( get-অন্য সমস্ত ব্যর্থ হলে প্রিপেন্ডেড কমান্ড চেষ্টা করুন )।
ব্রিটিশবাদী

5

এমএটিএল , 78 বাইট

ধন্যবাদ @Maltysen এবং @DigitalTrauma সংশোধন জন্য।

1e5 1e3`XK10&XxyXIy/t0>*12L/'MM:SS'XO'Time remaining: 'whD-r.3<?1e4Yr}K]I0>]xx

এমএটিএল অনলাইন এ চেষ্টা করুন ! (যদি এটি প্রাথমিকভাবে কাজ না করে তবে আপনার "রান" টিপতে বেশ কয়েকবার চাপ দিতে হতে পারে)।

অনলাইন দোভাষী 30 সেকেন্ড পরে সময় শেষ। আপনি পরিবর্তন করতে পারেন 10ছোট কিছু (সেকেন্ডের দশমাংশ মধ্যে বিরতি সময়) যেমন3 অর্ডার প্রদর্শন গতি বৃদ্ধি করার জন্য

ব্যাখ্যা

1e5                  % Push 1e5: file size in 10-kB units
1e3                  % Push 1e3: initial rate in 10-kB/s units
`                    % Do...while
  XK                 %   Copy current rate into clipboard K (doesn't consume it)
  10&Xx              %   Wait 1 second and clear screen
  y                  %   Duplicate current file size onto the top of the stack
  XI                 %   Copy it to clipboard I (doesn't consume it)
  y                  %   Duplicate current rate onto the top of the stack
  /                  %   Divide. This gives the estimated remaining time in seconds
                     %   It may be negative in the last iteration, because the
                     %   "remaining" file size may have become negative
  t0>*               %   If negative, convert to 0
  12L/               %   Push 86400 and divide, to convert from seconds to days
  'MM:SS'XO          %   Format as a MM:SS string, rounding down
  'Time remaining: ' %   Push this string
  wh                 %   Swap, concatenate
  D                  %   Display
  -                  %   Subtract. This gives the new remaining file size
  r                  %   Push random number uniformly distributed in (0,1)
  .3<                %   Is it less than 0.3?
  ?                  %   If so
    1e4Yr            %     Random integer between 1 and 1e4. This is the new rate 
                     %     in 10-kB/s units
  }                  %   Else
    K                %     Push rate that was copied into clipboard K
  ]                  %   End
  I                  %   Push previous remaining file size from clipboard I
  0>                 %   Is it positive?
]                    % End. If top of the stack is true: next iteration
xx                   % Delete the two numbers that are on the stack

আমি এমএটিএল বুঝতে পারি না তবে এটি আমার কাছে এমন মনে হচ্ছে যেন আপনি আপনার ব্যাখ্যা থেকে 30% সময় না দিয়ে সর্বদা একটি নতুন হার পাচ্ছেন।
মালটিসেন

@ মাল্টেসেন এখনই সংশোধন করেছেন। সতর্ক থাকুন জন্য ধন্যবাদ!
লুইস মেন্ডো

@ ডিজিটালট্রামা এখনই সংশোধন করা হয়েছে
লুইস মেন্ডো

5

রুবি, 116 110 বাইট

অনলাইনে এটি ব্যবহার করে দেখুন, repl.it \rএকটি নতুন লাইন হিসাবে পড়া এবং $><<এটি ব্যবহার করতে পারে না যাতে এটির সাথে তার 5 বাইট সমতুল্য print,।

\rলাইনটি পুনরায় সেট করতে ব্যবহার করার প্রাথমিক ধারণার জন্য জোনাসওয়িলিকিকে ডাকা ।

f=1e5;r=1e3;(k=f/r=rand<0.3?1+rand(1e4):r;$><<"\rTime remaining: %02d:%02d"%[k/60,k%60];f-=r;sleep 1)while f>0

এই সংস্করণটি উইন্ডোজে অপরিশোধিত, তবে ইউনিক্সে কাজ করে।


4

বাশ + সাধারণ ব্যবহারসমূহ, 117

সোজা বাস্তবায়ন। 10000 দ্বারা ভাগ করে কয়েকটি বাইট সংরক্ষণ করা হয়েছে:

for((b=10**5,r=1000;b>0;r=RANDOM%10<3?RANDOM%10000+1:r,b-=r));{
clear
date -ud@$[b/r] "+Time remaining: %T"
sleep 1
}

এটি অনলাইনে চেষ্টা করুনsleep 0টিআইও ব্যবহার করে যাতে আপনাকে অপেক্ষা করতে হবে না। clearটিআইওতে কাজ করে না।


3

জাভাস্ক্রিপ্ট (ES6), 162 বাইট

প্যাডেড সেকেন্ডের মতো মিনিট দেখায় (তলিত)

যেমন, 123:45

t=1e5
s=1e3
setInterval(c=>c.log(`Time remaining: ${c.clear(d=t/s),d/60|0}:`+`0${t-=s>t?t:s,r=Math.random,s=r()<0.3?1+r()*1e4|0:s,d%60|0}`.slice(-2)),1e3,console)


আমার মনে হয় আপনি কমান ভুলে গেছি console.clearকরার c.clearএটা একটি বড় ধারণা BTW এর ;-)
ETHproductions

নিবন্ধন করুন ধন্যবাদ :)
জর্জ রিথ

আপনি এইচটিএমএল যুক্ত করে 154 বাইটে নামতে পারেন - <input id=o>- এবং আরও কিছু অ্যাডজাস্টমেন্ট তৈরি করে:t=1e5;i=s=1e3;setInterval(_=>o.value=`Time remaining: ${(d=t/s)/60|0}:`+`0${t-=s>t?t:s,r=Math.random(),s=r<.3?1+r*1e4|0:s,d%60|0}`.slice(-2),i)
শেজি

2

পাইথন 3.6 ( 212 203 বাইট)

from random import*
import time,datetime
r=1e7
d=1e9
while 1:
 print(f"\x1b[KTime remaining: {datetime.timedelta(seconds=d//r)}",end="\r");d=max(0,d-r);time.sleep(1)
 if random()>.7:r=randint(1,1e4)*1e4

খুব সোজা, আমি মনে করি। এএনএসআই এস্কেপ সিকোয়েন্স এবং Kকমান্ড ব্যবহার করে লাইনটি মুছুন ।


1
এর সাথে আপনার প্রথম লাইনে একটি স্থান ছেড়ে যান from random import*d//rতুলনায় খাটো int(d/r)। এছাড়াও, r=1e7;d=1e9শুরু থেকে পাশাপাশি যেতে পারে ।
মান কালি

@ ভালিউইঙ্ক রাইট, r এবং d এর জন্য 1eX এর কথা ভাবেন নি কারণ আমি চেয়েছিলাম যে তারা পূর্ণসংখ্যা হয়; আমি যখন র‌্যান্ডিন্ট লাইনটি ছোট করেছি, তখন আমি সে সম্পর্কে ভুলে গিয়েছিলাম ... :)
জোনাস শোফার

1

ব্যাচ, 193 বাইট

@set/ap=10000,s=p*10,r=p/10
:l
@set/at=s/r,m=t/60,n=t%%60+100,s-=r
@cls
@echo Time remaining: %m%:%n:~1%
@timeout/t>nul 1
@if %random:~-1% lss 3 set/ar=%random%%%p+1
@if %t% gtr 0 goto l

দ্রষ্টব্য: ২.6. MB MB এমবি / সেকেন্ডের হারের প্রতি সামান্য পক্ষপাত।


1

সি 184 171 155 বাইট

f(){i,j=0,r=1e7;for(i=1e9;i>0;i-=r){j=i/r;printf("Time remaining: %02d:%02d:%02d\r",j/3600,(j/60)%60,j%60);sleep(1);if(rand()%10<3)r=(rand()%10000)*1e4;}}

আমি আশা করি এটি যোগ্যতা অর্জন করবে।

অবরুদ্ধ সংস্করণ:

void f()
{
    int j=0;
    float rate=1e7; 
    for(int size=1e9;i>0; size-=rate)
    {     
       j=size/rate;      
       printf("Time remaining: %02d:%02d:%02d\r",j/3600,(j/60)%60,j%60);
       sleep(1);

       if(rand()%10<3)
          rate=(rand()%10000)*1e4;          



   }

}

ব্যাখ্যা: golfed সংস্করণে iঅনুরূপ sizeungolfed সংস্করণে এবং rহয় rateungolfed সংস্করণে। jসেকেন্ডে অবশিষ্ট সময় সঞ্চয় করে।

  • আমার অনুলিপি করার জন্য 10 ^ 9 বাইট রয়েছে। আমি 10 মেগাবাইট / সেকেন্ডের হারে অনুলিপি করা শুরু করি,
  • সম্ভাব্যতা যদি ৩০% এরও কম হয় তবে রেটটি পরিবর্তন করুন (10 কিলোবাইট থেকে প্রতি সেকেন্ডে 100 মেগাবাইটে)

@ ভ্যালিউইঙ্ক 13 বাইট সংরক্ষণ করার জন্য ধন্যবাদ

@ nmjcman101 16 বাইট সংরক্ষণ করার জন্য ধন্যবাদ।


এটি চ্যালেঞ্জটি যা বলে তা বাস্তবে করে বলে মনে হচ্ছে না। এটি কীভাবে কাজ করে তা ব্যাখ্যা করতে পারেন?
মূল্য কালি

এটি কেবল সময়ের আউটপুটকে অনুকরণ করে, ডেটা স্থানান্তর অংশটি কীভাবে করব তা আমি খুঁজে পাইনি। অনুমান আমি ততক্ষণ এটিকে ধরে রাখব।
আবেল টম

আপনি 3 টি পুনরাবৃত্তির পরে হার পরিবর্তন করবেন না। এটির পরিবর্তনের 30% সম্ভাবনা রয়েছে। সুতরাং আপনি সম্ভবত নিম্নলিখিতগুলির মতো অনুরূপ কিছু করতে চান: if(rand()%10<3)r=(rand()%10000+1)*1e4;(বিশেষত যেহেতু ন্যূনতম হার 10 কেবি / সেকেন্ড, আপনার সমাধান যেমন 1 এমবি / সে হিসাবে নয়, এবং হারের সুযোগটি কিছুটা অভিন্ন বিতরণ হওয়া উচিত))
মান কালি

@ ভালিউইঙ্ক অনেক ধন্যবাদ :) আপডেট হয়েছে। কাজ শেষ! আমি কীভাবে সঠিকভাবে 30% সম্ভাব্য অংশটি অনুকরণ করতে পারি তা জানতাম না। এখন অনেক পরিষ্কার।
আবেল টম

আপনি j/3600,(j/60)%60,j%60(21) s=60;এবং j/s/s,j/s%s,j%s(20) এর সাথে গল্ফ করতে পারেন
ডেভিড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.