12 ঘন্টা থেকে 24 ঘন্টা সময় রূপান্তরকারী


27

আশ্চর্যজনকভাবে, এই সাধারণ কাজটি ইতিমধ্যে বিদ্যমান বলে মনে হচ্ছে না, তাই ...

আপনার কাজটি এমন একটি প্রোগ্রাম লিখতে হয় যা 12 ঘন্টা সময় ইনপুট হিসাবে নেয় এবং এটিকে "সামরিক সময়" বা 24-ঘন্টা সময়ের বিন্যাসে রূপান্তর করে।

ইনপুট ফর্মটিতে থাকবে:

HH:MM am/pm

যদিও সামান্য পরিবর্তনের অনুমতি রয়েছে:

  • বাকি সময় থেকে সকাল / সন্ধ্যা আলাদা করার স্থানটি alচ্ছিক।

  • শেষ অংশটি হয় "am" / "pm" বা "a" / "p" হতে পারে।

  • কোন মূলধন ঠিক আছে।

আউটপুট ইনপুট সময় হবে, 24-ঘন্টা বিন্যাসে রূপান্তরিত। এটি একটি সংখ্যা বা একটি স্ট্রিং হতে পারে।

ইনপুট এবং আউটপুট উভয়ের জন্য:

  • প্রথম স্থানে 0 সেগুলি alচ্ছিক। সর্বশেষ 3 টি স্থানে 0 টি বাধ্যতামূলক।

  • ঘন্টা এবং মিনিট পৃথককারী সীমানাটি একটি ":", "" (একটি স্থান), বা কিছুই হতে পারে না।

অন্যান্য নোট:

  • মধ্যরাত্রি হয় 0000 বা 2400 হিসাবে প্রকাশ করা যেতে পারে।

  • মধ্যরাত "am" হিসাবে বিবেচিত হবে, এবং দুপুর "বিকাল" হিসাবে বিবেচিত হবে।

আপনার প্রোগ্রামটি একটি ফাংশন বা একটি সম্পূর্ণ প্রোগ্রাম হতে পারে এবং হয় ফলাফলটি ফেরত পাঠাতে হবে, বা এটি স্টাডআউটে আউটপুট করা উচিত। স্পেস স্পেস ঠিক আছে।

উদাহরণ (আপনার প্রতিটি বিন্যাস সমর্থন করার প্রয়োজন নেই):

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

