12 घंटे से 24 घंटे का समय कनवर्टर


27

आश्चर्यजनक रूप से, यह सरल कार्य पहले से मौजूद नहीं है, इसलिए ...

आपका कार्य एक प्रोग्राम लिखना है जो इनपुट के रूप में 12 घंटे का समय लेता है, और इसे "सैन्य समय", या 24-घंटे के समय के प्रारूप में परिवर्तित करता है।

इनपुट फॉर्म में होगा:

HH:MM am/pm

हालांकि मामूली बदलाव की अनुमति है:

  • बाकी समय से am / pm को अलग करने वाला स्थान वैकल्पिक है।

  • अंतिम भाग या तो "am" / "pm" हो सकता है, या "a" / "p"।

  • कोई भी पूंजीकरण ठीक है।

आउटपुट इनपुट समय होगा, जो 24-घंटे के प्रारूप में बदल जाएगा। यह एक संख्या, या एक स्ट्रिंग हो सकता है।

इनपुट और आउटपुट दोनों के लिए:

  • पहली जगह में 0s वैकल्पिक हैं। अंतिम 3 स्थानों में 0 अनिवार्य हैं।

  • परिसीमन घंटों और मिनटों को अलग करने वाला ":", "" (एक स्थान) या कुछ भी नहीं हो सकता है।

अन्य नोट:

  • आधी रात को 0000, या 2400 के रूप में व्यक्त किया जा सकता है।

  • मध्यरात्रि को "हूँ" माना जाएगा, जबकि दोपहर को "रात्रि" माना जाएगा।

आपका कार्यक्रम एक फ़ंक्शन या पूर्ण कार्यक्रम हो सकता है, और या तो परिणाम वापस करना चाहिए, या इसे स्टडआउट में आउटपुट करना चाहिए। ट्रेलिंग व्हाट्सएप ठीक है।

उदाहरण (आपको हर प्रारूप का समर्थन करने की आवश्यकता नहीं है):

12:00am -> 0000
1200 pm -> 1200
1234Am  -> 00:34
134a    -> 134
01:34PM -> 13 34
1234pm  -> 1234  

यह कोड गोल्फ है, इसलिए सबसे छोटी संख्या बाइट्स जीतती है। चूंकि यह बिल्ट-इन का उपयोग कर हल करने के लिए बहुत तुच्छ है, इसलिए कुछ कोड को देखना अच्छा होगा जो मैन्युअल रूप से इसे हल करता है (लेकिन बिल्ट-इन का उपयोग ठीक है)।

बस स्पष्ट करने के लिए, आपको हर संभव प्रारूप का समर्थन करने की आवश्यकता नहीं है । केवल एक इनपुट और एक आउटपुट आउटपुट का समर्थन करना (आपकी पसंद का) ठीक है। लेकिन मैं ऊपर बताए गए प्रारूप को सीमित करना चाहूंगा (जो पहले से ही काफी स्वतंत्र है)। {1134,'pm'}, उदाहरण के लिए, अस्वीकार्य होगा।


हमें किन स्वरूपों का समर्थन करने की आवश्यकता है? बस एस?
Redstarcoder

@redstarcoder हाँ। कोई भी प्रारूप जो ऊपर की आवश्यकताओं के अनुरूप है, ठीक है, लेकिन जैसा कि उदाहरण मामलों के ऊपर उल्लेख किया गया है, आपको हर प्रारूप का समर्थन करने की आवश्यकता नहीं है। इनपुट का एकल प्रारूप और आउटपुट का एकल प्रारूप ठीक हैं।
कार्निजनेट

क्या हमारे स्वरूपों को अग्रणी शून्य की आवश्यकता है ? उदाहरण के लिए, 01:54pmकाम करेगा, लेकिन 1:54pmनहीं होगा?
20:

हाँ। आप आवश्यक इनपुट प्रारूप चुन सकते हैं।
कार्निजेनटाइ

क्या हमें अपने इनपुट और आउटपुट में सेकंड शामिल करने की अनुमति है?
12Me21

जवाबों:


8

वी , 21 17 बाइट्स

धन्यवाद @DJMcMayhem 4 बाइट्स के लिए!

í12:/0:
çp/12
$x

इसे ऑनलाइन आज़माएं! यह वह प्रारूप लेता है HH:MMxजहां या xतो है , और प्रारूप में इसे लौटाता हैapHH:MM

Hexdump:

00000000: ed31 323a 2f30 3a0a e770 2f31 3201 2478  .12:/0:..p/12.$x
00000010: 0ae7 612f 2478                           ..a/$x

