আমার ফ্রি-ফর্মের তারিখটি পড়ুন


10

নিম্নলিখিত ফরম্যাটের যে কোনওটিতে (একই প্রোগ্রামে সমস্ত হ্যান্ডেল করতে হবে) লিখিত একটি তারিখ দেওয়া হয়েছে, এটি একটি বৈধ মধ্যে পার্স করুন yyyy/mm/dd date

17th May 2012
March 14th, 2016
20 February 2014
September 14, 2017
Sunday, June 8, 2015

বিধি

  • তারিখগুলি কখনও কখনও অবৈধ হবে, অর্থাত্‍। এক মাসের মাসের জন্য বা দিনের সংখ্যাগুলির জন্য ভুল দিন, আপনাকে উভয় ক্ষেত্রেই পরিচালনা করতে হবে। হয় ত্রুটিযুক্ত বা একটি সামঞ্জস্যপূর্ণ মিথ্যা মান ফিরে আসার মাধ্যমে, আপনি চয়ন। (তারা তবে উপরের টেম্পলেট ফর্ম্যাটগুলিতে আটকে থাকবে)
  • দুই ডিজিটের আউটপুট তৈরি করতে 10 দিনেরও কম দিন এবং মাসের জন্য প্যাডিং অবশ্যই ব্যবহার করা উচিত।
  • মাসের নাম সর্বদা পুরো নাম হবে, তাদের তিনটি চরিত্রের অংশগুলিতে সংক্ষিপ্ত নয়।
  • আপনি ধরে নিতে পারেন বছরটি সর্বদা 0000-9999 এর মধ্যে থাকবে।
  • নেতিবাচক সংখ্যাগুলি হ্যান্ডেল করার দরকার নেই।
  • আপনি একটি সম্পূর্ণ প্রোগ্রাম বা ফাংশন তৈরি করতে পারেন যাতে আউটপুট যে কোনও বিন্যাসে, কনসোলে মুদ্রিত বা কোনও ফাংশন থেকে ফিরে আসতে পারে।
  • ইনপুট সর্বদা একটি স্ট্রিং থাকবে, আউটপুট সর্বদা একটি স্ট্রিং হওয়া উচিত, যদি এটি অ্যারেতে একক আর্গুমেন্ট হিসাবে এটিকে ছোট করে তোলে। ["17th May 2012"]আপনি এটি করতে পারেন এবং আউটপুট একই হতে পারে["2012/05/17"]
  • আপনি ধরে নিতে পারেন ইনপুটটিতে বানানটি সঠিক হবে।

বোনাস: যে এখানে চ্যালেঞ্জ পছন্দ করে না;)

আপনি যদি ইনপুট ফর্ম্যাটগুলিকেও অনুমতি দিতে ম্যানেজ করতে পারেন The Fourteenth of March, 2016বা কোনও কোড চূড়ান্ত বাইট গণনা 1 এর কম 1 দিয়ে আপনার কোড থেকে March the Fourteenth, 2016অতিরিক্ত 20 বাইট নিতে পারেন ।

বানান নিয়ে কোনও বিভ্রান্তি এড়াতে এখানে প্রতিটি দিনের জন্য পূর্ণ লিখিত সংখ্যাগুলি রয়েছে।

First, Second, Third, Fourth, Fifth, Sixth, Seventh, Eighth, Nineth, Tenth, Eleventh, Twelfth, Thirteenth, Fourteenth, Fifteenth, Sixteenth, Seventeenth, Eighteenth, Nineteenth, Twentieth, Twenty First, Twenty Second, Twenty Third, Twenty Fourth, Twenty Fifth, Twenty Sixth, Twenty Seventh, Twenty Eighth, Twenty Nineth, Thirtieth, Thirty First

পরীক্ষার কেস

INPUT                           | Output
17th May 2012                   | 2012/05/17
March 14th, 2016                | 2016/03/14
20 February 2014                | 2014/02/20
September 14, 2017              | 2017/09/14
Sunday, June 8, 2015            | 2015/06/08
1st January 1918                | 1918/01/01

The Fourteenth of March, 2016   | 2016/03/14
March the Fourteenth, 2016      | 2016/03/14
November the Seventeenth, 2019  | 2019/11/17
The Thirtieth of April, 2016    | 2016/04/30

