স্টপওয়াচ বাস্তবায়ন করুন


23

একটি সাধারণ ডিজিটাল স্টপওয়াচ বাস্তবায়ন করুন , যা নীচে বর্ণিত হিসাবে সেকেন্ড এবং মিনিটে সময় অতিবাহিত হবে।

গুরুত্বপূর্ণ

উভয় প্রদর্শন এবং নিয়ন্ত্রণ বিভাগগুলি পড়ুন দয়া করে !

প্রদর্শন

MM:SSপূর্বে প্রদর্শিত সময়ের স্ট্রিং "ইন-প্লেস" (পুরো বা পর্দার একটি অংশ সাফ করার অনুমতি দেওয়া হয়) প্রতিস্থাপন করে সময় অতিবাহিত হওয়ার সময়, বিন্যাসে প্রদর্শিত হবে।

স্টপওয়াচটি কমপক্ষে প্রতি সেকেন্ডে আপডেট হওয়া উচিত।

উদাহরণ:

0 মিনিট, 0 সেকেন্ড

00:00

0 মিনিট, 33 সেকেন্ড

00:33

1 মিনিট, 50 সেকেন্ড

01:50

প্রাথমিকভাবে, আপনি '00: 00 'দিয়ে বা অন্য কোনও মানের সাথে শুরু করতে পারেন [00: 00-59: 59]।

আপনার স্টপওয়াচটি একবার পৌঁছে গেলে 59:59তা পুনরায় সেট হয়ে 00:00নতুন করে চালিয়ে যাওয়া উচিত ।

আপনি যদি চান সাধারণ প্যাটার্নটি অনুসরণ করেন, তবে আপনি ভিন্ন একটি বেস (দশমিকের পরিবর্তে) বা এমনকি একটি পৃথক সংখ্যা সিস্টেম ব্যবহার করতে পারেন।

উদাহরণস্বরূপ 13:03প্রদর্শিত হতে পারে:

দশমিক

13:03

হেক্সাডেসিমেল

0D:03

করুন Base64-

N:D

কোয়েটার-কাল্পনিক ভিত্তি

10101:3

রোমান সংখ্যাসমূহ

XIII:III

সতর্কতা অবলম্বন করুন যে আপনি যদি একটি দশমিক অ-সংখ্যা সিস্টেম / বেস ব্যবহার করেন তবে অবশ্যই এটি প্রিন্টযোগ্য এএসসিআইআই (বা ইউনিকোড) অক্ষর ব্যবহার করে এনকোড করা আবশ্যক, যেমন মিনিট এবং সেকেন্ডের জন্য দুটি বাইনারি (অপ্রিন্টযোগ্য) বাইট ব্যবহারের অনুমতি নেই।

আপনার আউটপুটটি অবশ্যই যথাযথ শূন্যের সাথে বাম-প্যাড করতে হবে, যদি আপনার সংখ্যার ব্যবস্থা এটির জন্য অনুমতি দেয়।

বিভাজক চরিত্রটিকে :অন্য কোনও মুদ্রণযোগ্য অক্ষরের সাথে প্রতিস্থাপন (অঙ্কগুলি সহ) গ্রহণযোগ্য।

নিয়ন্ত্রণ

স্টপওয়াচটি বিরতি দেওয়া শুরু করা উচিত এবং ব্যবহারকারীরা 'নিয়ন্ত্রণ' কী টিপুন (নীচে দেখুন) স্পষ্টভাবে এটি শুরু না করা পর্যন্ত এই অবস্থায় থাকতে হবে ।

যদি, স্টপওয়াচটি গণনা করা হয়, ব্যবহারকারী আবার 'নিয়ন্ত্রণ' কী টিপেন, স্টপওয়াচটি বিরতি দেওয়া উচিত (বর্তমান সময়কে ধরে রেখে), যতক্ষণ না 'নিয়ন্ত্রণ' কীটি আরও একবার চাপানো হয়।

'নিয়ন্ত্রণ' কী একটি একক কীস্ট্রোক যেমন হতে পারে s, অথবা কি, যেমন কোনো সমন্বয় Ctrl+Shift+X, কিন্তু এটা, 'পারমাণবিক' হতে হবে, ক্রমানুসারে একাধিক কি টিপে যেমন sতারপর Enter, তাই অনুমতি দেওয়া হয় না

স্টপওয়াচটি বিরতি দিতে এবং পুনরায় শুরু করতে একই 'নিয়ন্ত্রণ' কী (বা সংমিশ্রণ) ব্যবহার করা উচিত ।

আপনাকে অবশ্যই একটি নির্দিষ্ট 'নিয়ন্ত্রণ' কী ব্যবহার করতে হবে , অর্থাত্ 'কোনও কী'র অনুমতি নেই।

বিকল্পভাবে, আপনি 'নিয়ন্ত্রণ' এর জন্য কী বা চাপের পরিবর্তে একক বা ডাবল মাউস-ক্লিক ব্যবহার করতে পারেন।