स्पष्टीकरण:

í12:/0:   | find and replace 12: with 0: (to avoid replacing HH:12)
ç         | on every line
 p/       | that contains a p
   12^A   | increment 12 times (the first number, hours)
$x        | delete the character at the end of the line

इनपुट हमेशा [1-12]सही रहेगा ? उस मामले में, मुझे लगता है कि तुम कर सकते हो ó^12/0के बजायcw^R=^R"%12
DJMcMayhem

1
इसके अलावा, आप "ग्लोबल कमांड" का उपयोग एक रेक्सक्स से मेल खाने वाली लाइनों के लिए कमांड लागू करने के लिए कर सकते हैं, जो एक मैक्रो को तोड़ने से कम है। çp/12^Aजो के बराबर है :g/p/norm 12<C-a>vim में
DJMcMayhem

मैंने इसे स्वीकार कर लिया क्योंकि यह सबसे कम स्कोरिंग उत्तर था जिसने यह स्पष्ट कर दिया कि यह बिल्ट इन (भले ही मैंने उन्हें इस्तेमाल करने से मना नहीं किया था) का उपयोग नहीं किया गया था। अगर किसी को इस पसंद के साथ कोई समस्या है, तो मैं निष्पक्ष होने के लिए अपना जवाब बदल सकता हूं। मुझे लगता है कि यह उत्तर सबसे योग्य है।
कार्निजेन्ट

12

MATL , 4 बाइट्स

15XO

इसे ऑनलाइन आज़माएं!

व्याख्या

अंतर्निहित फ़ंक्शन: इनपुट प्रारूप के स्वचालित पता लगाने और आउटपुट प्रारूप के साथ दिनांक स्ट्रिंग रूपांतरण 15, जो मेल खाती है 'HH:MM'। यह @ StewieGriffin के ऑक्टेव उत्तर के बराबर है ।


10

ऑक्टेव, 21 17 बाइट्स

लुइस मेंडो के लिए धन्यवाद 4 बाइट्स बचाए। मैं प्रारूप संख्या 15 के स्थान पर निर्दिष्ट कर सकता हूं 'HHMM'

@(c)datestr(c,15)

स्पष्टीकरण:

यह एक अनाम फ़ंक्शन हैc जो प्रारूप पर इनपुट के रूप में एक स्ट्रिंग लेता है '11:34 AM':। datestrप्रारूप को मानक तिथि स्वरूपों में से एक के रूप में स्वचालित रूप से पहचानता है , और इसे निर्दिष्ट प्रारूप संख्या 15 में आउटपुट करता है, जो है HH:MM

चूंकि निर्दिष्ट आउटपुट प्रारूप में ऑक्टेव नहीं है AMया PMस्वचालित रूप से इसे उस समय में कनवर्ट करता है जिसे आप सैन्य समय के रूप में संदर्भित करते हैं।

इसे ऑनलाइन आज़माएं।


एक संस्करण datestrजो 35 बाइट्स का उपयोग नहीं कर रहा है

@(c)[c(1:4)+[1,2,0,0]*(c(5)>97),'']

स्पष्टीकरण:

cप्रारूप पर एक इनपुट स्ट्रिंग लेता है 1134am

@(c)                              % Anonymous function
[c(1:4)                           % First 4 elements of the string
       +[1,2,0,0]                 % Add 1 and 2 to the first to the ASCII-value of the 
                                    first two characters
                 *)c(5)>97)       % if the fifth element is larger than 97 
                                    (the ASCII code for `a`).
                            ,'']  % Implicitly convert to string

या, 37 बाइट्स के लिए एक अलग दृष्टिकोण:

@(c)[c(1:4)+('1200'-48)*(c(5)>97),'']

7

पॉवरशेल , 23 20 19 बाइट्स

date "$args"-f HHmm

इसे ऑनलाइन आज़माएं!

(यदि आप विंडोज पर हैं, तो आप get-19 बाइट्स तक नीचे जाने के लिए , छोड़ सकते हैं , TIO पर, इसे स्पष्ट रूप से पूर्ण Get-Dateनाम की आवश्यकता होती है ।)

इनपुट को एक स्ट्रिंग के रूप में लेता है , जो $args[0]कि Get-Datecmdlet के इनपुट के रूप में उपयोग करता है , जो इसे एक .NET datetimeऑब्जेक्ट में पार्स करता है । इसे सैन्य समय में बदलने -fके HHmmलिए ormat पैरामीटर के साथ पास किया गया है (पूंजी HH24 घंटे का समय निर्दिष्ट करती है)। आउटपुट निहित है।

