তারিখ ব্যাপ্তিতে গ্যাপগুলি সন্ধান করা হচ্ছে


15

rইনপুট, আউটপুট হিসাবে পাওয়া তারিখের ব্যাপ্তির একটি তালিকা দেওয়া বা পাওয়া যায় নি এমন কোনও ব্যাপ্তি প্রদান করে r

এই উদাহরণের স্বার্থে ইনপুট YYYY-MM-DDফর্ম্যাটে থাকবে।

ধরা যাক আপনার তিনটি তারিখের সীমা রয়েছে:

[2019-01-01, 2019-02-01]
[2019-02-02, 2019-04-05]
[2019-06-01, 2019-07-01]

আপনি দেখতে পারেন মধ্যে একটি ব্যবধান নেই 2019-04-05এবং 2019-06-01

আউটপুট যে ফাঁক হবে: [2019-04-06, 2019-05-31]

বিধি

  • ইনপুট এবং আউটপুট যে কোনও যুক্তিসঙ্গত তারিখ বা সংগ্রহ বিন্যাসে হতে পারে, যতক্ষণ এটি সামঞ্জস্যপূর্ণ হয়।
  • ধরুন ইনপুট অর্ডার করা হয়নি।
  • আপনার তারিখের সীমা হতে হবে না [latest, earliest], তবে এটি নিয়ম 2 অনুসরণ করতে হবে।
  • ধরুন ইনপুটটিতে কোনও ওভারল্যাপিং তারিখ নেই

পরীক্ষার কেস:

ইনপুট: [[2019-01-01, 2019-02-01],[2019-02-02, 2019-04-05],[2019-06-01, 2019-07-01]]

আউটপুট: [[2019-04-06, 2019-05-31]]


ইনপুট: [[2019-01-01, 2019-02-01],[2018-02-02, 2018-04-05],[2019-06-01, 2019-07-01]]

আউটপুট: [[2018-04-06, 2018-12-31], [2019-02-02, 2019-05-31]]


ইনপুট: [[2019-01-01, 2019-02-01],[2019-02-02, 2019-03-02],[2019-03-03, 2019-07-01]]

আউটপুট: []


ইনপুট: [[2019-01-01, 2019-02-01], [2019-11-02, 2019-11-20]]

আউটপুট: [[2019-02-02, 2019-11-01]]


ইনপুট: [[2019-01-01, 2019-02-01],[2019-02-03, 2019-04-05]]

আউটপুট: [[2019-02-02, 2019-02-02]]বা[[2019-02-02]]


5
আমি সমস্ত ফর্মেশন আইএসও ফর্ম্যাটে পুনরায় কাজ করার পরামর্শ দিচ্ছি, YYYY-MM-DDকারণ বর্তমান ফর্ম্যাটটি অনেকের কাছেই বিদেশী, এবং মাস -12-এর সামান্য দিন ব্যবহারের কারণে পার্স করা আরও শক্ত করে তোলে।
অ্যাডম

@ অ্যাডম ভাল ধারণা, আপডেট।
অলিভার

আমরা কী NET OLE অটোমেশন তারিখ হিসাবে ইনপুট নিতে পারি?
এডম

@ অ্যাডম হ্যাঁ যে কোনও যুক্তিসঙ্গত তারিখের বিন্যাস গ্রহণযোগ্য is
অলিভার

1
তারিখগুলি অর্ডার করা হবে? এছাড়াও, একজোড়া তারিখের মধ্যে, পরে কি শেষ হবে?
অজ্ঞতার

উত্তর:


4

এপিএল (ডায়ালগ প্রসারিত) , 28 25 24 বাইট

বেনামে ট্যাসিট প্রিফিক্স ফাংশন। যুক্তি এবং ফলাফল হ'ল প্রথম যুগের পরের দিন সংখ্যাগুলির 2-কলামের ম্যাট্রিক্স, প্রতিটি সারি একটি ব্যাপ্তি উপস্থাপন করে।

1 ¯1+⍤1∘{⍵⌿⍨1<-⍨/⍵}1⌽⍢,∧

এটি অনলাইন চেষ্টা করুন! InIDNs একটি 2-কলাম ম্যাট্রিক্স 3-উপাদানের তালিকা (ISO- র অনুক্রমে তারিখ) জোড়া একটি তালিকা থেকে প্রাক প্রসেসর ফাংশন ধর্মান্তরিত, আন্তর্জাতিক দিবস নাম্বার (1899-12-31 যেহেতু দিন)। Out3-উপাদান তালিকার একটি ম্যাট্রিক্স থেকে IDNs একটি ম্যাট্রিক্স থেকে পোস্ট প্রসেসর ফাংশন রূপান্তরিত করে।

 সারি সারি সাজানো

