আর কত সময় বাকি?


31

কার্যক্রম

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

উদাহরণ

0:00 0:01 -> 0:01
0:55 1:00 -> 0:05
1:45 3:15 -> 1:30

1
ডিসিতে ইনপুটটি ভুলভাবে পড়তে হয়, যেহেতু :একটি আদেশ (কোড দর্শন হিসাবে ডেটা)। আমি কি পরিবর্তে ফাঁকা স্থান ব্যবহার করার অনুমতি দেব বা এর উত্তর দেওয়ার জন্য আমার অন্য ভাষা খুঁজে পাওয়া দরকার?
শৈশুমারা

1
হয় 01:30বৈধ আউটপুট? (শূন্যের
লুইস মেন্ডো

2
হ্যাঁ, আমি এটিকে বৈধ হিসাবে গ্রহণ করব। আমি বর্ণনাটি সম্পাদনা করব।
জোশ

1
@seshoumara ইনপুটটিতে অবশ্যই একটি কোলন থাকতে হবে।
জোশ

এম এর জন্য প্রত্যাশিত সর্বাধিক মান কত ?
ডিজিটাল ট্রমা

উত্তর:


92

এক্সেল, 6 বাইট

=B1-A1

ধরে নিচ্ছি ক কোষে A1এবং বি কোষে রয়েছেB1


37
না ... না ... আমি এক্সেল জিততে দেব না। + 1 আপনি বিভ্রান্ত ব্যক্তি।
ম্যাজিক অক্টোপাস উর্ন

2
এটি বাতিল করুন, |vy':¡05AB1E এ বুটস্ট্র্যাপড, আমি কিছুই করতে পারি না ... আমি মনে করি এক্সেল সৎভাবে এটি জিততে পারে, অন্য কোনও কিছুই স্বয়ংক্রিয়ভাবে আমার জানা ফর্ম্যাটটিকে পার্স করে না।
ম্যাজিক অক্টোপাস উরন

7
কীভাবে? কীভাবে? এক্সেল কীভাবে জিতেছে? আমার মস্তিষ্ক এখন explo ... আবশ্যক
caird coinheringaahing

2
মিটার যদি ২৩ এর বেশি হয় তবে ফর্ম্যাটটি কাজ করবে বলে মনে হচ্ছে না। উদাহরণস্বরূপ, যদি আমি 45:45এ 1 এবং 22:22বি 1 তে টাইপ করি তবে ফলাফলটি 23:23:00 সম্পাদনা করুন কিছুই নয় - মিটার জন্য সর্বাধিক প্রত্যাশিত মান 9
ডিজিটাল ট্রমা

4
@ ইঞ্জিনিয়ারস্টোস্ট যাই হোক না কেন আমার জন্য ডিফল্ট ফর্ম্যাটিং কাজ করে। আমি সবেমাত্র ইনপুটটি টাইপ করেছি, একটি আলাদা ঘরে সরিয়েছি, সূত্রটি টাইপ করেছি এবং এন্টার টিপুন।
রিলে

15

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

YOd15XO

ইনপুটটি আকারে {'1:45' '3:15'}বা স্ট্রিংগুলির একটি সেল অ্যারে {'1:45', '3:15'}

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

ব্যাখ্যা

YO     % Input cell array of strings (implicit). Convert to serial date numbers
d      % Difference
15XO   % Convert to format 15, i.e. 'HH:MM'. Display (implicit)

ওহ্ দারুণ! বহন!
সোয়েভার

8

বাশ + কোর্টিলস, 44 39 বাইট

tr : \ |dc -e?r60*+r-r60*-60~rn58PA~rnn

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

ব্যাখ্যা: "1:45 3:15" পরীক্ষার কেস হিসাবে ব্যবহার করা (শেষ উদাহরণ)। আমি উদ্ধৃতিতে মধ্যস্থতাকারী পদক্ষেপগুলি দেখাই।

tr : \ |         # replace colons with spaces: "1 45 3 15"
dc -e?           # start dc script, push input to LIFO stack: "15 3 45 1"
     r60*+            # turn time B to total seconds: "195 45 1"
     r-r60*-          # turn time A to total seconds and get difference: "90"
     60~r             # turn difference (time left) to minutes and seconds: "1 30"
     n58P             # pop and print minutes, print colon (ASCII code 58): "30"
     A~rnn            # print seconds. Padding with zeroes is done by dividing by
                      #10 (A), and printing the quotient and the remainder.

নোট করুন যে মিনিটের মানটির জন্য শূন্য প্যাডিং দরকার কিনা তা আমি যাচাই করি না, কারণ ওপি জানিয়েছে যে এর সর্বাধিক মান m9।


নীচে আমার আসল 44 বাইট উত্তর রয়েছে, যা dateসেকেন্ডে অবশিষ্ট সময়কে সেকেন্ডে m:ssফর্ম্যাটে পরিণত করতে কমান্ডটি ব্যবহার করে ।

date -d@`tr : \ |dc -e?r60*+r-r60*-p` +%M:%S

2
@ ডিজিটালট্রামা ধন্যবাদ তবে শেষ পর্যন্ত, আমি ডেট কমান্ড সরিয়ে এবং ডিসি-তে ফরম্যাট মুদ্রণটি পরিচালনা করতে সক্ষম হয়েছি।
শৈশুমারা

1
ক্রস আউট 44 নিয়মিত 44 এর মতো দেখাচ্ছে
রিলে

1
@ রিলে আমি ৪৪ এর আশেপাশের জায়গাগুলিও অতিক্রম করেছিলাম, যাতে সেখানে প্রথম স্থান পাওয়া উচিত ছিল get
শেশমারা


7

পাইথন 2, 90 87 83 80 বাইট

ইনপুট লাগে "2:45","5:01"

a,b=[60*int(s[-5:-3])+int(s[-2:])for s in input()]
print'%d:%02d'%divmod(b-a,60)

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



আপনি কয়েকটি বাইট সংরক্ষণের জন্য তালিকা বোধগম্যতা ব্যবহার করতে পারেন:a,b=[60*int(s[-5:-3])+int(s[-2:])for s in input()]
ফিলিপ নার্দি বাতিস্তা

যদি আমার ভুল না হয় তবে আপনি দুটি শেষ লাইন প্রতিস্থাপন করে অতিরিক্ত তিনটি অক্ষর সংরক্ষণ করতে পারবেন print'%d:%02d'%divmod(b-a,60):)
মরউভেন