বিধি

  • এটি , বাইট জেতে সংক্ষিপ্ত উত্তর;
  • স্ট্যান্ডার্ড কোড-গল্ফের ফাঁকগুলি প্রয়োগ;
  • আপনার প্রোগ্রাম অবশ্যই (তাত্ত্বিকভাবে) চিরকাল চলতে সক্ষম হতে হবে।

'নিয়ন্ত্রণ' কী প্রবেশ করা যাবে?
লুভজো

@ লভজো হ্যাঁ, কোনও একক কী বা কীগুলির সংমিশ্রণটি এন্টার সহ (যতক্ষণ না এটি বিরতি দেওয়া যায় এবং একই কী ব্যবহার করে পুনরায় শুরু করা যেতে পারে) সহ কাজ করবে।
জেপেলিন


1
আমাদের কি দ্বিতীয়-দ্বিতীয় গ্রানুলারিটি দরকার? উদাহরণস্বরূপ, ব্যবহারকারী 00:05মুদ্রিত হওয়ার পরে যদি প্রায় 7000 মিলি সেকেন্ড বিরতি দেয় এবং তারপরে আবার কিছুটা সময় শুরু হয়, অবশ্যই 00:06পুনরায়সূচি কীটি টিপানোর পরে 3000 মিলি সেকেন্ড উপস্থিত হওয়া উচিত , বা পুনরায় সূচনা কীটি টিপানোর পরে এটি পুরো দ্বিতীয়টি প্রিন্ট করা ঠিক আছে?
23

@ এসএমএলস পুনরায় শুরু হওয়ার পরে পুরো দ্বিতীয় অপেক্ষা করা ঠিক আছে।
জেপেলিন

উত্তর:


8

স্মাইলব্যাসিক, 86 77 71 বাইট

@L
N=N!=DIALOG(FORMAT$("%02D:%02D",F/60MOD 60,F MOD 60),,,N)F=F+1GOTO@L

DIALOGটাচ স্ক্রিনে একটি পাঠ্যবাক্স প্রদর্শন করে। Nঅদৃশ্য হওয়ার আগে পাঠ্য বাক্সটি স্ক্রিনে থাকবে কত সেকেন্ড। যদি Nএটি হয় 0, ব্যবহারকারী টাচ স্ক্রিনের বোতামটি টিপ না দেয় ততক্ষণ এটি স্থায়ী থাকে।

DIALOGরিটার্নস 1ব্যবহারকারী বাটন টেপা, এবং যদি 0তা স্বয়ংক্রিয়ভাবে বন্ধ করে দেয়। সুতরাং যখন ব্যবহারকারী বিরতি বোতামটি চাপ দেয় তখন এটি ফিরে আসে 1এবং 0স্টপওয়াচটি থামিয়ে প্রদর্শনের সময় সেট করা হয় । ব্যবহারকারীর আবার বোতামটি টিপে দেওয়ার পরে, আমরা 1টাইমারটি আবার শুরু করে ডিসপ্লেটির সময়টি আবার সেট করি । মূলত, প্রতিবার DIALOGফিরে আসার সময় 1, প্রদর্শনের সময়টি ব্যবহার 10ব্যবহারের মধ্যে পরিবর্তন করা হয় !=যা উভয় ইনপুট 1 বা 0 অবধি লজিক্যাল এক্সওআর-এর কাছে থাকে।


এই দুর্দান্ত দেখায়! আপনি যদি এটি কীভাবে কাজ করে তার একটি অ্যানিমেটেড "স্ক্রিনকাস্ট" সরবরাহ করতে পারেন তবে তা প্রশংসিত হবে!
জেপেলিন

ঠিক আছে, আমি শীঘ্রই এটি করব
12 ই মে 21

এটি এই এমুলেটরটিতেও পরীক্ষা করা যেতে পারে: citra-emu.org/game/smilebasic
রোব্লগিক

9

পাইথন 2, 167 129 বাইট

-৩৩ বাইটস * ctrl-cব্যতিক্রমগুলি ব্যবহার করে ধরতে মাল্টেসেনের ধারণাকে ব্যবহার করে - ক্রেডিট দিন!
-4 ধন্যবাদ DLosc করার জন্য (Init বাইট nএবং b0 বদলে f())
FlipTack করার (ব্যবহারের -1 বাইট ধন্যবাদ p^=1বদলে p=1-p)
-2 বাইট (Remove স্পষ্টতা নির্দিষ্টকরী) ফেলিপে Nardi বাতিস্তা ধন্যবাদ

import time
f=time.time
n=b=p=0
while 1:
 try:n=[n,f()][p];t=n-b;print'\r%02d:%02d'%(t/60%60,t%60),
 except:b=[b-n+f(),b][p];p^=1

নীচে আমার মূল হিসাবে একই হিসাবে কাজ করে, তবে এর নিয়ন্ত্রণ কী ক্রমের সাথে ctrl+c
(উইন্ডোজ,, bit৪ বিবিটিতে পাইথন ২.7.৮ নিয়ে আমার দ্বারা পরীক্ষিত;
লিনাক্সে পাইথন ২.7.১৩ এর সাথে ব্রায়ান মিন্টন দ্বারা পরীক্ষিত, bit৪ বিট)

