कुछ समय बाद का समय


15

इस चुनौती के लिए, हम निम्नलिखित रूप में समय लिख रहे हैं: hh:mm:ss

कुछ उदाहरण:

12:34:08

06:05:30

23:59:00

चुनौती समय शुरू करने के साथ ही घंटों , मिनटों और सेकंडों की मात्रा के बाद के समय का उत्पादन करने की है 00:00:00। आप इसकी तुलना उस टाइमर से कर सकते हैं जो शुरू हुआ था 00:00:00

यहां इनपुट्स ( STDIN का उपयोग करके ) और आउटपुट का एक उदाहरण दिया गया है :

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
क्या हम फ़ंक्शन लिख सकते हैं?
१५:३al पर लीजियनममाल

1
@ LegionMammal978, हाँ
अदनान

"मान लें कि X, Y और Z पूरे पूर्णांक 99999 से कम हैं और कभी नकारात्मक नहीं हैं" 99999h99999m99999 एक वैध इनपुट है?
क्रंचर

@ क्रंचर, हां, यह एक वैध इनपुट है
अदनान

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}"

@Doorknob for / \ w / inshead of / h | m | s / के लिए धन्यवाद


आप एक regex पर विभाजित कर सकते हैं: gets.tr('ms',?h).split(?h)-> gets.split(/\w/)
दरवाज़े

@Doorknob मैंने अभी इसे फिर से लिखने के लिए लिखा है लेकिन आपका छोटा है। धन्यवाद!
पीटर लेनकेफी

1
मैं प्रतिस्पर्धा करने की कोशिश कर रहा हूं। मम्मा सिर्फ क्रिया है।
लीजनमोनमाल 978

3
@ LegionMammal978 कभी हार न मानें;)
पीटर लेनकेफी

2

गणितज्ञ, १३३ ११६ ११२ १११ बाइट्स

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

2

अजगर 2, 138 126 बाइट्स

अब मैं regex का उपयोग कर रहा हूं, फिर भी काफी लंबा है ..

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);}(110 बाइट्स, स्टैडिन से पढ़ता है)
डेनिस

@ डेनिस धन्यवाद, भूल गए कि यह एक कमांड लाइन तर्क नहीं था। केवल एक चीज जो मेरे लिए काम नहीं कर रही थी, वह फ़ंक्शन तर्क सूची में चर की घोषणा थी; मुझे इसके साथ कंपाइलर एरर मिल रहे थे।
क्रिस लूनम

h,m,s;main()अधिक पोर्टेबल होना चाहिए। main(h,m,s)जीसीसी ( लिंक ) के साथ काम करता है
डेनिस

ठीक है धन्यवाद। इसे 112 तक ले गए।
क्रिस लूनम

m=s/60;h=m/60;? इसके बाद आप s+=भी छुटकारा पा सकते हैं ।
ugoren

2

जावास्क्रिप्ट 110 बाइट्स

जहां x इनपुट है

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

PHP, 80० 88 93 बाइट्स

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

(ISO-8859-1 के रूप में सहेजा गया)

पदावनत splitसमारोह के कारण केवल PHP 5 पर काम करता है। मान लिया जाता है कि नोटिस नहीं दिखाए गए हैं।

यह काम किस प्रकार करता है:

  • ¤—’¢है "[hm]"उल्टे और एक मान्य निरंतर नाम, पीएचपी स्ट्रिंग के रूप में अपरिभाषित स्थिरांक का उपयोग करता है (उद्धरण चिह्नों के लिए एक चरित्र बचाता है)
  • ·Å–ÅŒ के लिए समान है "H:i:s"
  • सब कुछ एक ही हाथ से दिया गया एको स्टेटमेंट है। <?=x,yआउटपुट x और y। उपयोग करने पर !, $sअसाइनमेंट का परिणाम बूलियन और नेगेटिव में बदल जाता है, फिर स्ट्रिंग टू आउटपुट में परिवर्तित हो जाता है।(string)false === ''
  • split("[hm]", "XhYmZs")स्ट्रिंग को विभाजित करता है [X,Y,Zs]। फिर, 3600*X+60*Y+Zsसेकंड की संख्या है। PHP Zsपूर्णांक के रूप में कनवर्ट करता हैZ
  • हम टाइमज़ोन ऑफसेट को प्रतिस्थापित करते हैं date(Z), इस परिणाम को टाइमस्टैम्प के रूप में उपयोग करते हैं और इसके समय भाग को "घंटे: मिनट: सेकंड" के रूप में प्रिंट करते हैं। यूटीसी (ऑफसेट 0) में टाइमस्टैम्प 0है 1970/01/01 00:00:00। टाइमजोन की भरपाई करने की तारीख UTC के रूप में सामान्य रूप से उपयोग किए जाने वाले टाइमज़ोन को बदलने के बिना दिनांक को सामान्य कर देती है (यह टाइमज़ोन को सेट करने के लिए 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

VBA ( 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
अच्छा लग रहा है। इस कार्य के लिए VBA बहुत अच्छा लगता है। यदि आप msgboxआउटपुट के रूप में उपयोग करते हैं तो आप बदल सकते हैं Subऔर 2 बाइट्स बचा सकते हैं । तुम भी चारों ओर सभी अनावश्यक सफेद स्थान को दूर कर सकते हैं =और प्रत्येक के बाद ,इसे नीचे दस्तक करने के लिए 134 के आसपास।
जिमी जैज़क्स

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
Gust van de Wal

@GustvandeWal अब तक फ़ायरफ़ॉक्स विनाशकारी असाइनमेंट का समर्थन करने वाला एकमात्र ब्राउज़र है , इसलिए एक बेईमानी दुर्भाग्य से मदद नहीं करेगी।
मौर्य 247

1

पॉवरशेल, 84 बाइट्स

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

[hms]रेगेक्स के आधार पर कमांड-लाइन इनपुट को स्ट्रिंग्स के एक सरणी में विभाजित करता है । / K / a के .AddSeconds()लिए (घंटे * 3600, मिनट * 60, और सेकंड) जोड़ने के लिए निर्मित फ़ंक्शन का उपयोग करता (date 0)है Monday, January 1, 0001, 12:00:00 AM, फिर उसे -fस्वरूपण के साथ फीड करता हैHH:mm:ss जो इसे स्वचालित रूप से 24-घंटे घड़ी प्रारूप में बदल देगा और इसे आउटपुट करेगा।

उदाहरण:

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


1

VB.NET (107 बाइट्स)

कोड गोल्फ के लिए पहला सबमिशन तो मैं कैरेक्टर काउंट => बाइट काउंट का अनुमान लगा रहा हूं?

MsgBox(TimeSpan.Zero.Add(TimeSpan.Parse(Regex.Replace(InputBox("XhYmZs"),"[hm]",":").Trim("s"))).ToString)


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]))

Ungolfed संस्करण:

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स्थानीय-समय परिवर्तन (जैसे दिन के उजाले बचत) के आसपास कार्यक्रम को चलाने या उससे बचने के लिए अनुशंसित ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.