5

ব্যাচ, 74 বাইট

@set t=%2-(%1)
@set/as=%t::=*60+1%,m=s/60,t=s/10%%6
@echo %m%:%t%%s:~-1%

প্রতিস্থাপন করা হচ্ছে :সঙ্গে সময় *60+1একটি অভিব্যক্তি যে সেকেন্ডের সংখ্যা গণনা করে সেটিকে পরিবর্তন করে। ব্যাচ নেতৃস্থানীয় শূন্যগুলিকে অষ্টাল হিসাবে ব্যাখ্যা করে তাই 1দশমিক রূপান্তর নিশ্চিত করার জন্য আমি কয়েক সেকেন্ডে একটি প্রিপেন্ড করে; ভাগ্যক্রমে দু'জন 1বাতিল হয়ে যায়।


5

সি, 112 100 বাইট

11 বাইট সংরক্ষণ করার জন্য @ বিটসেগকে ধন্যবাদ এবং একটি জোড় বাঁচানোর জন্য @ জোহান ডু টোইটকে ধন্যবাদ!

i,j;f(char*a,char*b){i=atoi(b)-atoi(a);j=atoi(b+2)-atoi(a+2);j<0?i--,j+=60:0;printf("%d:%02d",i,j);}

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


1
আপনি এর %s%dসাথে পরিবর্তন করতে %02dএবং মুছে ফেলতে পারেন ?:এটি অনলাইন চেষ্টা করুন!
betseg

1
scanf()একাধিক পূর্ণসংখ্যা পড়ার জন্য আপনার বন্ধু।
ডিজিটাল ট্রমা

1
আপনি ব্যবহার করে 1 বাইট সংরক্ষণ করতে পারেন: j <0? I ++, j + = 60: 0;
জোহান ডু টোইট

@ ডিজিটালট্রামা নোননোনো, তিনি যে যুক্তি দিয়েছিলেন তা ব্যবহার করার জন্য সাধারণত এটি খাটো হয়।
ম্যাথু রোহ

5

মাইএসকিউএল, 13 22 বাইট

select right(timediff(B,A),5)

মধ্যে বার আশা Aএবং B


4

বাশ + জিএনইউ ইউটিলিটিস, 43