30 February 2014                | Invalid
September 99, 2017              | Invalid
Sunday, June8, 2015             | Invalid

The Thirty First of April, 2016 | Invalid


10
" কোস যারা এখানে চ্যালেঞ্জ পছন্দ করে না " - যখন তারা বোনাস আকারে আসে, বেশিরভাগ ক্ষেত্রে আমরা সবাই করি না! এবং ইনপুট বৈধতার বু-ওর্নস।
শেগি

3
@ Mr.Xcoder আমি মনে করি সমগ্র চ্যালেঞ্জ একাধিক ইনপুট ফর্ম্যাট সমর্থন করা হয় .. ভীষণ পছন্দ 20 February 2014ডিফল্ট তারিখ-পারজার অনেকটা সমর্থিত, কিন্তু 17thএবং Sunday, June 8, 2015একটি বিট আরো (ভাষা উপর নির্ভর করে) বিশ্লেষণ করতে কঠিন।
কেভিন ক্রুইজসেন

1
@ মিঃ এক্সকোডার আমি কখনও বলিনি যে এটি মজাদার / বিরক্তিকর, সহজ / শক্ত, ভাল / খারাপ কোড-গল্ফ চ্যালেঞ্জ। আমি কেবল এটিকেই বলছি যে আমি চ্যালেঞ্জটিতে যা পড়েছি তার ভিত্তিতে একাধিক ইনপুট-ফর্ম্যাট সমর্থনকে চ্যালেঞ্জের মূল লক্ষ্য বলে মনে হচ্ছে। আমি সম্মত হ'ল এটি সম্ভবত সম্ভবত পাঁচটি ইনপুট-ফর্ম্যাটগুলির জন্য, বা বছর, মাস এবং দিন (যা বর্তমানে আমার দৃষ্টিভঙ্গি) নিষ্কাশন করার জন্য কোনও ধরণের রেইজেক্স হতে পারে।
কেভিন ক্রুইজসেন

3
সপ্তাহের দিনটি কি সর্বদা সঠিক? চান Thursday, August 25, 2017বৈধ হতে? আমি জমাগুলিকে ডাউনটি উপেক্ষা করে দেখছি।
বেনিয়ামিন কুনিংহাম

উত্তর:


4

রেলস, 41 , 37 35 বাইট

->x{x.to_date.strftime('%Y/%m/%d')}

আমি রেলগুলির জন্য কোনও অনলাইন দোভাষীর কথা জানি না, তবে এই প্রকল্পটি দেখানোর জন্য একটি স্ক্রিনশট রয়েছে

এখানে চিত্র বর্ণনা লিখুন


অনলাইন দোভাষী লিংক?
জোনাথন অ্যালান

1
এটি কি প্রশ্নযুক্ত সমস্ত ফর্ম্যাটগুলির জন্য সত্যই কাজ করে? : ও
সম্পূর্ণমানবিক