ওয়ান-লাইনার হিসাবে ifপেতে তালিকার তালিকার কাছে বিবৃতি ধসে গেছে try

আমার মূল:

import time,msvcrt as m
f=time.time
n=b=p=0
while 1:
 if m.kbhit()and m.getch()==b'p':b=[b-n+f(),b][p];p^=1
 if p:n=f()
 t=n-b;print'\r%0.2d:%0.2d'%(t/60%60,t%60),

(উইন্ডোজ,, bit৪ বিবিটিতে পাইথন ২.7.৮ দিয়ে আমার দ্বারা পরীক্ষিত - এই কোডটি যদিও msvcrtগ্রন্থাগারের ব্যবহারের কারণে উইন্ডোজ নির্দিষ্ট )

নিয়ন্ত্রণ কী হ'ল 'পি'।

nএবং bশুরুতে একই মানের সাথে আরম্ভ করা হয়, 0 এর একটি "অফসেট" দেয়; pইনিশিয়াল করা হয় 0, একটি বিরামপ্রাপ্ত অবস্থা নির্দেশ করে।

যখনই নিয়ন্ত্রণ কী টিপানো হয় তখন মানটি pস্যুইচ করা হয়। কোনও বিরামিত অবস্থা থেকে সক্রিয় অবস্থায় স্যুইচ করার bসময় পূর্বের সক্রিয় রাষ্ট্র (গুলি) এর সাথে বর্তমান কোনও অফসেট রেখে নতুন মানে আপডেট করা হয় b-n

একটি সক্রিয় রাষ্ট্র চলাকালীন nবার বার কল করে আপডেট করা হয় time.time()

মধ্যে পার্থক্য nএবং b, tতারপর, সেকেন্ড মোট সংখ্যা (ক ভগ্ন অংশ সহ) সক্রিয় রাষ্ট্র (গুলি) সময় অতিবাহিত।

বিরতিযুক্ত মিনিটগুলি তখন t/60এবং প্রতিটি মিনিট এবং সেকেন্ডের মধ্যে 60 প্রদর্শিত থাকে (t/60%60,t%60)। শীর্ষস্থানীয় জিরোগুলি প্রতিটিটির সাথে পূর্ণসংখ্যার অংশটির স্ট্রিং বিন্যাস ব্যবহার করে প্রতিরোধ করা হয় '...%0.2d...',প্রথম আইটেমের শীর্ষস্থানীয় ক্যারিজ রিটার্ন রয়েছে এমন একটি টিউপল (ট্রেলিং ) \rমুদ্রণ করার ফলে পূর্ববর্তী মুদ্রিত পাঠ্যটি ওভাররাইট হয়ে যায়।


হ্যাঁ হ্যাঁ, ভাল ক্যাচ, আমি মূলত তৈরি করেছি ^=কিন্তু গঠনের সময় কোনও সময়ে স্যুইচ করেছি ।
জোনাথন অ্যালান

@ ডলোকস সত্যই, ধন্যবাদ ...
জোনাথন অ্যালান

এটি উইন্ডোজ নির্দিষ্ট নয়। আমি পাইথন ২.7.১৩ এর সাথে লিনাক্স bit৪ বিটে এটি পরীক্ষা করেছি এবং এটি কার্যকর হয়েছে। (Ctrl-C এর নিয়ন্ত্রণ কী সহ)
ব্রায়ান মিন্টন

@ ব্রায়ানমিন্টন আমাকে জানানোর জন্য আপনাকে ধন্যবাদ!
জোনাথন অ্যালান

কি জন্য প্রয়োজন .মধ্যে %0.2d? এটি ঠিক ঠিক কাজ করে%02d
ফিলিপ নারদী

6

পাইথন - 160 159 143 বাইট

আমাকে 18 বাইট সংরক্ষণ করার জন্য @ জোনাথন অ্যালানকে ধন্যবাদ!

কেবল বিল্টিন লাইব্রেরি ব্যবহার করে, তাই নিয়ন্ত্রণ কীটি ctrl-cএটির সাথে ধরা হয় except keyboardInterrupt

import time
Z=0
print'00:00'
while 1:exec"try:\n while 1:\n  %s\nexcept:1\n"*2%(1,"print'\033c%02d:%02d'%divmod(Z%3600,60);Z+=1;time.sleep(1)")

ওহ্ দারুণ. আমি মনে করি সম্ভবত এটি সংক্ষিপ্ত হতে পারে except:? আমার এটির একটি ভার্সন সংস্করণ রয়েছে ...
জোনাথন অ্যালান

@ জোনাথান অ্যালান ওহ দুর্দান্ত, আপনি কি করতে পারেন তা জানতেন না।
মালটিসেন

5

বাশ + ইউনিক্স ইউটিলিটিস, 90 বা 93 বাইট

90-বাইট সংস্করণ:

trap d=\$[!d] 2;for((n=0;;)){((d|!n))&&dc<<<DP60dod*d$n\r%+n|colrm 1 4&&: $[n++];sleep 1;}

93-বাইট সংস্করণ:

trap d=\$[!d] 2;for((n=0;;)){((d|!n))&&dc<<<DP60dod*$n+n|colrm 1 4&&n=$[(n+1)%3600];sleep 1;}

