একটি সাধারণ স্টপওয়াচ বাস্তবায়ন করুন


25

চ্যালেঞ্জ

আপনার কাজটি এমন একটি প্রোগ্রাম লিখতে হয় যা সেকেন্ডে একবার (আপনার প্রোগ্রাম শুরু হওয়ার সাথে সাথেই অন্তর্ভুক্ত) আপনার প্রোগ্রাম শুরু হওয়ার সময় থেকে অতিবাহিত সময় মুদ্রণ করে।

বিধি

  • সময় অবশ্যই hh:mm:ssবিন্যাসে মুদ্রিত করা উচিত । (একক-অঙ্কের মানগুলির জন্য শীর্ষস্থানীয় জিরো)
  • সময় স্ট্যাম্পগুলি অবশ্যই সিআর, এলএফ বা সিআরএলএফ দ্বারা পৃথক করা উচিত। (কোনও শীর্ষস্থানীয় সাদা অংশ নেই)
  • প্রতি সেকেন্ডে একটি নতুন সময় উপস্থিত হতে হবে। (স্টাডাউট এক সেকেন্ডের জন্য বাফার করা যায় না)
  • প্রোগ্রামটির ব্যবহার যদি এটি চালিত হয় 23:59:59 পূর্বনির্ধারিত।
  • আপনি sleep(1)যখন কোনও ওভারহেড মুদ্রণ, গণনা, লুপ ইত্যাদির জন্য সেকেন্ডে জমা হন তখন কোনও নির্দিষ্ট দ্বিতীয়টি এড়িয়ে যেতে পারে এমনকি আপনি ব্যবহার করতে পারেন ।

উদাহরণ আউটপুট:

00:00:00
00:00:01
00:00:02
00:00:04
00:00:05
⋮

00:00:03ওভারহেড প্রক্রিয়াজাতকরণের কারণে নোটটি এখানে অনুপস্থিত। প্রকৃত বাদ দেওয়া মানগুলি (যদি থাকে তবে) অবশ্যই বাস্তবায়ন এবং / অথবা সিস্টেমের উপর নির্ভরশীল।

সিটিতে রেফারেন্স বাস্তবায়ন: (কেবলমাত্র পসিক্স-সামঞ্জস্যপূর্ণ সিস্টেমগুলি)

#include <unistd.h> // sleep()
#include <tgmath.h>
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

#ifndef __STDC_IEC_559__
#error "unsupported double"
#endif
static_assert(sizeof(double) == 8, "double must have double precision");
#define MAX_PRECISE_DOUBLE ((double)(1ULL << 52))

int main(void) {
    time_t start = time(NULL);
    if (start == (time_t)-1) return EXIT_FAILURE;
    while (1) {
        time_t now = time(NULL);
        if (now == (time_t)-1) return EXIT_FAILURE;

        double diff = difftime(now, start);
        if (isnan(diff) || diff < 0) return EXIT_FAILURE;
        if (diff > MAX_PRECISE_DOUBLE) return EXIT_FAILURE;

        unsigned long long seconds = diff;
        unsigned long long h = seconds / 3600;
        seconds %= 3600;
        unsigned long long m = seconds / 60;
        seconds %= 60;
        unsigned long long s = seconds;

        (void)printf("\r%02llu:%02llu:%02llu", h, m, s);
        (void)fflush(stdout);

        (void)sleep(1);
    }
}

জয়ের মানদণ্ড

এটি , বাইট জেতে সংক্ষিপ্ততম কোড!


পরবর্তী চ্যালেঞ্জগুলির জন্য দ্রষ্টব্য, মন্তব্যে স্পষ্টকরণ করা খারাপ কাজ। রেফারেন্স
ব্যবহারকারী 202729

উত্তর:


9

এমএটিএল , 17 16 বাইট

`Z`12L/13XOD1Y.T

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

কিভাবে এটা কাজ করে

`         % Do...while loop
  Z`      %   Push seconds elapsed since start of program
  12L     %   Push 86400 (predefined literal)
  /       %   Divide. This transforms seconds into days
  13XO    %   Convert to date string with format 13, which is 'HH:MM:SS'
  D       %   Display
  1Y.     %   Pause for 1 second
  T       %   True. Used as loop condition for infinite loop
          % End loop (implicit)

4
এটি বন্ধ হয়ে যাওয়ার ৩ minutes মিনিট পরে আপনি কীভাবে বিশ্বে উত্তর দিয়েছিলেন? o_O দোষ
কেচিং

9
@ মিঃ এক্সকোডার আমি সম্প্রতি ফোর্সটি ব্যবহার করতে শিখেছি
লুইস মেন্ডো ২

29

অপারেশন ফ্ল্যাশপয়েন্ট স্ক্রিপ্টিং ভাষা,  174  171 বাইট

s=""
#l
t=_time
t=t-t%1
a=t%60
c=(t-a)/60
b=c%60
c=(c-b)/60
d=""
e=d
f=d
?a<10:d=0
?b<10:e=0
?c<10:f=0
s=s+format["%1%2:%3%4:%5%6\n",f,c,e,b,d,a]
hint s
@t+1<_time
goto"l"

পদক্ষেপে:

158 বাইট, যদি আগের সময়টি পরের বারে ওভাররাইট করা হয়:

#l
t=_time
t=t-t%1
a=t%60
c=(t-a)/60
b=c%60
c=(c-b)/60
d=""
e=d
f=d
?a<10:d=0
?b<10:e=0
?c<10:f=0
hint format["%1%2:%3%4:%5%6",f,c,e,b,d,a]
@t+1<_time
goto"l"

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


5
আমি অপারেশন ফ্ল্যাশপয়েন্ট আশা করি না।
Polyducks

10
@ পলিড্যাকস কেউ অপারেশন ফ্ল্যাশপয়েন্ট আশা করে না
পিওরফেরেট