1⌽ চক্রাকারে তারিখগুলি ঘোরাঘুরি করার
⍢, সময় এক ধাপ বাকি বাম দিকে ঘোরান (সমতল) - পরে, পুনরায় আকারটি মূল আকারে করুন

1 ¯1+ এক ও নেতিবাচক এক যোগ
⍤1 প্রতিটি সারির যে তালিকাটি ব্যবহার করে
 ফল এর
{... } নিম্নলিখিত ল্যামডা:
 যুক্তি
-⍨/ বিয়োগ বাঁদিকের ডানদিকের তারিখ, সারি ভিত্তিক তারিখ
1< মাস্ক যেখানে পার্থক্য এক (অর্থাত যেখানে রেঞ্জ সংলগ্ন নয়) অতিক্রম
⍵⌿⍨ ফিল্টার যে মুখোশ দ্বারা সারি


3

সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) , 108 বাইট

n=>{n.Sort();for(int i=0;;)Write(n[i].b.AddDays(1)==n[++i].a?"":n[i-1].b.AddDays(1)+""+n[i].a.AddDays(-1));}

বিন্যাসে মুদ্রণ করে আউটপুট DD/MM/YYYY 12:00:00 AMDD/MM/YYYY 12:00:00 AM। একটি সূচক ছাড়াই ব্যতিক্রম ঘটায়, যা মেটা সম্মতিতে জরিমানা।

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

যদি আমরা ইউনিক্সের সূচনাকালীন দিনগুলির আকারে ইনপুট নিয়ে থাকি তবে আমরা এটিকে এখানে নামিয়ে আনতে পারি ...

83 বাইট

n=>{n.Sort();for(int i=0;;)Print(n[i].b+1==n[++i].a?"":n[i-1].b+1+" "+(n[i].a-1));}

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

এটি /u:System.Arrayপতাকা সহ আরও গল্ফ করতে পারি , ...

78 বাইট

n=>{Sort(n);for(int i=0;;)Print(++n[i].b==n[++i].a--?"":n[i-1].b+" "+n[i].a);}

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




2

পার্ল 6 , 46 বাইট

{@_.sort[1..*-2].map:{$^a+1,$^b-1 if $b>$a+1}}

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

জোড়ের একটি তালিকা নেয় Date


কোনও সম্ভাবনা কেন এই সম্ভাব্য গল্ফ তারিখের আউটপুটটিকে ম্যাঙ্গাল করে?
জো কিং

@ জোকিং আমি তাও লক্ষ্য করেছিলাম এবং একটি বাগ দায়ের করেছি
nwellnhof

2

পিএইচপি, 208 197 190 177 বাইট

হাঙ্কি চুনকি একটি দেয়ালে বসেছিল ... যদিও নতুন পদ্ধতির বেশ কিছু গল্ফ সম্ভাবনা রয়েছে।