সিটিআরটিএল-সি পুনঃসূচনা / বিরতি চরিত্র। একটি স্পেস হ'ল মিনিট এবং সেকেন্ডের মধ্যে ডিলিমিটার।

দুটি সংস্করণের মধ্যে পার্থক্য হ'ল 90-বাইট প্রোগ্রামটি 2 ^ 63 সেকেন্ডের জন্য কাজ করবে (যে বিন্যাসে বশ আমাকে একটি পূর্ণসংখ্যার ওভারফ্লো দেবে)।

93-বাইট সংস্করণটি সত্যই চিরকালের জন্য কাজ করবে।

মূল সমস্যাটিতে প্রয়োজনীয়তা অন্তর্ভুক্ত ছিল: "আপনার প্রোগ্রামটি অবশ্যই (তাত্ত্বিকভাবে) চিরকাল চলতে সক্ষম হতে হবে।"

যদি সেই প্রয়োজনটি মেটানোর জন্য 2 running 63 সেকেন্ডের জন্য দৌড়ানো যথেষ্ট হয়, তবে 90-বাইট সমাধান কাজ করে। সেই সময়কালটি মহাবিশ্বের চেয়ে 20 গুণ বেশি বয়স!

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


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


দেখে মনে হচ্ছে এটি স্ক্রিনে কোনও প্রাথমিক মান প্রদর্শন করবে না, যতক্ষণ না আপনি এটি "বিরতি" করেন।
জেপেলিন

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

হ্যাঁ এটি সঠিক, তবে এটি এখনও একটি প্রাথমিক মান প্রদর্শন করা উচিত Initially, you can start with '00:00' or with any other value in range [00:00-59:59], যা আপনি প্রথমবার 'নিয়ন্ত্রণ' চাপ না দেওয়া পর্যন্ত পর্দায় থাকবে। দুঃখিত আমি যদি এই পরিষ্কারটি যথেষ্ট পরিমাণে প্রণয়ন করতে না পারি!
জেপেলিন

ঠিক আছে, এটি বোঝায় - আমি এটি পরিবর্তন করব।
মিচেল স্পেক্টর

1
এখন সব ভাল লাগছে!
zeppelin

5

কিউব্যাসিক, 213 211 বাইট

নিয়ন্ত্রণ কী ট্যাব tab এই দৌড়াতে ছেড়ে যাওয়া ল্যাপটপের আগুনের কারণ হতে পারে। তোমাকে সতর্ক করা হইছে.

DO
WHILE k$<>CHR$(9)
k$=INKEY$
LOCATE 1
?CHR$(48+m\10);CHR$(48+(m MOD 10));":";CHR$(48+(d MOD 60)\10);CHR$(48+(d MOD 10))
IF r THEN
n=TIMER
d=v+n-b+86400
m=d\60MOD 60
END IF
WEND
k$=""
v=v+n-b
r=1-r
b=TIMER
LOOP

এখানে এটি কার্যকর হয়, 10, 15 এবং 20 সেকেন্ডে বিরতি দেয়:

স্টপওয়াচ চলছে

অবহেলিত এবং মন্তব্য

' Outer loop runs forever
DO
  ' The WHILE-WEND loop runs until tab is pressed
  WHILE key$ <> CHR$(9)
    key$ = INKEY$
    ' Output the stopwatch value at top left of screen
    LOCATE 1
    ' Unfortunately, QBasic's PRINT USING doesn't have a format for printing
    ' with leading zeros, so we have to do it manually by printing the
    ' 10s digit and the 1s digit
    PRINT CHR$(48 + minute \ 10); CHR$(48 + (minute MOD 10));
    PRINT ":";
    PRINT CHR$(48 + second \ 10); CHR$(48 + (second MOD 10))
    ' Update the current time if the running flag is set
    IF running THEN now = TIMER
    ' Take the difference between now and the last time we started the
    ' stopwatch, plus the amount of saved time from previous runs,
    ' plus 86400 to account for the possibility of running over midnight
    ' (since TIMER is the number of seconds since midnight, and QBasic's
    ' MOD doesn't handle negative values like we would need it to)
    diff = saved + now - lastStarted + 86400
    second = diff MOD 60
    minute = diff \ 60 MOD 60
  WEND
  ' If we're outside the WHILE loop, the user pressed tab
  key$ = ""
  ' Add the previous run's time to the saved amount
  saved = saved + now - lastStarted
  ' Toggle running between 0 and 1
  running = 1 - running
  ' If we're starting, we want to put the current time in lastStarted;
  ' if we're stopping, it doesn't matter
  lastStarted = TIMER
LOOP

নোট করুন যে এর মানগুলি TIMERভাসমান-পয়েন্ট। এটি আউটপুটকে প্রভাবিত করে না, যেহেতু MODএবং \পূর্ণসংখ্যার জন্য কাটা হয়। তবে এটি সংরক্ষিত সময়ের পরিমাণের সাথে নির্ভুলতা যুক্ত করে: আপনি যদি টিকের ঠিক আগে টিকারটি থামিয়ে দেন, আপনি আবার এটি শুরু করার সময় দেখবেন যে সংখ্যাটি এক সেকেন্ডেরও কম পরিবর্তিত হয়।


