কিছু সময় পরে


15

এই চ্যালেঞ্জের জন্য, আমরা নিম্নলিখিত ফর্মটিতে সময়টি লিখছি: hh:mm:ss

কিছু উদাহরণ:

12:34:08

06:05:30

23:59:00

চ্যালেঞ্জটি হ'ল সময় শুরু হওয়ার সাথে সাথে সময় , মিনিট এবং সেকেন্ডের বেশ কয়েক ঘন্টা কেটে যাওয়ার পরে সময় আউটপুট দেওয়া 00:00:00। আপনি এটি যে টাইমার থেকে শুরু করেছেন তার সাথে এটি তুলনা করতে পারেন 00:00:00

এখানে ইনপুটগুলির একটি উদাহরণ রয়েছে ( এসটিডিআইএন ব্যবহার করে ) এবং ফলাফলগুলি:

Input: 1h20m5s
Output: 01:20:05

Input: 0h100m0s
Output: 01:40:00

24 ঘন্টা পরে, টাইমার নিজেকে পুনরায় সেট করে:

Input: 25h0m0s
Output: 01:00:00

: ইনপুটের ফর্ম সবসময় একই XhYmZsসঙ্গে Xঘন্টা, Yমিনিট এবং Z(যে অনুমান সেকেন্ড X, Yএবং Zপুরো পূর্ণসংখ্যার কম 100000 এবং কখনও নেতিবাচক হয়)

এটি , তাই কমপক্ষে পরিমাণ বাইটস এই চ্যালেঞ্জটি জয় করে


3
আমরা কি ফাংশন লিখতে পারি?
LegionMammal978

1
@ লিজিওনম্যামাল978, হ্যাঁ
আদনান

"ধরুন যে এক্স, ওয়াই এবং জেড পুরো 99999 এর চেয়ে কম পূর্ণসংখ্যা এবং কখনই নেতিবাচক নয়" 99999h99999m99999s একটি বৈধ ইনপুট?
ক্রંચার

@ ক্রাঙ্কার, হ্যাঁ, এটি একটি বৈধ ইনপুট
আদনান

99999 99999 এর চেয়ে কম নয়
লুক

উত্তর:



4

রুবি - 131 115 107 97 84 বাইট

আমি এখনও এটি গল্ফ করছি।

h,m,s=gets.split(/\w/).map &:to_i;$><<"#{(h+m/60+s/3600)%24}:#{(m+s/60)%60}:#{s%60}"

@ ডুরকনবকে / \ ডাব্লু / / হে / এম | এম | এস / এর ইনসিডের জন্য ধন্যবাদ


আপনি একটি রেজেক্সে বিভক্ত করতে পারেন: gets.tr('ms',?h).split(?h)-> gets.split(/\w/)
ডুরকনব

@ ডুরকনব আমি এটিকে পুনরায় রেক্সেক্সগুলিতে লিখেছি কিন্তু আপনার সংক্ষিপ্ততর। ধন্যবাদ!
পিটার লেনকফি

1
আমি প্রতিযোগিতা করার চেষ্টা ছেড়ে দিতে। মামা ঠিক খুব ভার্জোজ।
LegionMammal978

3
@ লিজিওনম্যামাল978 কখনই হাল ছাড়বেন না;)
পিটার লেনকিফি

2

গণিত, 133 116 112 111 বাইট