पार्सिंग इंजन बहुत मजबूत है, इसलिए अतिरिक्त इनपुट 12amया 12:00amजैसे की अनुमति है। TIO पर इनपुट के साथ चारों ओर खेलें और देखें कि और क्या काम करता है।

( @Admalledd की बदौलत 3 बाइट्स बचाए ... @briantist की बदौलत एक और बाइट बचाई )


के बीच की जगह को हटाने में सक्षम होना चाहिए , $args[0]और -fसाथ ही प्रारूप के आसपास के एकल उद्धरणों को हटा दें date $args[0]-f HHmm:। कम से कम यह मेरे काम करने के तरीके पर काम करता है ...
सराहें

@admalledd ज़ोर से रोने के लिए, मैं हमेशा उन उद्धरणों को भूल जाता हूं। गंभीरता से, मुझे लगता है कि हर बार जब मैंने उपयोग किया Get-Dateहै -f, तो किसी ने मुझे याद दिलाया है कि आपको उद्धरण की आवश्यकता नहीं है। और अंतरिक्ष को हटाने के साथ अच्छी कॉल भी, क्योंकि पार्सर ]एक टोकन के अंत के रूप में व्यवहार करता है । धन्यवाद!
AdmBorkBork

5

पायथन 2, 44 बाइट्स

lambda s:`int(s[:2])%12+12*("p"in s)`+s[3:5]

इनपुट प्रारूप: 01:23amवैकल्पिक mऔर रिक्त स्थान मिनट के बाद
आउटपुट स्वरूप:123


5

पायथ, 21 20 बाइट्स

Aczd++*12}\pH%sG12PH

फॉर्म का इनपुट 01 23a"01:23 am" के रूप में लेता है । प्रारंभिक 0 वैकल्पिक है।
आउटपुट फॉर्म का है 123, जिसमें शुरुआती 0 छोड़ा गया है।

छद्मकोश में:

                         z = input()
A                        G, H =
 czd                         z.split(" ")       # splits into the form ["1","23p"]
                         (
     +*12}\pH            12*('p' in H) +        # add 12 if 'p' is in the string
             %sG12         int(G) % 12
    +             PH     ) + H[:-1]             # prepend hour to minutes, with a/p removed

इसे ऑनलाइन आज़माएं!


4

PHP, 35 32 बाइट्स

इनपुट फॉर्मेट: केस असंवेदनशील, कोलन और m, आउटपुट फॉर्मेट की आवश्यकता होती है hhmm। निर्मित इन्स का उपयोग करता है:

<?=date(Hi,strtotime($argv[1]));

पहले कमांड लाइन तर्क से इनपुट लेता है।

PHP, 45 बाइट्स, कोई बिल्ट-इन नहीं

इनपुट प्रारूप (h)h:mm a(m)लोअरकेस, आउटपुट स्वरूप (h)hmm

<?=($s=$argv[1])%12+12*($s[6]>a).$s[3].$s[4];

4
क्यों होता है पतन?
टाइटस

मैं सिर्फ अटकलें लगा रहा हूं लेकिन हो सकता है कि आपने PHP का इस्तेमाल किया हो और डाउनवॉटर PHP को पसंद नहीं करता हो? : पी
बैश ०

3

जावास्क्रिप्ट (ईएस 6), 40 बाइट्स

a=>(new Date('1/1/1/'+a)+a).slice(16,21)

इनपुट को स्वरूपित किया जाना चाहिए: 12:32 am


3

GNU कोरुटिल्स ( 18 16 बाइट्स)

एक शेल स्क्रिप्ट से:

इनपुट में व्हॉट्सएप स्वीकार नहीं करता है

किस बिंदु पर, $ 1 का उपयोग कर सकते हैं और अतिरिक्त आर्गन्स को अनदेखा कर सकते हैं।

date -d$1 +%H%M

⇒ echo 'date -d$1 +%H%M' > time24
⇒ sh time24 1:45pm
1345
⇒ sh time24 1:45 pm
0145 # Wrong answer, “pm” ignored because of space

मूल

इनपुट में व्हाट्सएप की अनुमति देने के लिए,

date -d"$@" +%H%M

3

सी #, 46 बाइट्स

s=>System.DateTime.Parse(s).ToString("HH:mm");

जैसे इनपुट में स्ट्रिंग्स ली जाती हैं 12:00 AM