এটি কোড গল্ফ, তাই বাইটের ক্ষুদ্রতম সংখ্যক সংখ্যা। যেহেতু বিল্ট-ইন ব্যবহার করে এটি সমাধান করা এত তুচ্ছ, তাই এমন কিছু কোড দেখে ভাল লাগবে যে ম্যানুয়ালি এটি সমাধান করে (তবে বিল্ট-ইনগুলির ব্যবহার ভাল are

শুধু নির্মল, আপনি নেই প্রতি সম্ভব বিন্যাস সমর্থন করার জন্য প্রয়োজন। কেবলমাত্র একটি একক ইনপুট এবং একক আউটপুট ফর্ম্যাটকে (আপনার পছন্দ অনুসারে) সমর্থন করা ঠিক। আমি তবে উপরে বর্ণিত বিন্যাসটি সীমাবদ্ধ করতে চাই (যা ইতিমধ্যে বেশ নিখরচায়)। {1134,'pm'}উদাহরণস্বরূপ, অগ্রহণযোগ্য হবে।


আমাদের কোন ফর্ম্যাটগুলি সমর্থন করতে হবে? শুধু একটি?
রেড স্টারকোডার

পুনঃটুইট উপরের প্রয়োজনীয়তার সাথে সঙ্গতিপূর্ণ যে কোনও বিন্যাস ঠিক আছে, তবে উদাহরণস্বরূপ উপরে উল্লিখিত হিসাবে, আপনাকে প্রতিটি বিন্যাস সমর্থন করার দরকার নেই। ইনপুট একটি একক বিন্যাস এবং আউটপুট একক বিন্যাস ভাল।
কারসিজিনিট

আমাদের ফরম্যাটের করার অনুমতি দেওয়া হয় প্রয়োজন, নেতৃস্থানীয় শূণ্যসমূহ? উদাহরণস্বরূপ, 01:54pmকাজ করবে, কিন্তু 1:54pmনা?
ফ্লিপট্যাক

হ্যাঁ। আপনি প্রয়োজনীয় ইনপুট ফর্ম্যাটটি চয়ন করতে পারেন।
কারসিজেনিকেট

আমাদের ইনপুট এবং আউটপুটে আমাদের সেকেন্ড অন্তর্ভুক্ত করার অনুমতি দেওয়া হচ্ছে?
12 মে 21

উত্তর:


8

ভি , 21 17 বাইট

ধন্যবাদ 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
এছাড়াও, আপনি "গ্লোবাল কমান্ড" ব্যবহার করতে পারেন রেগেক্সের সাথে মিলিত লাইনে কমান্ড প্রয়োগ করতে, যা ম্যাক্রো ভাঙার চেয়ে কম sh çp/12^Aযা সমতূল্য :g/p/norm 12<C-a>তেজ মধ্যে
DJMcMayhem

আমি এটি গ্রহণ করেছি কারণ এটি সর্বনিম্ন স্কোরিং উত্তর যা এটি পরিষ্কার করেছিল যে এটি কোনও বিল্ট ইন ব্যবহার করছে না (যদিও আমি সেগুলি ব্যবহার করতে বারণ করি নি)। কারও যদি এই পছন্দটিতে সমস্যা হয় তবে আমি আমার উত্তরটি ন্যায্য হতে পারি। আমি মনে করি এই উত্তরটি যদিও সবচেয়ে প্রাপ্য।
কারসিজেনিকেট

12

এমএটিএল , 4 বাইট

15XO

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

ব্যাখ্যা

ইনপুট ফর্ম্যাট স্বয়ংক্রিয় শনাক্তকরণ সঙ্গে এবং আউটপুট ফর্ম্যাটের সাথে তারিখের স্ট্রিংকে রূপান্তর: বিল্ট-ইন ফাংশন 15, যা অনুরূপ 'HH:MM'। এটি @ স্টিভিগ্রিফিনের অক্টাভ উত্তরের সমতুল্য ।


10

অক্টাভা, 21 17 বাইট

লুইস মেন্ডোকে ধন্যবাদ 4 টি বাইট সংরক্ষণ করা হয়েছে। আমি পরিবর্তে 15 ফর্ম্যাট নির্দিষ্ট করতে পারে 'HHMM'

@(c)datestr(c,15)

ব্যাখ্যা:

এটি একটি হল বেনামী ফাংশন একটি স্ট্রিং গ্রহণ cবিন্যাস ইনপুট হিসাবে: '11:34 AM'datestrএক হিসাবে স্বয়ংক্রিয়ভাবে বিন্যাস স্বীকার মান তারিখ ফরম্যাটের , এবং এটি আউটপুট নির্দিষ্ট ফরম্যাটে সংখ্যা 15, যেখানে HH:MM

যেহেতু নির্দিষ্ট আউটপুট ফর্ম্যাটটি নেই AMবা PMঅষ্টাভ স্বয়ংক্রিয়ভাবে এটিকে রূপান্তর করে যা আপনি সামরিক সময় হিসাবে উল্লেখ করেন।

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


datestr35 বাইট ব্যবহার না করে এমন একটি সংস্করণ

@(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 বাইটে নামার জন্য আপনি বাদ দিতে পারেন T টিআইও-তে, সম্ভবত পুরো Get-Dateনামটির প্রয়োজন ))

স্ট্রিং হিসাবে ইনপুট নেয় $args[0], Get-Dateসেটিকে সেমিডলেটের ইনপুট হিসাবে ব্যবহার করে , এটি একটি .NET datetimeঅবজেক্টে পার্স করে । এটি সামরিক সময়ে রূপান্তর করার জন্য -format প্যারামিটারের সাথে পাস হয়েছে ( মূলধনটি 24 ঘন্টা সময় নির্দিষ্ট করে)। আউটপুট অন্তর্ভুক্ত।HHmmHH

পার্সিং ইঞ্জিন চমত্কার শক্তসমর্থ, মত তাই অতিরিক্ত ইনপুট হয় 12amবা 12:00amপাশাপাশি অনুমতি দেওয়া হয়। টিআইও-তে ইনপুট নিয়ে প্রায় খেলুন এবং দেখুন কী কাজ করে।