date -d@`date -f- +%s|dc -e??r-60/p` +%M:%S

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

ব্যাখ্যা

         date -f- +%s                        # read in 2 line-delimited dates and output as number of seconds since the epoch
                     |dc -e                  # pipe to dc expression:
                           ??                # - read 2 input numbers
                             r-              # - reverse and subtract
                               60/           # - divide by 60
                                  p          # - output
        `                          `         # evaluate date|dc command
date -d@                             +%M:%S  # format seconds difference and output

উল্লেখ্য dc60 দ্বারা অভিব্যক্তি বিভক্ত করে, কারণ dateএইচ যেমন ইনপুট লেখা আছে: এম পরিবর্তে এম এম: এস এস।


4

ইসমাস্ক্রিপ্ট 6, 99 91 85 বাইট

একটা টান:

f=s=>s.split`:`.reduce((a,e,i)=>a+e*(!i?60:1),0);t=n=>~~(n/60)+":"+n%60;t(f(b)-f(a));

সামান্য বিন্যাসিত:

f=s=>s.split`:`.reduce((a,e,i)=>a+e*(!i?60:1),0);
t=n=>~~(n/60)+":"+n%60;
t(f(b)-f(a));

আমি মনে করি সেখানে কিছু সঞ্চয় হতে পারে .. তবে আমি বর্তমানে সেগুলি দেখছি না।

সম্পাদনা করুন - মন্তব্যে দুর্দান্ত পরামর্শ।


আপনি এর আশেপাশে প্রথম বন্ধনী সরাতে পারেন s
অর্জুন

আর পরিবর্তে s.split(":"), আপনি নতুন সিনট্যাক্স ব্যবহার করতে পারেন: s.split<backtick>:<backtick>
অর্জুন


4

সি #, 72 বাইট

using System;a=>b=>((DateTime.Parse(b)-DateTime.Parse(a))+"").Remove(5);

স্ট্রিং হিসাবে ইনপুট নেয়। b="3:15" a="1:45"

ব্যাখ্যা:

ফর্ম্যাটে DateTime.Parse()একটি তারিখ ফেরত দেওয়ার কারণে hh:mm:ss, আমি ফলাফলটি স্ট্রিংয়ের সাহায্যে পার্স করতে পেরেছি +"", তারপরে ট্রেলিংটি ছাঁটাতে সক্ষম:00

এটি সাথে কাজ করে hh:mmকারণ এক মিনিটে 60 সেকেন্ড এবং এক ঘন্টার মধ্যে 60 মিনিট উভয়ই থাকে।

0:01 0:00 আয় 0:01

1:00 0:55 আয় 0:05

3:15 1:45 আয় 1:30


3
দুর্ভাগ্যবশত, DateTime.Parse()- উদাহরণস্বরূপ, ইনপুট নিচ্ছে 1:45- যেমন hh:mmএবং mm:ss, আউটপুট ফলো ফলে - জন্য একটি 1:45 এবং বি 3:15 - [01:30:00]( hh:mm:ss) ( এমনকি CultureInfo.InvariantCultureনিদিষ্ট )। "0:" + a/bপার্সিং করার সময় আপনাকে একটি যুক্ত করতে হতে পারে ।
auhmaan

@ অহমান আহ, দুর্দান্ত ধরা শেষের ট্রিমিং শেষ করেছিলাম :00
অলিভার

আমি বিশ্বাস করি আপনার ;শেষে প্রয়োজন, আপনি তরকারী ব্যবহার করতে পারেন cana=>b=> দরকার আছে, আপনি , আপনাকে পুরোপুরি যোগ্যতা অর্জন করতে হবে DateTimeবা অন্তর্ভুক্ত করতে হবে using System;
TheLethalCoder

3

রেবোল, 5 বাইট

b - a

ধরে নিচ্ছি আমি কোনও নিয়ম মিস করিনি ..

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


আমি এই ভাষা সম্পর্কে কিছুই জানেন না।
ম্যাজিক অক্টোপাস উরন


2

পাইথ, 47 45 44 40 বাইট

J.U-Zbm+*60hdedmmvkcd\:.z%"%d:%02d".DJ60

ইনপুটটিকে নতুন লাইনের দ্বারা পৃথক করে নেয়।