एक ही काम करना, लेकिन डिफ़ॉल्ट कॉल से आउटपुट पर एग्रीकल्चर करना ToString(कल्चर को मान लेना en-GB) 3 बाइट्स 49 बाइट्स के लिए लंबा है:

s=>(System.DateTime.Parse(s)+"").Substring(11,5);

3

date, 0 + 8 = 8 बाइट्स

नौकरी के लिए सही उपकरण का उपयोग करने के विषय पर ...

कमांड लाइन तर्क के रूप में इनपुट लेता है। +%H%M -d(8 बाइट पेनल्टी) के साथ चलाएं । यहां कोई वास्तविक कार्यक्रम नहीं है; संपूर्ण कार्य कमांड-लाइन तर्कों द्वारा किया जाता है। (यह कमांड लाइन तर्क के लिए जुर्माना क्यों है का एक बहुत अच्छा प्रदर्शन है !)

उदाहरण:

$ date +%H%M -d "12:05 am"
0005

3

जावा 7, 138 106 105 104 बाइट्स

String a(String a){return new java.text.SimpleDateFormat("Hmm").format(new java.util.Date("Ja1,0,"+a));}

इसे ऑनलाइन आज़माएं!

इनपुट कोलोन सीमांकित है और समय और सुबह / दोपहर के बीच एक स्थान है। आउटपुट कोलोन सीमांकित नहीं है।

केविन क्रूज़सेन के लिए धन्यवाद


यह जावा के लिए जितना छोटा हो, लेकिन इसका 20% कोड पैकेज क्वालिफायर होता है।
मैजिक ऑक्टोपस Urn

नियम यह " के लिए दोनों इनपुट और आउटपुट: -। पहली जगह में 0s वैकल्पिक हैं पिछले 3 स्थानों में 0 अनिवार्य हैं। " है, जो साधन आप बदल सकते हैं HHmmकरने के लिए Hmm
केविन क्रूज़सेन

@ केविनक्रूजसेन का अच्छा कैच!
प्रहार

2

जाप , 14 बाइट्स

Ð"1/"+U s sG21

इसे ऑनलाइन आज़माएं!

यह केवल क्रोम पर काम करता है। यहाँ एक संस्करण है जो सभी ब्राउज़रों में काम करता है:

Ð"1/"³+U s sG21

मदद के लिए फिर से ETHproductions के लिए धन्यवाद!


2

पर्ल, 45 28 37 बाइट्स

28 37 बाइट्स

(c / o @ दादा)

(36 बाइट्स कोड, कंपाइलर -pस्विच के लिए 1 बाइट )

0145pmप्रकार प्रारूप स्वीकार करते हैं , am / pm या a / p के साथ। आवश्यक इनपुट पर अग्रणी शून्य।

s/(..)(.)$//;$_=$_%12+12*(p eq$2).$1

परीक्षा:

⇒ echo 0145pm | perl -p time24
1345
⇒ echo 0245pm | perl -p time24
1445
⇒ echo 1245pm | perl -p time24
1245
⇒ echo 1245am | perl -p time24
045

मेरा मूल उत्तर

(यह भी धीरे से संशोधित)

(39 बाइट्स कोड, कंपाइलर -pस्विच के लिए 1 बाइट ।)

केवल 0145p या 0145a जैसे फ़ॉर्म को स्वीकार करता है, और कोई अन्य नहीं, और perl -pकाम करने के लिए मोड की आवश्यकता होती है।

s/(..)(..)([ap])/$1%12+12*($3eq"p").$2/e

परीक्षा:

⇒ echo 0145p | perl -p time24
1345
⇒ echo 1222a | perl -p time24
022
⇒ echo 1234p | perl -p time24
1234

PPCG पर आपका स्वागत है। अच्छा पहला जवाब। आप स्विच का उपयोग कर सकते हैं, लेकिन वे आपके बाइटकाउंट में गणना करते हैं (जैसा कि यहां बताया गया है )। -pयदि आप दोहरे उद्धरण चिह्नों के लिए एकल उद्धरण बदलते हैं, तो आपके मामले में, यह +1 बाइट होगा (क्योंकि केवल आवश्यक है)।
दादा

धन्यवाद। उस FAQ को नहीं पा सकते हैं, आश्चर्य है कि क्या स्टैक एक्सचेंज टीम उत्तर पृष्ठ या किसी चीज़ पर इसे पिन कर सकती है?
BRPocock

ठीक है, मैं 4 श्रृंखला के बाद से पेरलिंग रहा हूं और इससे मेरे सिर में चोट लगी है, आपको श्रेय लेना चाहिए और अपने आप को उस एक के साथ पोस्ट करना चाहिए। ☺
BRPocock