IntegerString[(f=FromDigits)[f/@StringSplit[#,_?LetterQ],60]~Mod~86400~IntegerDigits~60,10,2]~StringRiffle~":"&

2

পাইথন 2, 138 126 বাইট

এখন আমি রেগেক্স ব্যবহার করছি, এখনও বেশ দীর্ঘ যদিও ..

import re
a=input();b=map(int,re.split('h|m|s',a)[:-1])
s=b[0]*3600+b[1]*60+b[2]
print(':%02d'*3)[1:]%(s/3600%24,s/60%60,s%60)

ইনপুটটি উদ্ধৃতিতে হওয়া উচিত।


2

সি 149 112 বাইট

এটি এখানে পরীক্ষা করুন

main(h,m,s){scanf("%dh%dm%ds",&h,&m,&s);s+=h*3600+m*60;h=s/3600;m=s/60;printf("%02d:%02d:%02d",h%24,m%60,s%60);}

এটি থেকে অনেকটা মুক্তি পাওয়ার জন্য @ ডেনিসকে কৃতিত্ব।


2
main(h,m,s){scanf("%dh%dm%ds",&h,&m,&s);s+=h*3600+m*60;m=s/60;h=m/60;printf("%02d:%02d:%02d",h%24,m%60,s%60);}(১১০ বাইট, এসটিডিআইএন থেকে পড়ে)
ডেনিস

@ ডেনিস ধন্যবাদ, ভুলে গেছেন এটি কমান্ড লাইনের যুক্তি হতে হবে না। একমাত্র জিনিস যা আমার পক্ষে কাজ করে নি তা হ'ল ফাংশন আর্গুমেন্ট তালিকার ভেরিয়েবলগুলির ঘোষণা; আমি এটি দিয়ে সংকলক ত্রুটি পেয়েছিলাম।
ক্রিস লুনাম

h,m,s;main()আরও বহনযোগ্য হতে হবে। main(h,m,s)জিসিসির সাথে কাজ করে ( লিঙ্ক )
ডেনিস

ঠিক আছে ধন্যবাদ. এটিকে 112
নামিয়েছে

m=s/60;h=m/60;? এর পরে আপনি এ s+=থেকেও মুক্তি পেতে পারেন ।
ugoren

2

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

যেখানে এক্স ইনপুট

x=x.split(/[hms]/).map(Number);for(z=2;z--;)x[z+1]-60&&(x[z]+=~~(x[z+1]/60));y=x[0]%24+":"+x[1]%60+":"+x[2]%60

আমি মনে করি না এটি সবচেয়ে কার্যকর উপায়

// How it works:
x=x.split(/[hms]/).map(Number);                // splitting the string into an array of numbers
for(z=2;z--;)x[z+1]-60&&(x[z]+=~~(x[z+1]/60)); // shifting excess of seconds to minutes, and then minutes to hours
y=x[0]%24+":"+x[1]%60+":"+x[2]%60              // putting them all together

2

পিএইচপি, 80 88 93 বাইট

<?=!$s=split(~¤—’¢,fgets(STDIN)),date(~·Å–ÅŒ,$s[0]*3600+$s[1]*60+$s[2]-date(Z));

(আইএসও -8859-1 হিসাবে সংরক্ষিত)

অবহেলিত splitফাংশনের কারণে কেবল পিএইচপি 5 এ কাজ করে। ধরে নিন যে নোটিশগুলি দেখানো হয়নি।

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

  • ¤—’¢হয় "[hm]"বিপর্যস্ত ও একটি বৈধ ধ্রুবক নাম, পিএইচপি স্ট্রিং হিসেবে অনির্ধারিত ধ্রুবক ব্যবহার (উদ্ধৃতি চিহ্ন জন্য একটি অক্ষর সংরক্ষণ)
  • ·Å–ÅŒ একই জন্য "H:i:s"
  • সবকিছু হ'ল একক শর্ট হ্যান্ড ইকো স্টেটমেন্ট। <?=x,yএক্স এবং ওয়াই আউটপুট ব্যবহার করে !, $sঅ্যাসাইনমেন্টের ফলাফলটি বুলিয়ান এবং অবহেলায় রূপান্তরিত হয়, তারপরে স্ট্রিংকে আউটপুটে রূপান্তরিত হয়।(string)false === ''
  • split("[hm]", "XhYmZs")স্ট্রিং এ বিভক্ত [X,Y,Zs]। তারপরে, 3600*X+60*Y+Zsসেকেন্ডের সংখ্যা। পিএইচপি Zsহিসাবে পূর্ণসংখ্যায় রূপান্তরিতZ
  • আমরা টাইমজোনটিকে অফসেটটি বিয়োগ করে থাকি, ফলাফলটিকে date(Z)টাইমস্ট্যাম্প হিসাবে ব্যবহার করি এবং এর সময়ের অংশটিকে "ঘন্টা: মিনিট: সেকেন্ড" হিসাবে মুদ্রণ করি। UTC- এ (অফসেট 0), টাইমস্ট্যাম্প 0হয় 1970/01/01 00:00:00। টাইমজোন অফসেটটি বিয়োগ করা প্রকৃতপক্ষে ব্যবহৃত সময় অঞ্চল পরিবর্তন না করে তারিখটিকে ইউটিসি হিসাবে স্বাভাবিক করে তোলে (এটি সময়সীমা নির্ধারণের জন্য 8 টি বাইট সংরক্ষণ করেছে)।
  • সুবিধাজনকভাবে, 25 ঘন্টা ফলাফল 01:00:00 (পরের দিন) এ হবে।

1

অটোআইটি, 208 বাইট

Func _($0)
$1=StringRegExp($0,"[0-9]+",3)
For $2=2 To 1 Step -1
If $1[$2]>59 Then
$1[$2]=Mod($1[$2],59)-1
$1[$2-1]+=1
EndIf
Next
Return StringFormat("%02u:%02u:%02u",$1[0]-($1[0]>23?24:0),$1[1],$1[2])
EndFunc

অনেক দেরি. টেস্ট:

ConsoleWrite(_("1h20m5s") & @LF)
ConsoleWrite(_("0h100m0s") & @LF)
ConsoleWrite(_("25h0m0s") & @LF)


1

পার্ল 5, 84 (83 বাইট +1)

সেকেন্ড বা মিনিটের ওভারফ্লো ব্যবহার করে।

($h,$m,$s)=split/\D/;$h+=($m+=$s/60)/60;printf"%0.2d:%0.2d:%0.2d",$h%24,$m%60,$s%60

পরীক্ষা

$ echo 35:124:224s |perl -n 61736-time-after-some-time.pl
13:07:44

1

ভিবিএ ( 150 149 বাইট)

Function t(s)
x = Split(Replace(Replace(Replace(s, "s", ""), "m", " "), "h", " "))
t = Format(TimeSerial(x(0), x(1), x(2)), "HH:MM:SS")
End Function

1
ভাল লাগছে। ভিবিএ এই কাজের জন্য দুর্দান্ত বলে মনে হচ্ছে। আপনি যদি msgboxআউটপুট হিসাবে ব্যবহার করেন তবে আপনি একটিতে পরিবর্তন করতে পারেন Subএবং 2 বাইট সংরক্ষণ করতে পারেন । এছাড়াও আপনি গলফ প্রায় দূরে সব অপ্রয়োজনীয় সাদা স্থান করতে =এবং প্রতিটি পর ,এটা কোপ নিচে প্রায় 134.
JimmyJazzx

1

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

x=>([h,m,s]=x.match(/\d+/g),[(+h+m/60|0)%24,(+m+s/60|0)%60,s%=60].map(a=>(a>9?'':'0')+a).join`:`)

আপনি কি এটিকে কোনও ফিজলিতে পরিণত করতে পারেন? আমার পক্ষে কাজ করছে বলে মনে হচ্ছে না। আমি পেয়েছিInvalid left-hand side in assignment
গাস্ট ভ্যান ডি ওয়াল

@ গুস্তভান্ডেওয়াল এখন পর্যন্ত ফায়ারফক্স হ'ল একমাত্র ব্রাউজার যা ধ্বংসাত্মক কার্যকে সমর্থন করে , তাই কোনও ফলস দুর্ভাগ্যক্রমে সাহায্য করবে না।
Mwr247

1

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

$a=$args-split'[hms]';"{0:HH:mm:ss}"-f(date 0).AddSeconds(3600*$a[0]+60*$a[1]+$a[2])

রেজেক্সের উপর ভিত্তি করে কমান্ড-লাইন [hms]ইনপুটটিকে স্ট্রিংগুলির একটি অ্যারেতে বিভক্ত করে । একটি / কে / এ -তে .AddSeconds()(ঘন্টা * 3600, মিনিট * 60 এবং সেকেন্ড) যুক্ত করতে ভার্বোজ অন্তর্নির্মিত ফাংশন ব্যবহার করে , তারপরে বিন্যাসে ফিড দেয়(date 0)Monday, January 1, 0001, 12:00:00 AM-fHH:mm:ss যা এটি স্বয়ংক্রিয়ভাবে 24 ঘন্টা ঘড়ির বিন্যাসে রূপান্তরিত করে আউটপুট দেয়।

উদাহরণ:

PS C:\Tools\Scripts\golfing> .\time-after-some-time.ps1 25h100m0s
02:40:00



1

পাইথন 3, 158

import re
e=input()
b=[];p=0
for s in re.split('\D',e)[:3][::-1]:c,a=divmod(int(s),60);b+=[a+p];p=c
b[2]=(b[2]+p)%24;f=':%02d'*3;print(f[1:]%(b[2],b[1],b[0]))

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

import re
def timer(elapsed):
    base=[]
    previous_carry=0
    for section in re.split('\D+',elapsed)[:3][::-1]:
        carry,amount=divmod(int(section),60)
        base+=[amount+previous_carry]
        previous_carry=carry
    base[2]=(base[2]+previous_carry)%24
    format_str = ':%02d'*3
    return format_str[1:]%(base[2],base[1],base[0])


1

GNU সেড + তারিখ, 51 বাইট

( -rপতাকার জন্য +1 বাইট সহ )

#!/bin/sed -rf
s/(.*h)(.*m)(.*s)/date -d"0:0 \1our\2in\3ec" +%T/e

এটি কেবলমাত্র (আজ) dateঘন্টার মধ্যে মিনিট এবং সেকেন্ডের নির্দিষ্ট সংখ্যা যুক্ত করতে 00:00:00এবং সময়ের অংশটি প্রদর্শন করে। TZ=UTCস্থানীয় সময় পরিবর্তনের (যেমন দিবালোকের সঞ্চয়) চারদিকে প্রোগ্রাম সেট করা বা চালানো এড়াতে প্রস্তাবিত ।

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