@totallyhuman ফলাফল প্রদর্শন করে একটি স্ক্রিনশট যুক্ত করেছে। দুর্ভাগ্যক্রমে আমি কোনও অনলাইন দোভাষী সম্পর্কে জানি না :(
শুক্রবার

8

পাওয়ারশেল , 91 89 91 56 বাইট

date("$args"-replace'th|rd|st|(\b.*)day|,')-f yyyy/MM/dd

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

স্ট্রিং হিসাবে ইনপুট নেয়। -replaceআবর্জনা থেকে মুক্তি পেতে একটি ব্যবহার করে, তারপরে প্রয়োজনীয় বিন্যাসটি নির্দিষ্ট করতে ormat পতাকা Get-Dateসহ বিল্ট-ইন কমান্ড ব্যবহার করুন । সেই স্ট্রিংটি পাইপলাইনে রেখে গেছে এবং আউটপুট অন্তর্ভুক্ত।-fyyyy/MM/dd

মিস্টার এক্সকোডারকে দুটি বাইট সংরক্ষণ করা হয়েছে। টেসেল্লাটিংহেকলারের রেজেক্স গল্ফিংয়ের জন্য একটি বিশাল অংশ সংরক্ষণ করে।


1
আরে দেখুন প্রতিযোগিতামূলক পাওয়ারশেল জমা!
এরিক দ্য আউটগল্ফার

@ এরিকথিউটগলফার ডেট ম্যানিপুলেশন পাওয়ারশেলের অন্যতম শক্তি।
অ্যাডমবর্কবর্ক


@ মিঃ এক্সকোডার "এই সমস্ত" = 2. লোল। ধন্যবাদ!
অ্যাডমবর্কবার্ক

আপনি ''-2 এর জন্য তারিখের ফর্ম্যাট থেকে মুছে ফেলতে পারেন । যদি আপনি আপনার পদ্ধতির সাথে লেগে থাকতে চান, তবে "বানানটি সঠিক" দেওয়া থাকে তবে আপনি প্রতিস্থাপন করতে পারেন 'th|rd|st|(\b.*)day|,'এবং এটি 56 বাইটে নেমে যায় এবং একই ক্ষেত্রে পরিচালনা করে। যদিও আমি মনে করি এটি ভুল কারণ কারণ আপনি যদি দিনগুলি বাদ দেন তবে আপনি Sunday, June8, 2015 | Invalidমামলাটি তুলতে পারবেন না কারণ এটি সোমবার ছিল। এটি ত্রুটিযুক্ত হওয়া উচিত, তবে এটি বৈধ হিসাবে পার্স করে। এ সম্পর্কে রায় কী হবে তা নিশ্চিত নন, বা অন্যরা এটি পরীক্ষা করে দেখছেন।
টেসেল্লাটিংহেকলার

4

পিএইচপি, 73 164 + 1 বাইট

for(preg_match("#(\d+)[^\d]+(\d+)#",$d=$argn,$r);$m++<12;)strpos(_.$d,date(F,strtotime($r[2].-$m)))&&printf(checkdate($m,$r[1],$r[2])?"$r[2]/%02d/%02d":E,$m,$r[1]);

পাইপ হিসাবে চালান -nRবা এটি অনলাইনে চেষ্টা করুন

তারিখের চেকটি সত্যই ব্যয়বহুল ছিল: একটি বিল্টিন ব্যবহার করার আগে আমাকে তারিখটি বিচ্ছিন্ন করতে হয়েছিল, তারপরে চেষ্টা করুন এবং মাসের নামটিতে ত্রুটি।


আমি মনে করি আপনাকে কেবল একটির নয় সমস্ত ফর্ম্যাটকে সমর্থন করতে হবে?
এরিক দি আউটগল্ফার

1
@ এরিকথ আউটগলফার এটি করে তবে বোনাস ফর্ম্যাটগুলি নয়।
তিতাস

@ এরিকথ আউটগলফার এটি সমস্ত ফর্ম্যাট পরিচালনা করে।
মিঃ এক্সকোডার

1
এটি অবৈধ তারিখগুলির জন্য ব্যর্থ। 30 February 2014আয় 2014/03/02হয় ত্রুটিযুক্ত বা একটি সামঞ্জস্যপূর্ণ মিথ্যা মান ফিরে আসার মাধ্যমে, আপনি চয়ন। (তারা তবে উপরের টেমপ্লেট ফর্ম্যাটগুলিতে আটকে থাকবে)
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার এটি একেবারে নষ্ট করে দিয়েছে ...
তিতাস

3

পাইথন 3 + পার্সেডেটটাইম লাইব্রেরি, 152 139 155 153 বাইট

জোনাথন অ্যালানকে ধন্যবাদ 13 বাইট সংরক্ষণ করা

অবৈধ দৈর্ঘ্যের দিনগুলি সহ তারিখগুলি পরিচালনা করতে 16 বাইট যুক্ত করা হয়েছে

ল্যাম্বদা অ্যাসাইনমেন্টটি সরিয়ে 2 বাইট সংরক্ষণ করা হয়েছে

lambda s:re.search(f'(^| ){str(h(s)[0].tm_mday)[:2]}[^\d]',s)and time.strftime('%Y/%m/%d',h(s)[0])
import parsedatetime as p,time,re
h=p.Calendar().parse

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

বোনাস তারিখ সমর্থন করে না


পিপিসিজিতে আপনাকে স্বাগতম! সুন্দর প্রথম পোস্ট। 13 টি বাইট ব্যবহার করে সংরক্ষণ করুন : এর ফ্যাসি রিটার্ন মান None; import ...as; & এ হিসাবে lambdaপুনরায় ব্যবহার parseকরে h
জোনাথন অ্যালান

1

পাইথন 2 , 193 বাইট

lambda s:time.strftime('%Y/%m/%d',time.strptime(re.sub(r'^(\w+) (\d+)',r'\2 \1',re.sub('^ ','',re.sub('(th|rd|st)|(Sun|Mon|Tues|Wednes|Thurs|Fri|Satur)day|,','',s))),'%d %B %Y'))
import re,time

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

; -; প্লিজ


; -; pls halp - ঘোষণা করে 192 বাইটtime
মিঃ এক্সকোডার


1

জাভা (ওপেনজেডিকে 8) , 190 + 26 = 216 বাইট

import java.time.format.*;

s->DateTimeFormatter.ofPattern("uuuu/MM/dd").format(DateTimeFormatter.ofPattern("[EEEE, ][d ]MMMM [d, ]uuuu").withResolverStyle(ResolverStyle.STRICT).parse(s.replaceAll("(\\d)[a-z].","$1")))

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

গুরুত্বপূর্ণ দ্রষ্টব্য: সপ্তাহের দিনটিকে খনন না করে বৈধতা দেওয়াও কম ছিল , যাতে সেই বৈধতাটি অন্তর্ভুক্ত থাকে!

আমি SimpleDateFormat30 ই ফেব্রুয়ারীর মতো সমস্ত স্বীকৃত তারিখের সুস্পষ্ট মামলার বাইরে চেষ্টা করেছি না । সুতরাং আমি এটি খনন করতে হয়েছিল এবং আমি জাভা 8 এর ব্যবহার করেছি DateTimeFormatter

ব্যাখ্যা

"[EEEE, ][d ]MMMM [d, ]uuuu"

এই ফর্ম্যাটটির অর্থ:

  • weekচ্ছিক সপ্তাহের দিন কমা এবং স্থান [EEEE, ](এর মধ্যে ঘটে Sunday, ...) এর পরে,
  • স্থান সহ alচ্ছিক দিন অনুসরণ করে [d ] ,
  • পূর্ণ অক্ষর MMMMএবং স্পেসে মাস অনুসরণ করে ,
  • কমা এবং স্থান সহ alচ্ছিক দিন অনুসরণ করে [d, ],
  • যুগ যুগ অনুসরণ করে uuuuপার্সারকে জানাতে আমরা গ্রেগরিয়ান যুগে আছি।

কোড:

import java.time.format.*;                                     // Required for DateTimeFormatter, *and* ResolverStyle

s->DateTimeFormatter.ofPattern("uuuu/MM/dd")                   // Output format
  .format(
    DateTimeFormatter.ofPattern("[EEEE, ][d ]MMMM [d, ]uuuu")  // Input format
      .withResolverStyle(ResolverStyle.STRICT)                 // Invalidates xxxx-02-30 instead of transforming it into xxxx-02-28
      .parse(
        s.replaceAll("(\\d)[a-z].","$1")                       // remove st, nd, rd, th
       )
    )

ক্রেডিট

  • রেগেক্সে 2 বাইট নীলকে ধন্যবাদ জানায়।

1
replaceAllপ্যাটার্নে আপনার কি বন্ধনী দরকার ?
নীল

দেখে মনে হচ্ছে আমি না। ধন্যবাদ, @ নীল!
অলিভিয়ের

1

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

f=
s=>(d=new Date(s.replace(/.[dht]\b/,'')+' +0')).getDate()==s.match(/\d\d?/)&&d.toISOString().replace(/-(..)(T.*)?/g,'/$1')
<input oninput=o.textContent=f(this.value)><pre id=o>


রিটার্নস 2015/06/07জন্য June 8, 2015এবং (ইউটিসি সমস্যা? আমি ইউটিসি 2 আছি) falseজন্য হয় Sunday, June 8, 2015বা Monday, June 8, 2015
অলিভিয়ার

1
@ অলিভিয়ার গ্রাগোওয়ের তাদের এগুলি নির্দেশ করার জন্য ধন্যবাদ। আমি কেবল গ্রীষ্মকালীন সময়ের বাইরে ইউকেতে তারিখগুলি চেষ্টা করেছি তাই তারা ইতিমধ্যে ইউটিসি ব্যবহার করছিল এবং আমি সপ্তাহের দিনগুলি শেষ হওয়ার চেষ্টা করিনি nday
নীল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.