যেহেতু ইউনিক্সে, কোনও সিআর লাইনটি ওভাররাইট করে দেবে, আমি মনে করি যে দ্বিতীয় উত্তরটি 'সিআর, এলএফ, বা সিআরএলএফ দ্বারা অনুমোদিত নয়' দ্বারা বৈধ হয়েছে
স্ট্যান স্ট্রাম

1
@ স্ট্যানস্ট্রুম কমপক্ষে আমার উবুন্টুতে CRলাইনটি ওভাররাইট করা হবে না। আসলে, CRLF, LFCRএবং LFসব শব্দার্থগতভাবে সমতুল্য।

13

বাশ + কোর্টিলস, 28 26 বাইট

date -s0|yes date +c%T|sh

এর মধ্যে অপরিশোধিত অক্ষর +এবং %এটি একটি ইসি বাইট।

এটি সিস্টেমে সময়টি 00:00:00 এ সেট করে এবং এর জন্য মূল সুবিধার প্রয়োজন। এটিও ধরে নিয়েছে যে টাইমজোনটি ইউটিসি এবং অন্য কোনও প্রক্রিয়া সিস্টেম ঘড়ির সাথে হস্তক্ষেপ করবে না।

প্রতিটি নতুন টাইমিং টার্মিনালটিকে পুনরায় সেট করে, এভাবে পূর্বেরটি ওভাররাইট করে।


বাশ + কোর্টিলস, 38 29 বাইট

date -s0|yes date +%T|sh|uniq

আগের মতো একই বিধিনিষেধগুলি। প্রতিটি নতুন সময় একটি নতুন লাইনে প্রদর্শিত হয়।


যেহেতু এটি বাইটাউন্টটি পরিবর্তন করে না আমি প্রথমে dateএকটি সুন্দর সামান্য লাইনফিড দিয়ে বাকী থেকে আলাদা করে দেব । তবে কারও পক্ষে আপনার দ্বিতীয় সমাধানের মতো কিছু নিয়ে আসতে সক্ষম হওয়া খুব সুন্দর হতে পারে> :-(
অ্যারোন

date -s0নতুন সময়কে স্টডআউট প্রিন্ট করে; আমি আউটপুট নিঃশব্দ করতে পাইপটি ব্যবহার করছি।
ডেনিস

ওহ ঠিক আছে, ব্যাখ্যার জন্য ধন্যবাদ!
অ্যারন

5

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

পুরো প্রোগ্রাম বডি।

s←⎕AI
1↓∊':'@1∘⍕¨100+30 60 60 1E33⊃⎕AI-s
DL 1
2

এটি অনলাইন চেষ্টা করুন! (শুরু করতে Ctrl + এন্টার টিপুন, এবং আবার থামতে।)

⎕AIএকটি সিসাউন্ট আমি নামকরণ (ব্যবহারকারী আইডি, গণনার সময়, সংযোগের সময়, কী করার সময়)

s←s( এস টার্ট টাইমের জন্য) থেকে
⎕AI-s বিয়োগফলকে  বরাদ্দ করুনs⎕AI

3⊃ তৃতীয় উপাদানটি বেছে নিন (মিলিসেকেন্ডে সংযোগের সময়টি)
0 60 60 1E3⊤এই মিশ্র-রেডিক্সে রূপান্তর
3↑ করুন প্রথম ৩ টি (মিলিসেকেন্ডগুলি ড্রপ করুন)
100+ একেকটি একশ যুক্ত করা (প্যাড জিরোতে)
':'@1∘⍕¨ প্রতিটি স্ট্রিং প্রতিনিধিত্বের প্রথম অক্ষরে কোলন দিয়ে সংশোধন করুন
ϵ nlist (সমতল)
1↓ প্রথম কোলন ড্রপ (এবং স্পষ্টত stdout মুদ্রণ)

⎕DL 1ডিএল এক সেকেন্ড

→2 দুই নং লাইনে যান


5

আর , 59 44 বাইট

Fআর এ ডিফল্ট হয় FALSEতবে এটি নিয়মিত পরিবর্তনশীল এবং নতুন সংজ্ঞা দেওয়া যেতে পারে। গাণিতিক ব্যবহৃত হয়, যখন FALSEজোর করা হয় 0F+1সুতরাং রিটার্নের জন্য জিজ্ঞাসা 1। আমরা দায়িত্ব অর্পণ Fকরা F+1, এটা বিন্যাস সুন্দরভাবে, মুদ্রণ, এবং এক সেকেন্ড অপেক্ষা করুন। অনির্দিষ্টকালের জন্য অব্যাহত থাকে।

repeat{print(hms::hms(F<-F+1))
Sys.sleep(1)}

টিআইও-তে ( hmsপ্যাকেজের অভাবে ) কাজ করে না , তবে আমার মেশিনের একটি নমুনা আউটপুট এখানে রয়েছে:

00:00:00
00:00:01
00:00:02
00:00:03
00:00:04
00:00:05
00:00:06
00:00:07
00:00:08
00:00:09
00:00:10
00:00:11
00:00:12
00:00:13

5

বাশ + স্লিপ + তারিখ, এছাড়াও 50 49 47 46 45 41 বাইট

while date -ud@$[s++] +%T;do sleep 1;done

একটি ল্যাপ সময় নিতে, দ্রুত ^ C চাপুন, এটি চালান এবং তারপরে উপরেরটি পুনরায় চালু করুন:

laps=("${laps[@]}" $s) ; echo ${laps[-1]}

পুনঃ স্থাপন করতে:

s=0; unset laps

Synt [s ++] বাক্য গঠনটি এখনও কাজ করছে বলে মনে হচ্ছে, তবে bashম্যান পৃষ্ঠাতে এটি আর নথিভুক্ত নয় (এএএএফআইএস) । এবং এটি ((...)) লুপ ব্যবহার করার চেয়ে এখনও বাইটটি আরও ছোট, একবার আমি তার চারপাশের উদ্ধৃতিগুলি সরিয়ে ফেললাম।


এএএএএফসিটি $[]হ'ল একটি অবনমিত / অননুমোদিত তবে এখনও এর সমর্থিত ফর্ম$(()) । আমি নিশ্চিত নই যে এটি সাধারণত কোড-গল্ফ উত্তরে ব্যবহৃত হয়, তবে সাধারণ নিয়মটি হ'ল আপনার কোডটি কেবল আপনার ভাষার জন্য দোভাষীর কমপক্ষে একটি সংস্করণে কাজ করতে হয়। আইএমও এটা ঠিক আছে।
পিটার কর্ডস

s=0প্রয়োজনীয় নয়, পাটিগণিত প্রতিস্থাপনটি একটি আনসেট পরিবর্তনশীল 0 হিসাবে বিবেচনা করবে । -uআপনি কেবল ডিফল্ট টাইমজোন (ইউটিসি) ধরে নিলে এছাড়াও প্রয়োজন হয় না isn't
ডেনিস

-u উপর প্রয়োজন হয় আমার মেশিন :)
উইল ক্রফোর্ড