4

ব্যাচ, 132 বাইট

set/ar=0,m=s=100
:l
cls
@choice/t 1 /d y /m %m:~1%:%s:~1% /n
set/as+=r,m+=c=s/160,s-=c*60,m-=m/160*60,r^^=%errorlevel%-1
goto l

nউইল টিপুন (আন) টাইমারকে বিরতি দিন। আউটপুট ফ্লিকারটি তিন (বা চার) বাইটের দামে হ্রাস করা যায়।


4

খাঁটি বাশ, 141 বাইট

set -m
while ! read -t 1;do printf '\r%02i:%02i' $[s=s>3598?0:s+1,s/60] $[s%60];done&trap 'fg>/dev/null' TSTP
printf '00:00'
kill -STOP $!
read

এটি ব্যাশ বিল্টিন (কোনও বাহ্যিক সরঞ্জাম নেই) ব্যতীত আর কিছুই ব্যবহার করে না। নিয়ন্ত্রণের অক্ষরটি হ'ল Ctrl-Z, যাতে মানক SIGTSTPহ্যান্ডলিং স্টপওয়াচটি বিরতি দেয়।

Ctrl-Zসাবহেলটি অগ্রভাগের সময় টিপে যদি চাপানো হয়, তবে এটি কার্যকর করাতে বিরতি দেবে এবং বাইরের স্ক্রিপ্টটিকে অগ্রভাগে ফিরিয়ে দেবে, যেখানে এটি নিঃশব্দে অপেক্ষা করবে। যদি বাইরের স্ক্রিপ্টটি পূর্বরূপযুক্ত করা হয়, তবে ট্র্যাপ হ্যান্ডলার সাবশেলের কার্য সম্পাদন আবার শুরু করবে এবং এটি আবার গণনা করবে।


3

ক্রোম কনসোলে জাভাস্ক্রিপ্ট, 143 বাইট

f=document,m=s=g=i=0;setInterval(()=>{if(g%2){m=(i/60|0)%60;s=i++%60}f.write((m>9?m:'0'+m)+':'+(s>9?s:'0'+s));f.close();f.onclick=()=>g++},1e3)

কনসোলে প্রবেশ করার পরে এটি কাউন্টারে 00:00 এ প্রবেশ করে এবং তারপরে ডকুমেন্টে কী কী চাপ থাকে তা নিয়ন্ত্রণ সক্ষম করে।

খুব বেশি ম্যাজিক চলছে না, উল্লেখযোগ্যভাবে (i/60)|0ফ্লোর সংখ্যাটি

Chrome কনসোলে সম্পন্ন এবং পরীক্ষিত


চমৎকার উত্তর. কোনও তর্ক নেই এমন ফাংশনগুলির জন্য একটি ডামি আর্গুমেন্ট ব্যবহার করে আপনি কিছু বাইটগুলি সরিয়ে ফেলতে পারেন, এবং আপনি কোড যুক্ত স্ট্রিং দ্বারা সেটআইন্টারওয়ালের প্রথম যুক্তিটি প্রতিস্থাপন করতে পারেন।
লুক 13

1
132 বি:m=s=g=i=0;(f=document).onclick=_=>g++;setInterval("g%2&&f.close(f.write(`${(m=i/60%60|0)>9?m:'0'+m}:`+((s=i++%60)>9?s:'0'+s)))",1e3)
লুক

ওহ, দুর্দান্ত :) এখানে বেশ কয়েকটি জিনিস শিখেছি। বিরতিতে স্ট্রিং এবং _ => জি ++। ধন্যবাদ :)
gzbz

3

এইচটিএমএল + জাভাস্ক্রিপ্ট (ES6), 191 192 187 183 174 বাইট

<b onclick='b=b?clearInterval(b):setInterval("a.innerHTML=`${(d=(((c=a.innerHTML.split`:`)[1]>58)+c[0])%60)>9?d:`0`+d}:${(e=++c[1]%60)>9?e:`0`+e}",1e3)'onload='b=0'id=a>00:00

ব্যাখ্যা

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

যখনই ব্যবহারকারী ক্লিক ক্লিক করে, এর মান bপরীক্ষা করা হয়। এটি সূচনা করা হয় 0যার প্রতি মূল্যায়ন করে false, তাই কোডের একটি স্ট্রিং প্রতি 1000 মিলিসেকেন্ডে মূল্যায়ন করা হয়। এটি ইন্টারভালের আইডিতে ভেরিয়েবল সেট করে তাই এটি পরে থামানো যায়। যদি bকোনও সংখ্যা থাকে তবে এটি মূল্যায়ন করে true, তাই বিরতি বন্ধ হয়ে যায়। এটি মানটি দেয় undefined, তাই চক্রটি অবিরত থাকে।