( @ অ্যাডমাল্লেডের জন্য 3 বাইট ধন্যবাদ সংরক্ষণ করা হয়েছে ... @ ব্রায়ান্টিস্টকে আরও একটি বাইট ধন্যবাদ সংরক্ষণ করা হয়েছে )


মধ্যে স্থান অপসারণ করতে সক্ষম হওয়া উচিত $args[0]এবং -fপাশাপাশি বিন্যাস Str প্রায় একক উদ্ধৃতি সরান: date $args[0]-f HHmm। কমপক্ষে এটি আমার পাওয়ারের উপর কাজ করে ...
22

@ অ্যাডমালডড জোরে চিৎকার করার জন্য, আমি সবসময় সেই উক্তিগুলি ভুলে যাই। আসলেই আমি প্রতি একক সময় আমি ব্যবহার করেছি মনে Get-Dateসঙ্গে -f, কেউ আমাকে স্মরণ করিয়ে দিয়েছেন যে, কোট প্রয়োজন হবে না। স্থানটি সরিয়ে ফেলার জন্যও ভাল কল, যেহেতু পার্সার ]টোকেনের শেষ হিসাবে বিবেচনা করে । ধন্যবাদ!
অ্যাডমবর্কবার্ক

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:00 am" হিসাবে ফর্মটির ইনপুট নেয় । প্রাথমিক 0 alচ্ছিক।
আউটপুট 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

পিএইচপি, 35 32 বাইট

ইনপুট ফর্ম্যাট: সংবেদনশীল ক্ষেত্রে, কোলন এবং mআউটপুট ফর্ম্যাট প্রয়োজন hhmm। বিল্ট-ইনগুলি ব্যবহার করে:

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

প্রথম কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নেয়।

পিএইচপি, 45 বাইট, কোনও বিল্ট-ইন নেই

ইনপুট ফর্ম্যাট (h)h:mm a(m)লোয়ারকেস, আউটপুট ফর্ম্যাট (h)hmm

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

4
ডাউনটা কেন?
তিতাস

আমি কেবল অনুমান করছি তবে সম্ভবত এটি আপনি পিএইচপি ব্যবহার করেছেন এবং ডাউনভোটার পিএইচপি পছন্দ করেন না? : পি
bash0r

3

জাভাস্ক্রিপ্ট (ES6), 40 বাইট

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

ইনপুটটি ফর্ম্যাট করা উচিত: 12:32 am


3

GNU Coreutils ( 18 16 বাইট)

শেল স্ক্রিপ্ট থেকে:

ইনপুটটিতে সাদা স্থান গ্রহণ করে না

কোন সময়ে, পাশাপাশি well 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) 49 বাইটের জন্য 3 বাইট দীর্ঘ:

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));}

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

ইনপুটটি কোলন সীমানাযুক্ত এবং সময় এবং am / pm এর মধ্যে একটি স্থান থাকে। আউটপুট কোলন সীমানা হয় না।

-1 বাইট ধন্যবাদ কেভিন ক্রুইজসেনকে


জাভা হিসাবে এটি যত তাড়াতাড়ি সংক্ষিপ্তভাবে পেল, কোডের 20% প্যাকেজ কোয়ালিফায়ার।
ম্যাজিক অক্টোপাস উরান

নিয়ম রাষ্ট্র এই " জন্য উভয় ইনপুট এবং আউটপুট: -। প্রথম স্থানে 0 সেঃ ঐচ্ছিক গত 3 স্থানে 0 সেঃ বাধ্যতামূলক। ", যা মানে কি পরিবর্তন করতে পারেন HHmmথেকে Hmm
কেভিন ক্রুইজসেন

পছন্দ করুন
পোষ্ট করুন

2

জাপট , 14 বাইট

Ð"1/"+U s sG21

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

এটি কেবল ক্রোমে কাজ করে। এখানে এমন একটি সংস্করণ যা সমস্ত ব্রাউজারগুলিতে কাজ করে:

Ð"1/"³+U s sG21

সাহায্যের জন্য ETH প্রোডাকশনগুলিতে আবার ধন্যবাদ!