4

সুইফ্ট , 144 বাইট

import Foundation
let s=Date()
while 1>0{let d=Int(-s.timeIntervalSinceNow)
print(String(format:"%02d:%02d:%02d",d/3600,d/60%60,d%60))
sleep(1)}

ব্যাখ্যা

import Foundation                       // Import `Date` and `sleep()`
let s = Date()                          // Get the time at the start of the program
while 1 > 0 {                           // While 1 > 0 (forever):
  let d = Int(-s.timeIntervalSinceNow)  //   Calculate time difference
  print(String(format:"%02d:%02d:%02d", //   Print the time
      d/3600,d/60%60,d%60))
  sleep(1)                              //   Sleep one second
}

4

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

f=_=>console.log(new Date(new Date-d).toUTCString().slice(17,25))
f(d=Date.now(setInterval(f,1e3)))


2
আমার জন্য ঘন্টা 0 এ শুরু হয় না। সিস্টেম ক্লক টাইমজোন উপর নির্ভর করে অফসেট পরিবর্তন হয়। (Win10)
লুকস

@ লুকস ওফস, ফিক্সড!
darrylyeo

4

মতলব (R2016b), 50 বাইট

t=now;while 1,disp(datestr(now-t,13)),pause(1),end

ব্যাখ্যা:

t=now; % Stores the current time
while 1 % Loops forever
    disp(datestr(now-t,13)) % Computes the difference since the program started
    % And prints with format 13 ('HH:MM:SS') - this may change between versions
    pause(1) % Waits one second
end

বিকল্প সংস্করণ (50 বাইটও খুব: পি):

now;while 1,disp(datestr(now-ans,13)),pause(1),end

সাইটে স্বাগতম! :)
ডিজেএমসিএমহেম


@ লুইস মেন্ডো এই পরামর্শের জন্য ধন্যবাদ, তবে আমি বুঝতে পারিনি ... আপনার উদাহরণে, পরিবর্তনশীলটি tকী? এছাড়াও, ইনপুটটি datestrদিনগুলিতে রয়েছে, সুতরাং আমাকে বিভাজন করতে 86400হবে, যা বাইট
গণনাটিকে

3

জুলিয়া 0.6 , 75 68 বাইট

for h=0:23,m=0:59,s=0:59;@printf "%02i:%02i:%02i
" h m s;sleep(1)end

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

ঘুম সহ (1) অনুমোদিত, জুলাইস অন্তর্নির্মিত সময় হ্যান্ডলিং পদ্ধতি ব্যবহারের চেয়ে সহজ নেস্টেড ফলের লুপগুলি ছোট are

ডেটটাইম ব্যবহার করে ঘুম ছাড়া পুরানো সমাধান (1)

t=now()-DateTime(0);Timer(x->println(Dates.format(now()-t,"HH:MM:SS")),0,1)

tপ্রোগ্রামটি শুরু হওয়ার সময় 'দিন 0' থেকে পাস করা সময়ের পরিমাণ। সময়now()-t একটি মুহূর্ত , যা পরে ব্যবহার করে ফর্ম্যাট করা হয় Dates.format()

t0=now(); ...; now()-t0একটি সময়ের পার্থক্য অর্জন করবে , এটি ব্যবহার করা যাবে না Dates.format()

সময়টি নিজেই বিল্ট-ইনয়ের সাথে তুচ্ছ Timer


3

পাইথন 2 , 85 বাইট

import time
t=0
while 1:print(":%02d"*3)[1:]%(t/3600,t/60%60,t%60);time.sleep(1);t+=1

ক্রেডিট


আপনি প্রতিস্থাপন পর এক বাইট সংরক্ষণ করতে পারবেন "%02d:%02d:%02d"সঙ্গে(":%02d"*3)[1:]
wnnmaw

1
আপনার দরকার নেই %24, আচরণের পরে সংজ্ঞা দেওয়া হয়নি 23:59:59
এরিক আউটগলফার

@ এরিকথ আউটগলফার ভাল পয়েন্ট, আপডেট হয়েছে।
নীল

3

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

f=_=>console.log(new Date(i++*1e3).toUTCString().slice(17,25))
f(i=0,setInterval(f,1e3))

মূলত @ ড্যারিলিওর উত্তর হিসাবে একই পন্থা , তবে সমস্ত সময় অঞ্চলগুলির জন্য কাজ করে এবং 0 এ যাওয়ার জন্য কিছুটা ভিন্ন উপায় ব্যবহার করে।

[সম্পাদনা] ড্যারিলের উত্তর ঠিক করা হয়েছে। যদিও এটি এখনও ছোট।


3

> <> , 82 + 7 = 89 বাইট