কোডের স্ট্রিং আইডি a(স্টপওয়াচ) দিয়ে উপাদানটির এইচটিএমএল পরিবর্তন করে । প্রথম মিনিটগুলি পূর্ববর্তী স্টপওয়াচের মান গ্রহণ করে, কোলন দ্বারা বিভক্ত করে এবং মিনিটের মান অর্জন করে পার্স করা হয়, যা সেকেন্ডের মান 59 (58 এর চেয়ে বেশি) না হলে 0 দ্বারা বৃদ্ধি করা হয়, এবং অন্যথায় 1 মডিউল 60 তারপর এই মান প্যাড করা হয়। তারপরে আসে কোলন এবং শেষ অবধি, কয়েক সেকেন্ড। কোডটি কেবল পুরানো মান পায়, এটি 1 দ্বারা বৃদ্ধি করে, মডিউল 60 নেয় এবং allyচ্ছিকভাবে এটি প্যাড করে।


এটি মোটেও কাজ করে বলে মনে হচ্ছে না। আমি কেবল রেফারেন্সএরর পেয়েছি: ডি সংজ্ঞায়িত করা হয় নি
অ্যালেক্সিস টাইলার

আপনি href = # সরিয়ে সম্ভবত কয়েকটি বাইট সংরক্ষণও করতে পারেন কারণ আপনি অনক্লিক ব্যবহার করছেন যেহেতু এটির আসলে প্রয়োজন নেই।
অ্যালেক্সিস টাইলার

আমি ঠিক ঠিক করেছিলাম। আমি হেরেফকেও সরিয়ে দিয়েছি, কারণ আপনি ঠিক বলেছেন। ধন্যবাদ!
লুক

আপনি কি বি ট্যাগটিতে অন্লিক লাগিয়ে উত্তরে উল্লেখ করতে পারবেন না?

আমি মনে করি এটি কাজ করে। এটি 9 বি বাঁচিয়েছে। অনেক ধন্যবাদ!
লুক 13

3

সি 309 179 বাইট

f(){m=0,s=0;A: while(getchar()^'\n'){if(s++==59){if(m++==59)m=0;s=0;}printf("\r%02d:%02d",m,s);sleep(1);system("clear");if(getchar()=='\n'){break;}}while(getchar()^'\n'){}goto A;}

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

void f()
{
   int m=0,s=0;

   A: while(getchar()^'\n')
      {           
       if(s++==59)
       {
         if(m++==59)
           m=0;

         s=0;
       }
       printf("\r%02d:%02d",m,s);
       sleep(1);  
       system("clear");

        if(getchar()=='\n')
        {
          break;
        }
      }

       while(getchar()^'\n')
       {}
       goto A ;
}

ব্যবহার: প্রেস Enterথেকে বিরাম এবং পুনরায় শুরু করুন স্টপওয়াচ।

ব্যাখ্যা:

  • Enterকীস্ট্রোকের জন্য অপেক্ষা করুন , breakপ্রথম whileলুপটি এবং পরবর্তী না Enterআসা পর্যন্ত অপেক্ষা করুন ।
  • পরবর্তী Enterকীস্ট্রোকের পরে , gotoপ্রথম whileলুপ এবং পুনরায় গণনা শুরু করুন।

এখন, আমি জানি gotoসি তে একটি খারাপ কোডিং অনুশীলন, তবে আমি অন্য কোনও উপায় বের করতে পারি না।


কোডটি সংকলন করে না। তদুপরি, getchar()কিছু অক্ষর চাপ না দেওয়া পর্যন্ত অবরুদ্ধ।
জি স্লাইপেন

একটি লিনাক্স মেশিনে সংকলন করে চালিত হয়
আবেল টম

অসম্পূর্ণ সংস্করণ সম্ভবত, কিন্তু গল্ফযুক্ত সংস্করণটি তা করে না। ইতিমধ্যে m=0,s=0;এটি ব্যর্থ হয়েছে, কারণ আপনি কোথাও এই ভেরিয়েবলগুলি ঘোষণা করেন নি।
জি স্লাইপেন

3

জাভাস্ক্রিপ্ট, 124 বাইট

s=i=1,setInterval("s&&(d=document).close(d.write(`0${i/60%60|0}:`.slice(-3)+`0${i++%60}`.slice(-2))),d.onclick=_=>s=!s",1e3)

'কন্ট্রোল কী' নথির একটি ক্লিক। এটি পরীক্ষা করতে, কোডটি <script>ট্যাগের ভিতরে কনসোলে বা এইচটিএমএল ফাইলে আটকান ।

ব্যাখ্যা:

let s = 1
let i = 1
setInterval(() => {
    //If s = true then check after the "&&" operator else false
    s && (d = document).close( //put the document variable inside the d variable, so now i don't need to use anymore the long word 'document, then i close the document
            d.write( //Write into the document the next string
                `0${i/60%60|0}:`.slice(-3) + `0${i++%60}`.slice(-2) //Here is the magic, here I update the 'i' variable and convert the 'i' value to minutes and seconds
            ) 
        ),
        d.onclick = _ => s = !s //Add onclick event to the document, if s = true then s = false, if s = false then s = true
}, 1e3) //1e3 = 1000

ক্রোমে পরীক্ষিত