मुझे लगता है कि अब इसे कवर करना चाहिए?
BRPocock

मैंने एक गलती की, यह समाधान तब काम नहीं करेगा जब मिनट 0 और 9 के बीच हों। यह कोड तब काम करता है: s/(..)(.)$//;$_=$_%12+12*(p eq$2).$1(37 बाइट्स)। और वैसे, आपका पहला समाधान थोड़ा नीचे गोल्फ हो सकता है: s/(..)(..)([ap])/$1%12+12*($3eq"p").$2/e(40 बाइट्स)
दादा

2

कमोडोर 64 बुनियादी, चलने से पहले 301 बाइट्स, एक बार इस्तेमाल किए गए 321 बाइट्स

0 A$="12:34AM":A=VAL(LEFT$(A$,2)+MID$(A$,4,2)):ON-(RIGHT$(A$,2)="AM")+1GOSUB1,2:TI$=A$:PRINTTI$:END
1 ON-(A=>1200ANDA<=1259)GOTO3:A=A+1200:GOTO3
2 ON-(A=>1200ANDA<=1259)GOTO4:ON-(A<=959)GOTO7:RETURN
3 A$=RIGHT$(STR$(A)+"00",6):RETURN
4 A=A-1200:IFA=0THENA$="000000":RETURN
5 IFA<10THENA$="000"+RIGHT$(STR$(A),1)+"00":RETURN
6 A$="00"+RIGHT$(STR$(A),2)+"00":RETURN
7 A$="0"+RIGHT$(STR$(A),3)+"00":RETURN

वास्तविक कमोडोर 64 पर इसे दर्ज करने के लिए, आपको BASIC कीवर्ड संक्षिप्ताक्षर, जैसे LE [शिफ्ट] F के लिए LEFT$, M [शिफ्ट] I for MID$etc ... या CBM PRG STUDIO का उपयोग करने की आवश्यकता होगी।

TI$कमोडोर बुनियादी में चर HHMMSS के रूप में 24 घंटे की घड़ी प्रारूप में समय था जब मुद्रित प्रस्तुत करता है। लाइन नंबर के बाद स्पेस को बाहर निकालने से कोई मेमोरी नहीं बचती है क्योंकि कमोडोर बेसिक अपने आप वैसे भी स्पेस में आ जाता है जब आप प्रोग्राम को उसके अंदर दर्ज करते हैं।

जब किसी संख्या को स्ट्रिंग के साथ परिवर्तित किया जाता है STR$, तो Commodore BASIC अंतरिक्ष में जुड़ जाएगा (इसलिए यदि आपको PRINT Aसंख्या दिखाए जाने से पहले कोई स्थान दिखाई देगा), मैंने RIGHT$कमांड के साथ स्ट्रिंग रूपांतरण के लिए संख्या पर प्रारंभिक स्थान को हटा दिया है । आप कुछ बाइट्स को शून्य से संशोधित करके बचा सकते हैं:

0 A=VAL(LEFT$(A$,2)+MID$(A$,4,2)):ON-(RIGHT$(A$,2)="AM")+1GOSUB1,2:TI$=A$:PRINTTI$:END

इसलिए आपको कार्यक्रम चलाने से पहले अपना समय घोषित करने की आवश्यकता होगी, इस प्रकार है:

A$="01:22AM":GOTO 0

इसके बाद किसी भी समय, आप वर्तमान समय को देख सकते हैं:

? TI$

8-बिट मशीनों पर कोड गोल्फ खेलना वास्तव में दिलचस्प है क्योंकि यह दर्शाता है कि आधुनिक दिनों के प्रोग्रामर के लिए कितना कुछ किया जाता है, इसके बारे में सोचने की आवश्यकता के बिना भी।
शॉन बेयबर्स

2

जावा, 171 बाइट्स

enum t{;public static void main(String[] a){a=a[0].split("[: ]");System.out.format("%02d%02d",(Long.parseLong(a[0])+(a[2].charAt(0)=='p'?12:0))%24,Long.parseLong(a[1]));}}

इनपुट प्रारूप है HH:MM a/pऔर आउटपुट स्वरूप है HHMM। इस तथ्य का दुरुपयोग करते हुए कि मुख्य फ़ंक्शन में इनपुट को 3 खंडों में विभाजित करने के लिए तार की एक सरणी होती है: घंटे, मिनट और / पी सूचक।

उदाहरण इनपुट और आउटपुट:

Input: 01:02 a
Output: 0102