2

পার্ল, 45 28 37 বাইট

28 37 বাইট

(সি / ও @ দাদা)

(৩৩ বাইট কোড, সংকলক -pসুইচের জন্য 1 বাইট )

0145pmAm / 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

পিপিসি তে স্বাগতম। ভাল উত্তর। আপনি স্যুইচগুলি ব্যবহার করতে পারেন, তবে সেগুলি আপনার বাইটোকন্টে গণনা করুন ( এখানে বর্ণিত হিসাবে )। আপনার ক্ষেত্রে, এটি +1 বাইট হবে (কারণ কেবলমাত্র -pপ্রয়োজন) যদি আপনি ডাবল উদ্ধৃতির জন্য একক উদ্ধৃতি পরিবর্তন করেন।
দাদা

ধন্যবাদ। সেই জিজ্ঞাসিত প্রশ্নটি খুঁজে পেল না, আশ্চর্য কি স্ট্যাক এক্সচেঞ্জ টিম উত্তর পৃষ্ঠায় বা অন্য কিছুতে এটি পিন করতে পারে?
বিআরপোকক

ঠিক আছে, আমি 4 টি সিরিজ থেকেই পার্লিং করছি এবং এটি আমার মাথায় আঘাত দেয়, আপনার ক্রেডিট নেওয়া উচিত এবং সেই সাথে নিজেকে পোস্ট করা উচিত। ☺
বিআরপোকক

আমি এখন এটি আবরণ করা উচিত মনে করি?
বিআরপোকক

আমি একটি ভুল করে ফেলেছি, মিনিট 0 এবং 9 এর মধ্যে থাকলে এই সমাধানটি কাজ করবে না This এই কোডটি তখন কাজ করে: s/(..)(.)$//;$_=$_%12+12*(p eq$2).$1(37 বাইট)। এবং যাইহোক, আপনার প্রথম সমাধানটি কিছুটা গল্ফ করা যেতে পারে: s/(..)(..)([ap])/$1%12+12*($3eq"p").$2/e(40 বাইট)
দাদা

2

কমোডর B৪ বেসিক, রান করার আগে 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

আসল কমোডোর this৪ এ প্রবেশ করতে আপনার বেসিক কীওয়ার্ড সংক্ষেপণ যেমন লে [শিফট] এফ LEFT$, এম [শিফট] আই MID$ইত্যাদির ব্যবহার করতে হবে ... বা আপনি সিবিএম PRG স্টুডিও চেষ্টা করতে পারেন।

TI$কমোডর বেসিক পরিবর্তনশীল HHMMSS যেমন 24 ঘন্টার ঘড়ির ফরম্যাটকে সময় যখন মুদ্রিত উপস্থাপন করে। লাইন নম্বর পরে স্থানটি আউট করা কোনও স্মৃতি সাশ্রয় করে না কারণ কমোডোর বেসিক যে কোনও উপায়ে স্বয়ংক্রিয়ভাবে স্পেসে যুক্ত করার পরে আপনি প্রোগ্রামটি প্রবেশ করার পরে তালিকাভুক্ত করেন।

একটি সংখ্যাকে একটি স্ট্রিংয়ে রূপান্তর করার সময় STR$কমোডোর বেসিক স্পেসে যুক্ত করবে (সুতরাং 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 ভাগে বিভক্ত করতে স্ট্রিংগুলির একটি অ্যারে রয়েছে: ঘন্টা, মিনিট এবং একটি / পি সূচকটি অপব্যবহার করে using

ইনপুট এবং আউটপুট উদাহরণ:

Input: 01:02 a
Output: 0102

Input: 01:02 p
Output: 13:02

Input: 12:22 p
Output: 0022

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

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। চমৎকার :)
রবার্ট বেনসন

আপনি মূল পদ্ধতির স্বাক্ষরের একটি স্থান বাদ দিতে পারেন: পাবলিক স্ট্যাটিক
শূন্য

2

রেক্সএক্স, 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

ডিলিমেটার হিসাবে কোনও কোলন ব্যবহার না করা হলে এটি কয়েকটি বাইট দ্বারা সংক্ষিপ্ত করা যেতে পারে।


কোলন ডিলিমিটার alচ্ছিক।
কারসিজিনিট