function($a){sort($a);for($m=$x=$a[0][0];$f=$m<=$x;$f^$g&&print($g=$f)?"$m/":"$n
",$m=date("Y-m-d",strtotime($n=$m)+9e4))foreach($a as$d)$x=max($x,$d[1|$f&=$m<$d[0]|$m>$d[1]]);}

ফাংশনটি আইএসও ফর্ম্যাটে রেঞ্জের [সূচনা, শেষ] বিন্যাস নেয়, ফাঁক বিরতি প্রিন্ট করে। এটি অনলাইনে চেষ্টা করুন


ভাঙ্গন

function($a){
    sort($a);                           # sort ranges (for easy access to min date)
    for($m=$x=$a[0][0];$f=$m<=$x;       # loop from min date to max date, 1. set flag
        $f^$g&&print($g=$f)?"$m/":"$n\n",       # 4. flag changed: backup flag, print date
        $m=date("Y-m-d",strtotime($n=$m)+9e4)   # 5. backup and increment date
    )foreach($a as$d)
        $x=max($x,$d[1                          # 2. find max date
            |$f&=$m<$d[0]|$m>$d[1]              # 3. date found in ranges: clear flag
        ]);
}

1

জেলি , 13 বাইট

FṢṖḊs2+Ø+>/Ðḟ

জেলির (বর্তমানে) কোনও অন্তর্নির্মিত তারিখ নেই, সুতরাং এটি দিন-পূর্ব-কাল ব্যবহার করে।
রেঞ্জগুলির ইনপুট তালিকা (পূর্ণসংখ্যার জোড়) মিশ্র ক্রমে এবং মিশ্র দিকনির্দেশে থাকতে পারে।
ফলাফলটি ক্রম বর্ধমান ক্রমের একটি তালিকা।

এটি অনলাইন চেষ্টা করুন! (পাদলেখের বিন্যাসগুলি খালি তালিকা হিসাবে প্রদর্শিত হবে[] )

কিভাবে?

দ্রষ্টব্য: এটি আশ্বাসের উপর নির্ভর করে যে "ইনপুটটিতে কোনও ওভারল্যাপিং তারিখ নেই" নিয়মে বর্ণিত হয়েছে।

FṢṖḊs2+Ø+>/Ðḟ - Link: list of pairs of integers
F             - flatten
 Ṣ            - sort
  Ṗ           - pop (remove tail)
   Ḋ          - dequeue (remove head)
    s2        - split into twos
       Ø+     - literal [1,-1]
      +       - add (vectorises)
           Ðḟ - filter discard those for which:
          /   -   reduce by:
         >    -     greater than?

মজার বিষয়, আমি জানতাম না যে জেলি তারিখ সমর্থন করে না। এটি কি স্বাভাবিক পন্থা? যুগের পর থেকে দিনগুলি ব্যবহার করবেন?
ডানা

যুগের পরের দিনগুলি, আমি বিশ্বাস করি কিছু সিস্টেম ব্যবহার করে (এক্সেল সম্ভবত)। যুগের পর থেকে দ্বিতীয় যুগ বেশি দেখা যায় (যেমন ইউনিক্স)। আমি ঠিক এমন কিছু নিয়ে গিয়েছিলাম যা মনে হয় প্রয়োজনীয়তাগুলি মোটামুটি শিথিলভাবে আবৃত করে।
জোনাথন অ্যালান

বু, আপনি নিজে খেজুর গণনা করতে পারেন । ; পি দিন যেহেতু যুগের দিনগুলি সত্যই তারিখগুলি সমর্থন করে না এমন ভাষার জন্য বেশি ব্যবহৃত হয় often যদিও আমি মনে করি এটি চ্যালেঞ্জটিকে অনেক সহজ করে তোলে, যদিও।
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন হিহ, সম্মত হয়েছে।
জোনাথন অ্যালান

1

সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) , 103 বাইট

x=>{var(a,_)=x[0];foreach(var(b,c)in x.OrderBy(y=>y)){if(a<b)Print((a,b.AddDays(-1)));a=c.AddDays(1);}}

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

ইনপুট হল শুরুর / শেষ তারিখের তালিকার একটি তালিকা। প্রতিটি অনুপস্থিত পরিসীমাটি STDOUT এ আউটপুট করে।

// x: input list of start/end date tuples
x=>{
  // variable definitions...
  // a: 1 day after the end date of the previous range
  // b: start of the current range
  // c: end of the current range

  // start by deconstructing the start date of the first tuple
  // into a. a will then be a DateTime and will contain a value
  // at least a large as the smallest start date.
  var(a,_)=x[0];
  // iterate over sorted ranges
  foreach(var(b,c)in x.OrderBy(y=>y)){
    // if the day after the end of the previous range is less
    // than the start of the current range, then print the
    // missing days.
    if(a<b)
      Print((a,b.AddDays(-1)));
    // save the day after the current range to a for next iteration
    a=c.AddDays(1);
  }
}


হাহ - আপনি যদি অজ্ঞতার প্রতিমূর্তির মতো মুদ্রণ করেন তবে আপনি সত্যিই ছোট হতে পারেন - এটি অনলাইনে চেষ্টা করুন!
দানা

খুশী হলাম। দ্বিতীয়টির জন্য তাদের ইনপুট পদ্ধতিটিও ডাব্লুটিএফএফ করুন
এএসসিআইআই-কেবলমাত্র

আসলে আসলে ... এটি দেখতে সত্যই ভুল দেখাচ্ছে
ASCII-

1
হ্যাঁ এখন দেখতে ভাল
ASCII-

1

আর , 88 বাইট

function(a,b=a[order(a$x),],d=c(b$x[-1]-b$y[-nrow(b)],0))data.frame(b$y+1,b$y+d-1)[d>1,]

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

এটি ইনপুট হিসাবে তারিখের ব্যাপ্তিগুলির একটি ডেটা ফ্রেম নেয় এবং অনুপস্থিত রেঞ্জগুলির সাথে ডেটা ফ্রেমের আউটপুট দেয়। আমি মোটামুটি আছি নিশ্চিত এই আরো golfed যেতে পারে, কিন্তু আমি সমস্যা গাড়ীতে আঘাত c, cbindএবং অন্যদের তারিখ শ্রেণী stripping।

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