Input: 01:02 p
Output: 13:02

Input: 12:22 p
Output: 0022

Ungolfed संस्करण:

enum t {
    ;

    public static void main(String[] a) {
        a = a[0].split("[: ]");
        System.out.format("%02d%02d", (Long.parseLong(a[0]) + (a[2].charAt(0) == 'p' ? 12 : 0)) % 24, Long.parseLong(a[1]));
    }
}

मैं enumधारण करने के लिए इस्तेमाल नहीं देखा था main। नाइस :)
रॉबर्ट बेन्सन

आप मुख्य विधि हस्ताक्षर में एक स्थान छोड़ सकते हैं: सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] a) {...
स्थैतिकमध्य

2

REXX, 33 बाइट्स

arg h':'m a
say h+((a=pm)*12)':'m

उपयोग:

12:34 pm -> 24:34
1:34 pm -> 13:34
1:34 am -> 1:34
0:34 AM -> 0:34

यह कुछ बाइट्स द्वारा छोटा किया जा सकता है अगर सीमांकक का उपयोग नहीं किया गया था।


बृहदान्त्र सीमांकक वैकल्पिक है।
कैरिजिनेट

हां, लेकिन यह अच्छा नहीं लगता।
मूर्ति

यह देखते हुए कि यह एक कोड-गोल्फिंग चुनौती है, यदि आपके पास सुंदर आउटपुट के साथ एक लंबे कार्यक्रम का विकल्प है, या बदसूरत आउटपुट के साथ एक छोटा कार्यक्रम है, तो बाद वाला चुनें। कोई आपको जज नहीं करेगा।
कारकेजनेट

2

सी (क्लैंग) , 94 बाइट्स

h,m;f(){char a,b;scanf("%d:%d%c%c",&h,&m,&a,&b);printf("%02d%02d",a=='a'?(h%12):(12+h%12),m);}

इसे ऑनलाइन आज़माएं!

मैं यहां सीखने के लिए हूं, इसलिए मैं कोड का अनुकूलन कैसे कर सकता हूं, इस पर कोई भी सुझाव स्वागत योग्य है।

@ जोहान डू टिट, कुछ बाइट्स बचाने के लिए!


आपको परीक्षण नहीं करना है यदि b == 'm' और आप स्टेटमेंट्स का उपयोग करके इसे बहुत छोटा बना सकते हैं:printf("%02d:%02d", (a=='p' ? 12 : 0) + (h %12), m);
जोहान डू टिट

1
@JohanduToit मैं क्या इनपुट 6: 00pc है? :)
एबेल टॉम

1
इससे अंतरिक्ष-समय के अविराम को अपूरणीय क्षति होगी।
जोहान डू टिट


2

सी, 87 72 बाइट्स

सहेजे गए 15 बाइट @Johan du Toit की बदौलत

f()एक तर्क के रूप में एक परिवर्तनशील स्ट्रिंग के साथ कॉल करें , इनपुट आउटपुट है।

प्रारूप है HH:MMa/p, जहां a/pया तो लोअरकेस aया लोअरकेस है p। समय और मध्याह्न विनिर्देश के बीच कोई स्थान की अनुमति नहीं है।

i;f(char*p){i=atoi(p)%12+(p[5]^97?12:0);*p=i/10+48;p[1]=i%10+48;p[5]=0;}

इसे आइडोन पर आज़माएं


आप निम्नलिखित का उपयोग करके बाइट्स के एक जोड़े को बचा सकते हैं:i;f(char*p){i=atoi(p)%12+(p[5]^97?12:0);*p=i/10+48;p[1]=i%10+48;p[5]=0;}
जोहान डु टिट

(p[5]!=97)*12;इसके बजाय सुझाव(p[5]^97?12:0);
छत

2

tcl, ४५ ४ 47

अब बिल्ट-इन का उपयोग कर:

puts [clock f [clock sc $s -f %I:%M%p] -f %R]

पर परीक्षण योग्य http://rextester.com/TSRXI8802 जहां एक स्क्रिप्ट है कि वहाँ 1259pm को 0100am से यह रन


2

स्माइलबासिक, 67 बाइट्स

INPUT T$P=POP(T$)>"a
TMREAD"00:"+T$OUT,H,M?H MOD 12+12*P,T$[3];T$[4]

इनपुट: HH:MMa/p

आउटपुट: HH MM


1

आर, 68 बाइट्स

x=substr(strptime(scan(,""),"%I:%M %p"),12,16);`if`(x=="","00:00",x)