পাইথের কোনও বিল্ট-ইনস এর জন্য দরকারী ছিল না। আমি কিছু অভিনব ইভাল () স্টাফ চেষ্টা করেছি তবে পরিষ্কারভাবে পাইথ *কোনও জিনিস বা কোনও নেতৃস্থানীয় শূন্যের সাথে স্টাফ বাড়াতে পারে না। এটি আমার প্রত্যাশার চেয়ে অনেক বেশি সময় পেল। বেশ কিছু বাইট আউটপুটে একটি নেতৃস্থানীয় শূন্য যোগ করার জন্য ব্যয় করা হয়। কমপক্ষে আমি বাশের চেয়ে ছোট জিজ্ঞাসা করা হলে ব্যাখ্যা যোগ করবে।

এটা চেষ্টা কর!

বিকল্প সমাধান, 48 বাইট

J.U-Zbm+*60hdh_dmmvkcd\:.z
K%J60
s[/J60\:*<KT\0K

2

হাস্কেল, 98 127 86 বাইট

r(m:_:s)=60*read[m]+read s
a#b|(d,m)<-divMod(r b-r a)60=show d++':':['0'|m<=9]++show m

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

তবে আমি ভাবছি যদি এর জন্য কিছু লাইব্রেরি ফাংশন থাকে

সম্পাদনা: মুছে ফেলা আমদানি, এখানে একটি ত্রুটিও স্থির করে যেখানে এটি এম: এস এর পরিবর্তে এম: এস দেখায়

এছাড়াও, ভাল-ফর্ম্যাট সংস্করণ:

convert :: String -> Integer
convert (a:_:b) = (read [a])*60+(read b)

diffTime :: String -> String -> String
diffTime s1 s2 = let (d,m) = divMod (c b-c a) 60 in show d ++ ":" ++ pad2d m

pad2d :: Int -> String
pad2d n = ['0'|n<=9]++show n

সম্পাদনা 2: গল্ফড অফ (30?) বাইটস লাইকনিকে ধন্যবাদ! অন্য কিছু মিসকে গল্ফ করেছে। বাইট।


1
এটি কোন ভাষা এবং এটি কতগুলি বাইট ব্যবহার করে তা আমাদের জানান।
জোশ

2
হ্যাঁ, আমি পোস্ট টিপতে চাইছিলাম না (পাঠ্য বাক্স থেকে যে ট্যাব + প্রবেশ করতেন তা আপনার উত্তর পোস্ট করে কে জানত?)
জেনেরিক প্রদর্শনের নাম


আমি কোনও তালিকা বোধগম্যতা ব্যবহার করার কথা ভাবি নি। ধন্যবাদ :)
জেনেরিক প্রদর্শনের নাম

2

টি-এসকিউএল, 238 বাইট

CREATE PROCEDURE d @a time,@b time AS BEGIN DECLARE @d int DECLARE @s varchar(2) SET @d=datediff(s,@a,@b);SET @s=CAST(@d%3600/60 AS VARCHAR(3)) SELECT CAST(@d/3600 AS VARCHAR(3))+':'+(SELECT CASE WHEN LEN(@s)=1 THEN '0'+@s ELSE @s END)END

ব্যবহার:

EXEC d '00:55','01:00'

পোস্টগ্র্যাসের উদাহরণটি আগে দেখে আমি বুঝতে পেরেছিলাম যে এসকিউএল-তে আমি অনেক গল্ফিংয়ের প্রচেষ্টা দেখিনি তাই টি-এসকিউএল-তে আমার এটি একবার গিয়েছিল। আপনি কেন এসকিউএল: ডি তে খুব গল্ফ দেখছেন না তা এখন আমি জানি


2

সিজেম , 34 33 25 বাইট

8 টি বাইট সংরক্ষণ করেছেন মার্টিন ইন্ডারকে ধন্যবাদ!