হ্যাঁ, তবে এটি দেখতে ভাল লাগছে না।
আইড্রুজ

এটি একটি কোড-গল্ফিং চ্যালেঞ্জ হিসাবে প্রদত্ত, যদি আপনার কাছে সুন্দর আউটপুট সহ দীর্ঘতর প্রোগ্রামের বিকল্প থাকে বা কচুর আউটপুট সহ একটি সংক্ষিপ্ত প্রোগ্রাম থাকে তবে পরবর্তীটি চয়ন করুন। কেউ আপনাকে বিচার করবে না।
কারসিজেনিকেট

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);}

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

আমি এখানে শিখতে এসেছি, তাই আমি কীভাবে কোডটি অপ্টিমাইজ করতে পারি সে সম্পর্কে কোনও পরামর্শ স্বাগত।

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


আপনাকে যদি খ == 'এম' বলে পরীক্ষা করতে হয় না এবং বিবৃতিগুলি ইনলাইন ব্যবহার করে আপনি এটি আরও খাটো করে তুলতে পারেন:printf("%02d:%02d", (a=='p' ? 12 : 0) + (h %12), m);
জোহান ডু টয়েট

1
@ জোহান্দুয়েট আমি ইনপুটটি কি 6: 00 পিসি? :)
আবেল টম

1
যা স্পেস-টাইম ধারাবাহিকতায় অপূরণীয় ক্ষতি করতে পারে।
জোহান ডু টোইট


2

সি, 87 72 বাইট

15 জোড় ডু টোইটকে ধন্যবাদ 15 বাইট সংরক্ষণ করা হয়েছে

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);
ceilingcat

2

tcl, 45 47

এখন একটি অন্তর্নির্মিত ব্যবহার:

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

Http://rextester.com/TSRXI8802 তে পরীক্ষাযোগ্য যেখানে একটি স্ক্রিপ্ট রয়েছে যা এটি সকাল 0100 থেকে 1259 অবধি চালায়


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

হাস্কেল, characters১ টি অক্ষর

সংক্ষিপ্ত সংস্করণ:

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), আক্ষরিক :, দুই-অঙ্কের মিনিট এবং alচ্ছিক অনুশীলন 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)))

ডি-obfuscated:

(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 am। মধ্যরাত হিসাবে 0000 ব্যবহার করে সোজা সামরিক সময়ে আউটপুট। (উদাহরণস্বরূপ, সকাল 12:30 এ রূপান্তর করার অনুমতি পেলে আমি কিছু বাইট সংরক্ষণ করতে পারি 2430, তবে আমি তা গ্রহণযোগ্য বলে সন্দেহ করি)।

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

ব্যাখ্যা

প্রারম্ভিক দুটি ক্ষেত্রে "12" ঘন্টা নিয়ে কাজ করা হয়, যেহেতু সকাল / রাত 12 টা থেকে বিপরীত হয়:

^12(.*)a
00$1

সময়টি মধ্যরাত (সকাল 12 টা) এবং সকাল 1 টার মধ্যে হয় তবে এটিকে 12 এর পরিবর্তে 00 এ পরিবর্তন করুন এবং এটিকে সরিয়ে দিন a

^(12.*)p
$1

সময়টি যদি দুপুরের (রাত 12 টা) এবং 1 pm এর মধ্যে হয় তবে কেবল 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। তৃতীয় যুক্তিটিকে পরোক্ষ চলক নাম হিসাবে বিবেচনা করে কাজ করে তাই এটিকে ঘন্টা সংখ্যায় যুক্ত করে; মিনিটের সংখ্যাটি প্রভাবিত হয় না তাই সরাসরি আউটপুট। যদি বিভিন্ন ফর্ম্যাটগুলির মিশ্রণ ঠিক থাকে তবে বাইট সংরক্ষণের জন্য শেষ স্থানটি মোছা যাবে।

(বরং বিরক্তিকরভাবে, মূলত আমি যখন এটি লোড করেছিলাম তখন এই প্রশ্নটি প্রশ্নাগুলিতে উপস্থিত হয় নি এবং আমি কেবল এটি পেরেছি কারণ আমি অন্য প্রশ্নের সন্ধান করছি))

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