स्टड से इनपुट पढ़ता है और इसे निम्न स्वरूपों में से एक माना जाता है:

  • 12:00 AM
  • 12:00 am
  • 12:00AM
  • 12:00am

और आउटपुट प्रारूप पर है: [1] "00:00"

ज्यादातर उदाहरणों में strptime()आउटपुट प्रारूप पर होता है: "2017-01-06 12:00:00 CET"जहां तारीख स्थानीय तारीख होती है। जैसे कि हमें substr()केवल समय वापस करने के लिए उपयोग करने की आवश्यकता है , हालांकि, यदि इनपुट मध्यरात्रि है (उदाहरण के लिए 12:00am) आउटपुट केवल वही है "2017-01-06 CET"जो ifअंत में बात का कारण है (कुछ अधिक चतुर वर्कअराउंड होना चाहिए)।


मैं वास्तव में इसके साथ एक छोटा रास्ता खोजना चाहता था lubridate, लेकिन पैकेज का नाम बहुत लंबा है (अन्य समस्याओं के बीच)।
बीएलटी

1

सी, 159 152 बाइट्स

#define C c[0]
main(i,c)char**c;{scanf("%s",C);i=atoi(C);if(C[5]-97){i+=i-12?12:0;sprintf(C,"%d",i);}else if(i==12)C[0]=C[1]=48;C[2]=58;C[5]=0;puts(C);}

इनपुट प्रारूप: 07:30am



1

गणितज्ञ, 33 बाइट्स

#~DateString~{"Hour24","Minute"}&

अनाम फ़ंक्शन। एक स्ट्रिंग को इनपुट के रूप में लेता है और एक स्ट्रिंग को आउटपुट के रूप में देता है। सहित अधिकांश प्रारूपों के साथ काम करता है hh:mm AM/PM


1

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

f=s=>!~s.indexOf`pm`?s.slice(0,5):((+s.slice(0,2)+12)+s.slice(2,5))

इनपुट उदाहरण में जैसा है


के लिए काम नहीं करता है 12:00 amया12:00 pm
हरमन एल

1

हास्केल, 61 वर्ण

लघु संस्करण:

c[a,b,c,d,e]=(mod(read[a,b]::Int)12+f e,[c,d])
f 'a'=0
f _=12

इनपुट प्रारूप: HHMM(a/p)जहां (a/p)कोष्ठक के बिना या तो 'ए' या 'पी' है।

आउटपुट स्वरूप: (hs, MM)- एक पूर्णांक और एमएम के रूप में घंटों के रूप में अभी भी स्ट्रिंग के रूप में एक ट्यूपल।

उदाहरण:

> c "1200p"
(12,"00")
> c "1200a"
(0,"00")

लंबा संस्करण (अधिक उपयोगी नामों और एक प्रतिस्थापन के साथ hs):

conv [h0,h1,m0,m1,ap] = (mod hs 12 + offset ap, [m0,m1])
    where hs = read [h0,h1] :: Int

offset 'a'=  0
offset  _ = 12

1

आम लिस्प ( 151 122 बाइट्स)

ठीक है, सीएल का अर्थ "ट्रिक" नहीं है, लेकिन मुझे आश्चर्य है कि यह इस के लिए सबसे क्रिया नहीं है।

यहां 122 बाइट संस्करण है, जिसे फिक्स्ड-पोजिशन इनपुट की आवश्यकता है। 0145pmया 145pस्वीकार्य हैं (पहले चरित्र-स्थिति में अग्रणी स्थान के साथ)।