0\!
:/+1oan~?=3ln?$0(a:o":"n~?=4ln?$0(a:ro":"n~?=5ln?$0(a:,*a6-}:%*a6:,*a6-}:%*a6:

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

-t.0125প্রতিটি নির্দেশ এক সেকেন্ডের 1/80 তম নিতে পতাকাটি ব্যবহারের জন্য +7 বাইট । প্রতিটি লুপের 80 টি নির্দেশ থাকে, প্রতিটি লুপকে এক সেকেন্ড দীর্ঘ করে তোলে। গণনার সময় হওয়ার কারণে এটি বাস্তবে দীর্ঘায়িত হয়।

আমি @ না গাছের পাতা না পাওয়া পর্যন্ত আমাকে আসলে এই 100 টি পথ পর্যন্ত বাফার করতে হয়েছিল উত্তর , যা 7 বাইট ভাল উপায় চেয়ে খনি ঘন্টা এবং মিনিট জেনারেট করতে ছিল 80. নীচের এটি ছাঁটাই তারা ব্যবহারের অনুপ্রাণিত \/যা দুইবার মৃত্যুদন্ড কার্যকর করা হয় প্রতি লুপ

কিভাবে এটা কাজ করে

0\...
./...
Initialises the stack with a 0 to represent the time

0\!
:/....................................................,*a6-}:%*a6:,*a6-}:%*a6:
Puts the hours, minutes and seconds in the stack