{r':/60b}2*\m60mds2Te[':\

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

ব্যাখ্যা

{             e# Start of block
 r            e#  Read one time from input
 ':/          e#  Split on colons, gives [minutes seconds]
 60b          e#  Convert from base 60
}2*           e# Run this block 2 times
              e# At this point, we have the two times in seconds on the stack
\             e# Swap top elements
m             e# Subtract
60md          e# Divmod the result by 60, to convert back to minutes and seconds
s             e# Convert the seconds to a string
2Te[          e# Pad it to 2 characters by adding 0s to the left (T = 0)
':            e# Push a colon character
\             e# Swap top elements, bringing seconds back to the top

2

টি এসকিউএল, 82 বাইট

select left(cast(dateadd(minute, datediff(S,'0:00','0:01')/60,114) as time(0)), 5)

2

পাইথন, 160 বাইট

আমি এখনও কোড গল্ফে নতুন তাই কারও কোনও পরামর্শ থাকলে আমি এটির প্রশংসা করব।

a, b = input()
def z(x):
    x = x.split(":")
    return int(x[0])*60+int(x[1])
a, b = z(a),z(b)
s, m = b-a,0
while s >= 60:
    s -= 60
    m += 1
print(str(m)+":"+str(s))

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

1

রেক্সএক্স, by৯ বাইট

arg t q
say right(time(,f(q)-f(t),s),5)
f:return time(s,'00:'right(arg(1),5,0))


1

জাভা 7, 164 বাইট

String c(String a,String b){long s=x(b,1)-x(a,1)+(x(b,0)-x(a,0))*60,m=s%60;return(s/60)+":"+(m>9?m:"0"+m);}long x(String s,int i){return new Long(s.split(":")[i]);}

ব্যাখ্যা:

String c(String a, String b){       // Method with two String parameters and String return-type
  long s = x(b,1) - x(a,1)          //  Get difference in seconds from input times
           + (x(b,0) - x(a,0)*60,   //   plus the difference in minutes times 60 to get the seconds
    m = s%60;                       //  Temp variable of seconds after we've subtracted the minutes (used multiple times)
  return (s/60)                     //  Return minutes
    +":"                            //   plus ":"
    +(m>9?m:"0"+m);                 //   plus seconds (with a leading 0 if necessary)
}                                   // End of method

long x(String s,int i){             // Separate ethod with String and Integer parameters and long return-type
  return new Long(s.split(":")[i];  //  Return either minutes or seconds of String parameter based on the index
}                                   // End of method

পরীক্ষার কোড:

এখানে চেষ্টা করুন।

class M{
  String c(String a,String b){long s=x(b,1)-x(a,1)+(x(b,0)-x(a,0))*60,m=s%60;return(s/60)+":"+(m>9?m:"0"+m);}long x(String s,int i){return new Long(s.split(":")[i]);}

  public static void main(String[] a){
    M m = new M();
    System.out.println(m.c("0:00", "0:01"));
    System.out.println(m.c("0:55", "1:00"));
    System.out.println(m.c("1:45", "3:15"));
  }
}

আউটপুট:

0:01
0:05
1:30

1

টিএক্সআর লিস্প, 101 বাইট

$ txr -e '(awk (:let (s "%M:%S"))
               ((mf (time-parse s))
                (prn (time-string-local (- [f 1].(time-utc) [f 0].(time-utc)) s))))'
13:49 14:49 
01:00
0:13 1:47
01:34
5:01 5:59
00:58
6:00 6:00
00:00
6:00 5:00
59:00

ঘনীভূত: (awk(:let(s"%M:%S"))((mf(time-parse s))(prn(time-string-local(-[f 1].(time-utc)[f 0].(time-utc))s))))


আপনার একটি বাইটকাউন্ট দরকার, এবং আমার মনে হয় না এটি পুরোপুরি গল্ফড।
আর


1

পাওয়ারশেল 47 বাইট

param($s,[timespan]$f)($f-$s).ToString("h\:mm")

সাধারণ টাইমস্প্যান গণিত এবং আওয়ার এবং ঘন্টা এবং সেকেন্ডের স্ট্রিং।


0

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

a=>b=>{c=a.split`:`,d=b.split`:`;return +c[0]-d[0]-d[1]>c[1]?1:0+":"+(+c[1]+60-d[1])%60}

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

ব্যাখ্যা:

কোলনের ইনপুটগুলি বিভক্ত করে

c=a.split`:`,d=b.split`:`;

স্ট্রিংকে ইনটেমে রূপান্তর করে

+c[0]

মিনিটের মান পায়

+c[0]-d[0]-d[1]>c[1]?1:0

দ্বিতীয় মান পায়

(+c[1]+60-d[1])%60

স্ট্রিং মিনিটস: সেকেন্ডে ফেরত দেয়

return +c[0]-d[0]-d[1]>c[1]?1:0+":"+(+c[1]+60-d[1])%60
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.