(defun a(x)(let((h(parse-integer(subseq x 0 2)))(m(subseq x 2 4)))(format nil "~a~a" (+(mod h 12)(if(find #\p x)12 0))m)))

PPRINT:

(DEFUN A (X)
  (LET ((H (PARSE-INTEGER (SUBSEQ X 0 2)))
        (M (SUBSEQ X 2 4)))
    (FORMAT NIL
            "~a~a"
            (+ (MOD H 12) (IF (FIND #\p X) 12 0))
            M)))

अच्छे लेकिन बड़े

केवल Common-Lispपैकेज का उपयोग करना । पूर्णांक घंटे (अग्रणी के साथ या बिना 0), शाब्दिक :, दो-अंकीय मिनट और वैकल्पिक अनुगामी amया pm(केवल निचले मामले में) के रूप में स्वीकार (केवल) इनपुट । समय के आसपास और AM / PM के आसपास व्हाट्सएप की अनुमति देता है, लेकिन सीधे के बाद नहीं :

(defun a(x)(let*((c(position #\: x))(h(parse-integer(subseq x 0 c)))(m(subseq x(1+ c)(+ 3 c))))(format nil "~a~a" (+(mod h 12)(if(find #\p x)12 0))m)))

परीक्षा:

GOLF> (a "  1:45 am ")
"1:45"
GOLF> (a "  1:45 pm ")
"13:45"
GOLF> (a " 12:45 am ")
"0:45"
GOLF> (a "12:45p")
"12:45"

pprint फ़ंक्शन की परिभाषा:

(DEFUN A (X)
  (LET* ((C (POSITION #\: X))
         (H (PARSE-INTEGER (SUBSEQ X 0 C)))
         (M (SUBSEQ X (1+ C) (+ 3 C))))
    (FORMAT NIL "~a~a"
            (+ (MOD H 12)
               (IF (FIND #\p X)
                   12
                   0))
            M)))

डी-समझ से परे:

(defun 12->24-hour (timestring) 
  "Given a  TIMESTRING with  hours:minutes and a  trailing “am”  or “pm”
   \(lowercase-only), return the 24-hour time without a delimiter as
   a  string \(eg,  \"1:45am\" →  \"0145\"). Spaces  surrounding the
   time or  meridian markers are ignored  \(eg, \" 02:22 pm  \") but
   other junk in the string may cause incorrect behavior."
  (let ((colon (position #\: timestring)))
    (let ((hours (parse-integer (subseq timestring 0 colon)))
          (minutes (subseq timestring (+ 1 colon) (+ 3 colon))))
      (format nil "~a~a"
              (+ (mod hours 12) (if (find #\p timestring) 12 0))
              minutes))))

1

रेटिना , 61 60 बाइट्स

^12(.*)a
00$1
^(12.*)p
$1
a

(\d\d)(.*)p
$1$*x12$*x$2
x+
$.&

इनपुट एक अलग बृहदान्त्र के बिना दिया जाता है, अनिवार्य अग्रणी 0, और केवल aया pइसके बजाय का उपयोग amकर रहा है pm, जैसे 0134aकि 01:34 बजे। आधी रात के रूप में 0000 का उपयोग करके सीधे सैन्य समय में आउटपुट। (मैं कुछ बाइट्स बचा सकता हूं अगर मुझे बदलने की अनुमति दी जाती है, उदाहरण के लिए, 12:30 बजे 2430, लेकिन मुझे संदेह है कि यह स्वीकार्य है)।

इसे ऑनलाइन आज़माएं!

व्याख्या

शुरुआती दो मामले "12" घंटे से निपटते हैं, क्योंकि रात 12 बजे के लिए उल्टा / दोपहर होता है:

^12(.*)a
00$1

यदि समय आधी रात (12 बजे) और 1 बजे के बीच है, तो इसे 12 के बजाय 00 में बदल दें, और हटा दें a

^(12.*)p
$1

यदि समय दोपहर (12 बजे) और दोपहर 1 बजे के बीच है, तो बस 24 घंटे का समय पाने के लिए पी को हटा दें।

किसी अन्य घंटे के लिए:

a
 

यदि समय है, तो बस a24 घंटे का समय निकालने के लिए निकालें ।

(\d\d)(.*)p
$1$*x12$*x$2
x+
$.&

यदि समय दोपहर का है, तो निकालें p। घंटे के घटक को एकरी में बदलें, 12 जोड़ें और दशमलव में वापस कनवर्ट करें। मिनटों को अपरिवर्तित छोड़ दें।


1

बैच, 40 बाइट्स

@set/aa=0,p=12,h=%1%%12+%3
@echo %h% %2

तीन तर्कों के रूप में इनपुट लेता है। मान लें कि दूसरे तर्क में शून्य प्रमुख है जहां आवश्यक है, तीसरा तर्क aया तो है p। तीसरे तर्क को अप्रत्यक्ष चर नाम के रूप में मानकर काम करता है इसलिए इसे घंटों की संख्या में जोड़ा जाता है; मिनटों की संख्या अप्रभावित है इसलिए सीधे उत्पादन होता है। यदि विभिन्न स्वरूपों को मिलाना ठीक है तो एक बाइट को बचाने के लिए अंतिम स्थान को हटाया जा सकता है।

(क्रोध के बजाय, यह प्रश्न उस प्रश्न पृष्ठ पर दिखाई नहीं दिया जब मैंने इसे मूल रूप से लोड किया था, और मैं केवल इसे भर में ठोकर खाई थी क्योंकि मैं एक और प्रश्न खोज रहा था।)

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