0\!
:/....n~?=3ln?$0(a:o":"n~?=4ln?$0(a:ro":"n~?=5ln?$0(a:...
Print out the hours, minutes, seconds separated by colons. 
If the number is below 0, print a leading 0. 
If the number is not, then there is an extra 0 on the stack, which is popped.

0\!
./+1oa...
Print a newline and increment the counter
And restart the loop

বোনাস:

একই আকারের একটি লাইন সংস্করণ, 80 + 9 বাইট:

0::6a*%:}-6a*,:6a*%:}-6a*,:a(0$?nl5=?~n":"or:a(0$?nl4=?~n":"o:a(0$?nl3=?~nao1+>!

-aবাদ দেওয়া নির্দেশাবলীর জন্য টিকগুলি যোগ করতে এটি পতাকা ব্যবহার করে ।


3

পিএইচপি 4+, 70 64 বাইট

$x=time();while(1){sleep(1);echo date('H:i:s',time()-$x)."\n";}

পিএইচপি 5.3+, 69 63 বাইট

$x=time();a:sleep(1);echo date('H:i:s',time()-$x)."\n";goto a;

পিএইচপি খোলার ট্যাগগুলি আপনাকে 6 বাইট সংরক্ষণের উত্তরে বাদ দিতে পারে।
ড্যানিয়েল ডব্লিউ।

2

পাইথন 3 , 112 বাইট

ধরে নেওয়া 1 সেকেন্ডের বিলম্বগুলি ঠিক আছে, এমনকি যদি এটি (খুব কমই) এক সেকেন্ড এড়িয়ে যায়।

from time import*;a=0
while 1:d=divmod;m,s=d(a,60);print(":".join(f"{k:02d}"for k in(*d(m,60),s)));a+=1;sleep(1)

2

ভিবিএ, 90

t=0:while(1):?format(t,"hh:mm:ss"):t=t+timeserial(0,0,1):q=timer:while q-timer<1:wend:wend

তাত্ক্ষণিক উইন্ডোতে চালান: প্রায় 23 মিলিয়ন বছর কোথাও প্রত্যাশিত ব্যর্থতার বিন্দু (ভাসমান পয়েন্ট রেজোলিউশন ~ 8.5e9 দিন ব্যর্থ হয়)


2

জেলি , 23 বাইট

:⁽½c,60;%60d⁵j”:ṄœS1ṛ‘ß

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


এটি 1 মিনিটের উপরে সময় নিয়ে কাজ করে?
এইচ.পি.উইজ

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

2

এডাব্লুকে , 110 87 86 বাইট

BEGIN{for(;;i++){printf("%02d:%02d:%02d\n",i/3600%60,i/60%60,i%60);system("sleep 1")}}

টিআইওতে কাজ করে না।


আপনার প্রোগ্রামটি 00:00:00শুরু হওয়ার মুহুর্তে এটি মুদ্রিত হবে বলে মনে হচ্ছে না ।
ব্যবহারকারী 202729

ঠিক কর. ধন্যবাদ
Noskcaj

2

এপিএল (ডায়ালগ) , 37 বাইট

{∇⍵+×⎕DL 1⊣⎕←1↓∊':'@1∘⍕¨100+⍵⊤⍨360}0

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

পুরো প্রোগ্রাম।

অ্যাডামের উত্তরের মতো একই রকম, তবে স্বতন্ত্রভাবে লিখিত এবং অ- ⎕AIভিত্তিক পদ্ধতির ব্যবহার করে।


2

বাশ + কোর্টিলস + জিএনইউ তারিখ, 50 বাইট

o=`date +"%s"`;yes date +%X -ud\"-$o sec\"|sh|uniq

@ ডেনিস দ্বারা অনুপ্রাণিত, এই সমাধানটির সময় পরিবর্তন করার প্রয়োজন নেই। এটি এখন থেকে প্রাথমিক অফসেটটি ইউনিক্স যুগের (1 জানুয়ারি 1970 00:00:00 ইউটিসি) 'ও' তে সঞ্চয় করে এবং তারপরে ইউটিসি তারিখে [-ud অপশন] (বর্তমান সময় - অফসেট) প্রদর্শন করে, তবে কেবলমাত্র [+% এক্স বিকল্প] এইচএইচ: এমএম: এসএস। এটি এমন দেশগুলিতে কাজ করা উচিত যেখানে বর্তমান সময় অঞ্চলটি ইউটিসি নয়।


2

পরিষ্কার , 173 172 বাইট

import StdEnv,System.Time
$n i#i=(i/60^n)rem 60
=(i/10,i rem 10)
f i w#(Clock j,w)=clock w
#j=j/1000
|j>i=[j:f j w]=f i w
Start w=[($2i,':',$1i,':',$0i,'
')\\i<-f -1 w]

এটি শুধুমাত্র উইন্ডোজ ক্লিন বান্ডিলের অধীনে কাজ করে।

আপনি লিনাক্সের অধীনে ক্লিন এর CLK_PER_TICK :== 1000000* নিক্স হিসাবে কাজ করতে চাইলে 3 বাইট যুক্ত করুন as আপনি যদি এটি ক্রস-প্ল্যাটফর্ম হতে চান তবে তার পরিবর্তে 8 বাইট যুক্ত করুন, কারণ CLK_PER_TICKএটিতে যে মান সেট করা হয়েছে তার পরিবর্তে আপনাকে ব্যবহার করতে হবে। ( উপরের কারণে টিআইও লিঙ্কটি আরও বড় )

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


2

পাইথন 2 , 69 + 3 ( TZ=) = 72 বাইট

from time import*;s=time()
while 1:print ctime(time()-s)[11:19]+'\r',

এটি অবিচ্ছিন্ন লুপে চলেছে, ঘুম না করে প্রতিটি সেকেন্ডে একটি নতুন লাইন প্রিন্ট করার পরিবর্তে একই লাইনে সময় আপডেট করে। (এখনও নিয়ম দ্বারা অনুমোদিত, আমি আশা করি।)

এই সামান্য দীর্ঘতর সংস্করণ (72 + 3 = 75 বাইট) প্রতি সেকেন্ডের পরিবর্তে একটি নতুন লাইনে প্রিন্ট করে:

from time import*;s=time()
while 1:print ctime(time()-s)[11:19];sleep(1)

এই উভয়টিরই আপনাকে ইউটিসি টাইমজোন থাকা দরকার। লিনাক্সে আপনি TZপরিবেশের পরিবর্তনশীল সেট করে এটি অর্জন করতে পারেন । যেমন TZ= python


2

> <> , 106 বাইট 82 + 9 = 91 বাইট

-aপতাকাটির পরামর্শ দেওয়ার জন্য জো কিংকে ধন্যবাদ ! পরীক্ষা করে দেখুন তাদের উত্তর খুব।

0v+1oan<n0/
:/<</?(a:,*a6-}:%*a6:,*a6-}:%*a6:\\
n<n0/<</?(a:ro":"
":"n<n0/<</?(a:o

এটি অনলাইন চেষ্টা করুন! (তবে আপনাকে second০ সেকেন্ড সময় শেষ হওয়ার জন্য অপেক্ষা করতে হবে)।

আমি> <> এর এমন বৈশিষ্ট্যটি ব্যবহার করতে পেরেছিলাম যা এর আগে আমার কখনই প্রয়োজন ছিল না: এই -t.0125কোডটির জন্য পতাকাটির প্রয়োজন হয় , যা নির্ধারিত গতিটিকে টিকের জন্য 0.0125 সেকেন্ডে বা সেকেন্ডে 80 টিক সেট করে। এছাড়াও আছে-a পতাকা, যা একটি টিক যেমন হোয়াইটস্পেস গণনা করে তোলে (কিছু ক্ষেত্রে - অনুবাদক এই সম্পর্কে একটি বিট অদ্ভুত)।

মূলত, কোডটি এমন পাল্টা রাখে যা প্রতিবার মাছ লুপের মধ্য দিয়ে যায় এবং বাকী লুপটি কাউন্টারকে রূপান্তর করে hh:mm:ss এবং মুদ্রণ করে। লুপটি ঠিক 80 টি টিক নেয়।

এটি তত্ত্ব অনুসারে কাজ করা উচিত, তবে অনুশীলনে, প্রতিটি টিকটি 0.0125 সেকেন্ডের চেয়ে সামান্য দীর্ঘ হয়, কারণ গণনার সময়। পরিবর্তন করা হচ্ছে\\দ্বিতীয় লাইনে<<টিআইও-তে আরও সঠিক সময় ।

আপনি মাছের খেলার মাঠে কোডটিতে ক্রিয়াকলাপটি দেখতেও পারেন , ব্যতীত এই দোভাষী সরকারী দোভাষীর থেকে খানিকটা পৃথক শ্বেতস্পেসের আচরণ করে। বিকল্পভাবে, আপনি কোডটি সর্বোচ্চ গতিতে চালাতে, এক মিনিটের পরে কয়েকবার আচরণ যাচাই করতে টিআইও-র পতাকাগুলি সরাতে পারেন।


-1 বাইটটি প্রথম লাইনে ভি প্রতিস্থাপন \!এবং অতিরিক্ত দুটি মুছে ফেলে <। আপনি যদি -aপতাকাটি ব্যবহার করেন তবে বাইটসের আরও একটি দম্পতি , যা শ্বেতক্ষেত্রের গণনা করে এবং টিক্স হিসাবে নির্দেশাবলী এড়িয়ে যায়
জো কিং

@ জোকিং, -aপতাকাটি আমাকে আরও কিছুটা গল্ফ দেয়, ধন্যবাদ! আমি মনে করি আপনি নিজের \!কোডটিতেও কৌশলটি ব্যবহার করতে পারেন : অনলাইনে চেষ্টা করে দেখুন!
গাছ নেই

2

জাভা 8, সম্পূর্ণ প্রোগ্রাম, 150 বাইট

interface M{static void main(String[]a)throws Exception{for(int i=0;;Thread.sleep(1000))System.out.printf("%02d:%02d:%02d%n",i/3600,i/60%60,i++%60);}}

এটি এখানে চেষ্টা করুন (seconds০ সেকেন্ড পরে বেরিয়ে গেছে, তাই আরও আউটপুট দেখতে আমি ঘুমকে সেট করেছি)।

ব্যাখ্যা:

interface M{                    // Program:
  static void main(String[]a)   //  Mandatory main-method
     throws Exception{          //    Mandatory throws for Thread.sleep
    for(int i=0;                //   Start at 0
        ;                       //   Loop indefinitely
         Thread.sleep(1000))    //     After every iteration: Sleep for 1 sec
      System.out.printf("%02d:%02d:%02d%n",
                                //    Print in the format "HH:mm:ss\n":
        i/3600,i/60%60,i++%60); //     The hours, minutes and seconds
                                //     (and increase `i` by 1 afterwards with `i++`)
                                //   End of loop (implicit / single-line body)
  }                             //  End of mandatory main-method
}                               // End of program

জাভা 8, ফাংশন, 94 বাইট

v->{for(int i=0;;Thread.sleep(1000))System.out.printf("%02d:%02d:%02d%n",i/3600,i/60%60,i++%60);}

এটি এখানে চেষ্টা করুন (seconds০ সেকেন্ড পরে বেরিয়ে গেছে, তাই আরও আউটপুট দেখতে আমি ঘুমকে সেট করেছি)।

ব্যাখ্যা:

v->{   // Method with empty unused parameter and no return-type
  ...  //  Same as the program above
}      // End of method

এটি যখন 1000 এমএস ব্যবহৃত হয় তখন এটি লক্ষ্য হিসাবে কাজ করে দেখতে এখানে একটি ছোট জিআইএফ রয়েছে:

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


2

পিএইচপি, 59 48 বাইট

while(1){sleep(1);echo date('H:i:s',$i++)."\n";}

ড্যারেন এইচ এর উত্তর দ্বারা অনুপ্রাণিত

পুরানো সংস্করণ :

<?php while(1){sleep(1);echo date('H:i:s',$i++-3600)."\n";}

পিএইচপি খোলার ট্যাগগুলি আপনাকে 6 বাইট সংরক্ষণের উত্তরে বাদ দিতে পারে।
ড্যানিয়েল ডব্লিউ।

দুর্দান্ত চিন্তা, তবে 3600 এর 86400 হওয়া দরকার অন্যথায় কাউন্টারটি 23:00:00 এ শুরু হয় তাই দুর্ভাগ্যক্রমে আপনি একটি বাইট অর্জন করেছেন, তবুও আমাকে 9 দ্বারা পরাজিত করুন!
ড্যারেন এইচ

@ ড্যারেনএইচ আমি মনে করি এটি আপনার লোকেলের উপর নির্ভর করে, আমি সে সম্পর্কে ভাবিনি। আমি GMT + 1 এ রয়েছি, এ কারণেই আমি 3600 যোগ করেছি, তবে আমার ধারণা ইংরেজী লোকেরা, আপনি -3600পুরোপুরি সরিয়ে ফেলতে পারবেন , যা 5 বাইট সংরক্ষণ করতে পারে।
roberto06

1

শেল , 177 বাইট

লক্ষ্য করুন যে এটি সম্পূর্ণরূপে পসিক্স উপযোগী নয় কারণ এটি ব্যবহার করে date +%sযা একটি সাধারণ dateসম্প্রসারণ।

a=`date +%s`;while true;do b=`date +%s`;s=`expr $b - $a`;h=`expr $s / 3600`;s=`expr $s % 3600`;m=`expr $s / 60`;s=`expr $s % 60`;printf '\r%02d:%02d:%02d' $h $m $s;sleep 1;done

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

1
@ অ্যাডাম আমি আমার উত্তর গ্রহণ করি নি, এবং আমি অনেক ছোট উত্তর পোস্ট করেছি (আপনার মতো) জমা দেওয়া হয়েছিল।
মার্ক ওয়েস্টন

1

রুবি, 192 ১১7 বাইট (দাদার ক্রেডিট)

t=Time.now
loop do
m,s=(Time.now-t).to_i.divmod(60)
h,m=m.divmod(60)
printf"%02d:%02d:%02d
",h,m,s
sleep 1
end

এটা কিভাবে কাজ করে?

প্রসারিত সংস্করণটি ব্যবহার করতে যাচ্ছেন (একটি সময়ে রূপান্তরকে আলাদা ফাংশন হিসাবে দেওয়া হয় এবং ভিন্ন আউটপুট ফর্ম্যাট ব্যবহার করা হয়):

def format_secs(s) # Converts the value in seconds to the required format
    mins, secs = s.divmod(60) # divmod returns the quotient and the remainder of a number
    hours, mins = mins.divmod(60)
    [hours,mins,secs].map { |e| e.to_s.rjust(2,'0') }.join ':'

    =begin
    [hours,mins,secs] -Creates a new array using the values allready provided for hours, minutes and seconds
    .map { - Creates a new array based on a operation on each of an array's values
    .to_s.rjust(2,'0')} - Turns the number into a string, and then adds "0" if needed to make the timer's result at least two digits
    .join ':' - Combines the result of the operation into a single string with a ":" in between the two numbers
    =end
end

t = Time.now # Saves the time at the program's (Rough) start

loop do
    puts format_secs((Time.now - t).to_i) # Returns the result of  the "format_secs" operation on the difference between the two times (in seconds) converted to a pure integer
    sleep 1 # Waits for one second
end

6
সাইটে স্বাগতম! একটি কোড-গল্ফ চ্যালেঞ্জের প্রতিটি উত্তর গল্ফ করা উচিত। আপনার কমপক্ষে অব্যবহৃত সাদা স্থানগুলি সরিয়ে ফেলা উচিত এবং 1-বর্ণের পরিবর্তনশীল নাম ব্যবহার করা উচিত। এটি আপনাকে প্রায় 120 টি বাইট পেতে পারে এবং printfতার পরিবর্তে putsআরও কয়েকটি বাইট সংরক্ষণ করতে পারে: এটি অনলাইনে চেষ্টা করুন! । পিপিসিজিতে হ্যাপি গল্ফিং!
দাদা

1

এপিএল NARS, 109 63 57 টি অক্ষর

q;t
t←0
{∊⍵,¨':: '}{1<⍴x←⍕⍵:x⋄'0',x}¨(3⍴60)⊤⌊t+←⎕DL 1⋄→2

3 + 3 + 48 + 3 = 57 (অন্যদের অ্যাপল সমাধানগুলিও দেখেছেন)

{1<⍴x←⍕⍵:x⋄'0',x}

আইএনটি ⍵ কে অঙ্কের স্ট্রিংয়ে এমনভাবে রূপান্তর করুন যদি সেই স্ট্রিংয়ের দৈর্ঘ্য 1 এর চেয়ে আরও 1 '0' যুক্ত করে

{∊⍵,¨':: '}

অ্যারে 'অ্যারে' এর সাথে একত্রিত করুন: '

00:00:01 
00:00:02 
00:00:03 
00:00:04 
00:00:05 
00:00:06 
00:00:07 
00:00:08 
00:00:09 

1

x86-64 মেশিন কোড (লিনাক্স সিস্টেম কল): 78 বাইট

আরডিটিএসসি স্পিন-লুপের সময়, লিনাক্স sys_writeসিস্টেম কল।

x86-64 রান সময় আরডিটিএসসি "রেফারেন্স ক্লক" ফ্রিকোয়েন্সি জিজ্ঞাসা করার জন্য একটি সুবিধাজনক উপায় সরবরাহ করে না। আপনি একটি এমএসআর পড়তে পারেন (এবং তার উপর ভিত্তি করে একটি গণনা করুন) , তবে এর জন্য কার্নেল মোড, বা রুট + খোলার প্রয়োজন /dev/cpu/%d/msr, তাই আমি ফ্রিকোয়েন্সিটিকে বিল্ড-টাইম স্থির করার সিদ্ধান্ত নিয়েছি। ( FREQ_RDTSCপ্রয়োজনীয় হিসাবে সামঞ্জস্য করুন : কোনও 32-বিট ধ্রুবক মেশিন কোডের আকার পরিবর্তন করবে না)

নোট করুন যে বেশ কয়েক বছর ধরে x86 সিপিইউতে আরডিটিএসসি ফ্রিকোয়েন্সি ঠিক করা হয়েছে তাই এটি টাইমসোর্স হিসাবে ব্যবহারযোগ্য, না মূল ঘড়ি চক্র পারফরম্যান্স কাউন্টার, যদি না আপনি অক্ষম ফ্রিকোয়েন্সি পরিবর্তন করার জন্য পদক্ষেপ গ্রহণ করা। (আসল সিপিইউ চক্র গণনা করার জন্য সত্যিকারের পারফ কাউন্টার রয়েছে)) সাধারণত এটি টার্বো বা পাওয়ার সাশ্রয় ছাড়াই নামমাত্র স্টিকার ফ্রিকোয়েন্সি, যেমন আমার i7-6700k এর জন্য 4.0GHz for যাইহোক, এই ব্যস্ত-অপেক্ষা করার সময়টি লোড গড়ের উপর নির্ভর করে না (ক্যালিব্রেটেড বিলম্ব-লুপের মতো), এবং সিপিইউ পাওয়ার সাশ্রয়ের জন্যও সংবেদনশীল নয়।

এই কোডটি 2 ^ 32 Hz এর নিচে রেফারেন্স ফ্রিকোয়েন্সি সহ যেকোনো x86 এর জন্য কাজ করবে, অর্থাৎ ~ 4.29 গিগাহার্টজ পর্যন্ত। এর বাইরেও, টাইমস্ট্যাম্পের নীচের 32 টি 1 সেকেন্ডে সমস্তভাবে মুড়ে ফেলবে, সুতরাং আমাকে edxফলাফলের উচ্চ 32 বিটগুলিও দেখতে হবে।

সংক্ষিপ্তসার :

00:00:00\nস্ট্যাকের উপর ধাক্কা । তারপরে একটি লুপে:

  • sys_write সিস্টেম কল
  • সময় বাড়ানোর জন্য অঙ্কগুলি (শেষের সাথে শুরু করে) এডিসি-লুপটি ১ দ্বারা বাড়ানো হবে cmp / cmov, সিএফ প্রদানের ফলাফল নিয়ে বহন-ইন পরবর্তী অঙ্ক জন্য।
  • rdtsc এবং শুরু সময় সংরক্ষণ করুন।
  • ঘুরাও rdtscআরডিটিএসসি ফ্রিকোয়েন্সিটির ডেল্টা> = প্রতি সেকেন্ডে টিক্স না হওয়া পর্যন্ত চালান।

এনএএসএম তালিকা:

 1  Address                            ; mov  %1, %2       ; use this macro to copy 64-bit registers in 2 bytes (no REX prefix)
 2           Machine code           %macro MOVE 2
 3           bytes                      push  %2
 4                                      pop   %1
 5                                  %endmacro
 6                                  
 7                                      ; frequency as a build-time constant because there's no easy way detect it without root + system calls, or kernel mode.
 8                                      FREQ_RDTSC equ 4000000000
 9                                  global _start
10                                  _start:
11 00000000 6A0A                        push     0xa                       ; newline
12 00000002 48BB30303A30303A3030        mov      rbx, "00:00:00"
13 0000000C 53                          push     rbx
14                                      ; rsp points to  `00:00:00\n`
20                                  
21                                      ; rbp = 0                (Linux process startup.  push imm8 / pop is as short as LEA for small constants)
22                                      ; low byte of rbx = '0'
23                                  .print:
24                                      ; edx potentially holds garbage (from rdtsc)
25                                  
26 0000000D 8D4501                      lea      eax, [rbp+1] ; __NR_write = 1
27 00000010 89C7                        mov      edi, eax     ; fd = 1 = stdout
28                                      MOVE     rsi, rsp
28 00000012 54                  <1>  push %2
28 00000013 5E                  <1>  pop %1
29 00000014 8D5008                      lea      edx, [rax-1 + 9]     ; len = 9 bytes.
30 00000017 0F05                        syscall               ; sys_write(1, buf, 9)
31                                  
32                                      ;; increment counter string:  least-significant digits are at high addresses (in printing order)
33 00000019 FD                          std                        ;  so loop backwards from the end, wrapping each digit manually
34 0000001A 488D7E07                    lea      rdi, [rsi+7]
35                                      MOVE     rsi, rdi
35 0000001E 57                  <1>  push %2
35 0000001F 5E                  <1>  pop %1
36                                  
37                                      ;; edx=9 from the system call
38 00000020 83C2FA                      add   edx, -9 + 3      ; edx=3 and set CF (so the low digit of seconds will be incremented by the carry-in)
39                                      ;stc
40                                  .string_increment_60:          ; do {
41 00000023 66B93902                    mov    cx, 0x0200 + '9'    ; saves 1 byte vs. ecx.
42                                      ; cl = '9' = wrap limit for manual carry of low digit.  ch = 2 = digit counter
43                                    .digitpair:
44 00000027 AC                          lodsb
45 00000028 1400                        adc      al, 0           ; carry-in = cmp from previous iteration; other instructions preserve CF
46 0000002A 38C1                        cmp      cl, al          ; manual carry-out + wrapping at '9' or '5'
47 0000002C 0F42C3                      cmovc    eax, ebx        ; bl = '0'.  1B shorter than JNC over a MOV al, '0'
48 0000002F AA                          stosb
49                                  
50 00000030 8D49FC                      lea     ecx, [rcx-4]    ; '9' -> '5' for the tens digit, so we wrap at 59
51 00000033 FECD                        dec     ch
52 00000035 75F0                        jnz    .digitpair
53                                      ; hours wrap from 59 to 00, so the max count is 59:59:59
54                                  
55 00000037 AC                          lodsb                        ; skip the ":" separator
56 00000038 AA                          stosb                        ; and increment rdi by storing the byte back again.  scasb would clobber CF
57                                  
58 00000039 FFCA                        dec     edx
59 0000003B 75E6                        jnz   .string_increment_60
60                                  
61                                      ; busy-wait for 1 second.  Note that time spent printing isn't counted, so error accumulates with a bias in one direction
62 0000003D 0F31                        rdtsc                         ; looking only at the 32-bit low halves works as long as RDTSC freq < 2^32 = ~4.29GHz
63 0000003F 89C1                        mov      ecx, eax             ; ecx = start
64                                  .spinwait:
65                                  ;    pause
66 00000041 0F31                        rdtsc                      ; edx:eax = reference cycles since boot
67 00000043 29C8                        sub      eax, ecx          ; delta = now - start.  This may wrap, but now we have the delta ready for a normal compare
68 00000045 3D00286BEE                  cmp      eax, FREQ_RDTSC   ; } while(delta < counts_per_second)
69                                   ;   cmp      eax, 40  ; fast count to test printing
70 0000004A 72F5                        jb     .spinwait
71                                  
72 0000004C EBBF                        jmp .print
  next address = 0x4E = size = 78 bytes.

pauseউল্লেখযোগ্য শক্তি সাশ্রয় করার নির্দেশকে অবিরাম মন্তব্য করুন : এটি এক কোরকে 15 ডিগ্রি সেলসিয়াস ছাড়াই উত্তপ্ত করে pause, তবে কেবল ~ 9 দিয়ে pause। (স্কাইলেকে, যেখানে pause~ 5 এর পরিবর্তে 100 ডলার চক্রের জন্য ঘুমায় I আমি মনে করি এটি যদি আরও সঞ্চয় করে তবেrdtsc আরও স্লো-ইশ না হয় তবে সিপিইউ খুব সময় না )।


একটি 32-বিট সংস্করণটি কয়েকটি বাইট সংক্ষিপ্ত হবে, উদাহরণস্বরূপ প্রাথমিক 00: 00: 00 00 n স্ট্রিংটি পুশ করতে এটির 32-বিট সংস্করণ ব্যবহার করা।

16                          ;    mov      ebx, "00:0"
17                          ;    push     rbx
18                          ;    bswap    ebx
19                          ;    mov      dword [rsp+4], ebx    ; in 32-bit mode, mov-imm / push / bswap / push would be 9 bytes vs. 11

এবং 1-বাইট ব্যবহার করে dec edxint 0x80সিস্টেম কল ABI- র ব্যবহার করেন না Esi / EDI, তাই প্রাপ্ত syscall বনাম lodsb / stosb জন্য রেজিস্টার সেটআপ সহজ হতে পারে।


আমি একটি nanosleepসিস্টেম কল ব্যবহার করতে পারতাম , তবে এটি আরও আকর্ষণীয় ছিল। লিনাক্সের মূলের সাহায্যে, সঠিক এমএসআর পড়া এবং প্রোগ্রামিকভাবে আরডিটিএসসি ফ্রিকোয়েন্সি পাওয়া সম্ভব।
পিটার কর্ডেস

1

q / kdb + , 40 বাইট

সমাধান:

.z.ts:{-1($)18h$a+:1};a:-1;(.)"\\t 1000"

উদাহরণ:

q).z.ts:{-1($)18h$a+:1};a:-1;(.)"\\t 1000"
q)00:00:00
00:00:01
00:00:02
00:00:03
00:00:04
00:00:05

ব্যাখ্যা:

এখানে তিনটি কমান্ড কার্যকর করা হচ্ছে:

  1. .z.ts:{-1($)18h$a+:1}; / override timer function
  2. a:-1; / initialise variable a to -1
  3. (.)"\\t 1000" / start the timer with 1000ms precision

টাইমার ফাংশন ভাঙ্গন:

.z.ts:{-1 string 18h$a+:1} / ungolfed timer function
      {                  } / lambda function
                     a+:1  / add 1 to variable a
                 18h$      / cast to seconds
          string           / cast to string
       -1                  / write to stdout
.z.ts:                     / assign this function to .z.ts

বোনাস:

41 বাইটের জন্য বিকল্প 1 :

a:.z.t;.z.ts:{-1($)18h$x-a};(.)"\\t 1000"

বিকল্প 2 জন্য 26 + 7 বাইট = 33 বাইট

.z.ts:{-1($)18h$a+:1};a:-1

এবং -t 1000কিউ বাইনারি যুক্তি হিসাবে যুক্ত করা।

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