1
সাইটে স্বাগতম! কোনও অনলাইন টেস্টিং সাইটের লিঙ্কে সম্পাদনা করা কি সম্ভব হবে যেমন অনলাইনে চেষ্টা করে দেখুন! , যাতে অন্য ব্যবহারকারীরা আপনার উত্তর যাচাই করতে পারে?

ধন্যবাদ @ কায়ারডকোইনরিঙ্গিংহিং, এটি জেফফিলের সাথে: jsfiddle.net/xjw7o0ps
দ্য কপিরাইট

2

পিএইচপি, 94 91 বাইট

আমি ধরে নিই যে 32 স্পেস বারের মূল কোড (যা সম্ভবত এটি নয়);
আমার কাছে বর্তমানে ncurses পরীক্ষা করার কোন উপায় নেই। তবে কোডের বাকী অংশগুলি কাজ করে।

for($s=[STDIN];;)echo date("\ri:s",$t+=$r^=stream_select($s,$n,$n,1)&&32==ncurses_getch());

এ শুরু হয় 00:00, কিন্তু বিরতি অবিলম্বে যখন বৃদ্ধি হয়

আপনার (আমার মতো) যদি এনক্রোস না থাকে তবে আপনি দ্বিতীয় dateপ্যারামিটারটি $t+=$r^=!rand(sleep(1),19);বা এর সাথে প্রতিস্থাপন করে পরীক্ষা করতে পারবেন $t+=$r^=++$x%20<1+sleep(1);। ( sleepসর্বদা ফিরে আসে 0।)

ভাঙ্গন

for($s=[STDIN];                     // set pointer for stream_select
    ;                               // infinite loop:
)
    echo date("\ri:s",                  // 5. print CR + time
        $t+=                            // 4. increment $t if watch is running
        $r^=                            // 3. then toggle pause
            stream_select($s,$n,$n,1)   // 1. wait 1 second for a keystroke
            &&32==ncurses_getch()       // 2. if keystroke, and key==space bar
    ;

2

সি # 220 বাইট

using static System.Console;
using static System.DateTime;
class P
{
    static void Main()
    {
        var l = Now;
        var d = l-l;
        for( var r = 1<0;;Write($"\r{d:mm\\:ss}"))
        {
            if (KeyAvailable&&ReadKey(1<2).KeyChar == 's')
            {
                l = Now;
                r = !r;
            }
            if (r)
                d -= l - (l = Now);
        }

    }
}

Golfed

using static System.Console;using static System.DateTime;class P{static void Main(){var l=Now;var d=l-l;for(var r=1<0;;Write($"\r{d:mm\\:ss}")){(KeyAvailable&&ReadKey(1<2).KeyChar=='s'){l=Now;r=!r;}if(r)d-=l-(l=Now);}}}

sকীটি শুরু / থামার জন্য ব্যবহার করে । পুরো প্রোগ্রামটি টাইমডেল্টা ব্যবহার করে স্মরণ করে কাজ করেDateTime.Now

এখানে বেশিরভাগ সি #-ম্যাজিক সি # 7.0 বৈশিষ্ট্য থেকে আসে using static


2

বাশ, 65 বাইট

trap d=\$[!d] 2;for((;;)){ printf "\r%(%M:%S)T" $[n+=d];sleep 1;}

নোট করুন যে এটি সঠিকভাবে কাজ করতে একটি ফাইল স্ক্রিপ্টে লেখা উচিত, অন্যথায়, চেষ্টা করুন:

bash -c 'trap d=\$[!d] 2;for((;;)){ printf "\r%(%M:%S)T" $[n+=d];sleep 1;}'

এটি বর্ণনা করার জন্য বর্ধিত সংস্করণ:

trap d=\$[!d] 2                     # flip d for each INT (ctrl-c) signal.
for((n=0;;)){                       # repeat forever the code inside the {...}
                                    # The n=0 is not strictly needed.
    printf "\r%(%M:%S)T" "$[n+=d]"  # Print Minute:Second string calculated from 
                                    # the n value, increment by the value of d.
                                    # If IFS is not numeric (0-9), then, the
                                    # quotes around "$[n+=d]" could be removed.
    sleep 1                         # wait for 1 second.
}

%(...)TPrintf যাও বিন্যাস 5+ ব্যাশ মধ্যে বৈধ।


কাজ করে না। 00:00আপনি যখন আঘাত করবেন তখন কেবল একটি কাউন্টার প্রিন্ট করে এবং ইনক্রিমেন্ট দেয় Ctrl-C। টাইমারটির কোনও অ্যানিমেশন নেই। (বাশ 5.0.7 এ পরীক্ষিত)
রোব্লগিক

1
আপনি কি কোনও স্ক্রিপ্টে কোড লিখেছেন? অন্যথায় চেষ্টা করুন: bash -c 'trap d=\$[!d] 2;for((;;)){ printf "\r%(%M:%S)T" $[n+=d];sleep 1;}'। @রোব্লিক
আইজাক

আহ, যে কাজ! স্ক্রিপ্টটি চালাতে হবে bash -c:)
রোব্লগিক

1

সি (জিসিসি) , 121 115 বাইট

p,r;g(){r^=1;}main(t,b){for(b=time(signal(2,g));;r?p=t:(b+=t!=p))t=time(0)-b,printf("\r%02d:%02d  ",t/60%60,t%60);}

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

SIGINT- র জন্য একটি সিগন্যাল হ্যান্ডলার সেট করে, যা নিয়ন্ত্রণ-সি টিপে ট্রিগার করা হয়। আমরা একটি সময় অফসেট রাখি b, এবং প্রাচীরের ঘড়ির সময় বিয়োগফল অফসেটটি প্রদর্শন করি। যদি আমাদের বিরতি দেওয়া থাকে তবে প্রদর্শিত সময় হিমায়িত করার জন্য প্রতিটি সময় প্রাচীর ঘড়ির টিকের সময় বেস বাড়িয়ে দিন।

6 বাইট বন্ধ শেভ করার জন্য @ সেলিংক্যাটকে ধন্যবাদ!


0

Zsh + Gnu তারিখ, 242 বাইট

এক সেকেন্ডের 1/100 ম বৈশিষ্ট্যযুক্ত! এটির জন্য একটি ইন্টারেক্টিভ টার্মিনাল প্রয়োজন, তবে যাইহোক এখানে একটি টিআইও লিঙ্ক রয়েছে । টাইমার শুরু / বন্ধ করতে
আঘাত Enter; Ctrl-Cপ্রস্থান করা.

u(){p=`gdate +%s`;q=`gdate +%N`;}
f(){read -t0.01&&{read;break};unset REPLY}
g(){while :;{u;t=$[p-a];s=$[t%60];m=$[(t%3600-s)/60]
echo "\r`printf %02d:%02d $m $s`.$q[1,2]\c";f;}}
<<<ready;read;u;a=$p
while :;{f;echo "\r\e[2A\c";u;a=$[p-t];g;}

মন্তব্য (কিছুটা পুরানো)

u()echo $[`gdate +%s%N`/1000]       # fn:unix timestamp extended to µs
v()gdate +%s                        # fn:unix time, in s
f(){read -t0.01 -r&&{read -r;break;} # fn:listens for "Enter"
                      ;unset REPLY;}

g(){while :;                        # fn:rolling stopwatch
    {q=`u`;t=$[`v`-a]               #    t=time diff from baseline (s)
    ;echo "\r`printf %02d:%02d      #    format output
    $[(t%3600-s)/60] $s`            #    minutes:seconds
    .${q:10:2}\c";                  #    .xx = partial seconds
    f;}}                            #    listen for "Enter"

                                    # Execution starts here!
<<<ready;read;u;a=$p                # Wait for "Enter"; get baseline $a

while :;{                           # Main program loop
         f;                         # listen for an "Enter"
           echo "\r\e[2A\c"         # go up 1 line of the console
a=$[`v`-t]                          # reset the baseline
                ;g;}                # begin the stopwatch

@ ইসহাক, আমি আপনার উত্তর ব্রিভিটি এবং কমনীয়তার জন্য পরাজিত করার উপায় নেই, তাই আমি ভেবেছিলাম এর পরিবর্তে বৈশিষ্ট্যগুলি যুক্ত করব ...
রোব্লগিক ২

1
এটি একটি দুর্দান্ত লক্ষ্য @roblogic :-) .... .... এখনও আপনার কোড বোঝে ....
আইজ্যাক

0

কমোডোর বেসিক (সি 64 / থি 64 মিনি, ভিসি -20, পিইটি, সি 16 / + 4) - 147 টোকানাইজড এবং বেসিক বাইট

 0?"{clear}":geta$:ifa$<>" "thengoto
 1ti$="000000"
 2fori=.to1:?"{home}"mid$(ti$,3,2)":"mid$(ti$,5,2):geta$:b$=ti$:i=-(a$=" "):nE:pO198,.
 3geta$:ifa$<>" "then3
 4ti$=b$:goto2

{clear}তালিকার মধ্যে SHIFT+CLR/HOMEএকটি প্রারম্ভিক উদ্ধৃতি চিহ্ন অনুসরণ করার সময় একটি PETSCII চরিত্র হিসাবে আউটপুট হয়, যেখানে {home}হয়CLR/HOME খোলা উদ্ধৃতি চিহ্ন নিম্নলিখিত একই শর্তে শিফট ছাড়া কী।

নিয়ন্ত্রণ কী হিসাবে স্পেস বারটি ব্যবহার করুন।

বেসিক 7 এ কমোডোর 128 এর সাথে কাজ করতে, নিম্নলিখিত লাইনে তালিকা পরিবর্তন করুন:

 0?"{clear}":geta$:ifa$<>" "thengoto0
 2fori=.to1:?"{home}"mid$(ti$,3,2)":"mid$(ti$,5,2):geta$:b$=ti$:i=-(a$=" "):nE:poK198,.

গণিতে অতিরিক্ত সাত টোকেন যুক্ত করে (সমস্ত সংখ্যা বেসিকে 7 বাইট হিসাবে সংরক্ষণ করা হয়, তাই goto108 টোকেনাইজ বাইট রয়েছে যেখানে gotoকেবল 1)।

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