পূর্বাভাস Palindromic তারিখ


18

Palindromic তারিখগুলি সেই তারিখগুলি যা প্যালিনড্রোম হিসাবে প্রদর্শিত হয়: অঙ্কগুলির স্ট্রিংটি ফরোয়ার্ডের মতো পিছনের দিকে একইভাবে পড়া যায়। উত্তর আমেরিকার তারিখ বিন্যাসের জন্য (এমএম / ডিডি / ওয়াইওয়াইওয়াই), পরবর্তী কয়েকটি প্যালিনড্রোমিকের তারিখগুলি হ'ল:

02/02/2020

12/02/2021

03/02/2030

চ্যালেঞ্জ

একটি ফাংশন তৈরি করুন যা সমস্ত প্যালিনড্রমিক তারিখগুলিকে একটি সামঞ্জস্যপূর্ণ, সাধারণ তারিখের ফর্ম্যাটে (আপনার পছন্দ অনুসারে) ফেরত দেয় যা তারিখের সীমাতে আসে ( সম্পাদনা করুন: নিজেই পরিসীমা সহ )।

বিধি

  • প্যালিনড্রোম হিসাবে যোগ্যতা অর্জনের জন্য, কেবলমাত্র তারিখের সংখ্যাসূচক অক্ষরগুলি পরীক্ষা করা উচিত।
  • তারিখটি যে কোনও সাধারণ বিন্যাসে ( MM/DD/YYYY, DD-MM-YYYY) হতে পারে , যতক্ষণ না এটি উভয় মাস এবং দিন উভয়ের জন্য দুটি সংখ্যা এবং বছরের জন্য চারটি ব্যবহার করে এবং এটি তারিখের অংশগুলি পৃথক করার জন্য একটি অক্ষর ব্যবহার করে। আউটপুট seperating অক্ষর (সংরক্ষণ আবশ্যক /, -, ইত্যাদি)। আপনার ফাংশনটিতে কেবল একটি স্বতন্ত্র তারিখের ফর্ম্যাটটি পরিচালনা করতে হবে। আপনার উত্তরে ফর্ম্যাটটি অন্তর্ভুক্ত করুন।
  • যদি একাধিক তারিখ ফেরত আসে তবে সেগুলি কমা বা নতুন-রেখা পৃথক করা উচিত।
  • সবচেয়ে কম উত্তর জয়!

উদাহরণ

date_palindrome('05/02/2050', '12/12/2060')
>>>['05/02/2050', '06/02/2060']

যদি আমি কোনও ওরাকল এসকিউএল উত্তর পোস্ট করতে চাই তবে আমি কী DATEএড়িয়ে to_date()চলা ইনপুট টাইপটি ব্যবহার করতে পারি বা আমাকে কম গল্ফেবল ব্যবহার করতে হবে VARCHAR2?
গিয়াকোমো গারাবেলো

এর উত্তর দেওয়ার জন্য আমি ওরাকল এসকিউএল সম্পর্কে যথেষ্ট জানি না।
অ্যাটলোলজিস্ট

উত্তর:


8

এমএটিএল, 24 23 বাইট

YOZ}&:"@23XOtt47>)tP=?8M

{lower, upper}তারিখ বিন্যাস যেখানে স্ট্রিংয়ের অ্যারের আকারে ইনপুট গ্রহণ করে 'MM/DD/YYYY'। আউটপুট MM/DD/YYYYপাশাপাশি ফর্ম্যাট হয়।

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

ব্যাখ্যা

        % Implicitly grab the two inputs
YO      % Convert to serial date format
Z}      % Push them onto the stack separately
&:      % Create an array from [lower...upper] incrementing 1 day
"       % For each day
  @23XO % Get the string version of the date (mm/dd/yyyy)
  tt    % Duplicate twice
  47>)  % Get the numeric parts
  tP=   % Compare numeric part with the flipped version of the numeric part
  ?8M   % If they are the same push it to the stack
        % Implicitly display stack contents

6

বাশ + জিএনইউ ইউটিলিটিস, 116 84

প্রদত্ত টেস্টকেসের জন্য তারিখের -৪-বিট সংস্করণ প্রয়োজন।

set date -uf- +%
jot -w@ - `$@s` 86400|$@F|sed -r 'h
:
s/-|^(.)(.*)\1$/\2/
t
/./d
g'

I / O YYYY-MM-DDবিন্যাসে আছে। স্ট্যান্ডিনের দুটি লাইন থেকে ইনপুট নেওয়া হয়, যেমন

printf "%s\n" 2050-05-02 2060-12-12 | ./palindate.sh

ব্যাখ্যা

  • setতারিখ কমান্ড টেম্পলেট সংরক্ষণ করে যাতে $@প্যারামিটারটি ব্যবহার করে এটি অ্যাক্সেস করা যায়
  • date -uf- +%s ইউনিক্সের সূচনা হওয়ার পরে শেষের তারিখগুলি সেকেন্ডের সংখ্যায় রূপান্তর করে
  • jot মহাকাব্য থেকে সেকেন্ডের একটি তালিকা দেওয়ার জন্য এটিকে বিভক্ত করে, প্রতিদিন একটি করে উপস্থাপিত @
  • date -uf- +%F প্রতিটি তালিকা এন্ট্রি হিসাবে ফর্ম্যাট YYYY-MM-DD
  • sed প্যালিনড্রোমগুলির জন্য চেকগুলি:
    • h হোল্ড বাফারে ইনপুট লাইনটি সংরক্ষণ করুন
    • : "নামবিহীন" লেবেলটি সংজ্ঞায়িত করুন
    • s/-|^(.)(.*)\1$/\2/ যদি কোনও ড্যাশ পাওয়া যায়, এটি সরিয়ে দিন বা যদি প্রথম এবং শেষের অক্ষর মেলে তবে তাদের সরান
    • t উপরে যদি কোনও মিল থাকে তবে নামহীন লেবেলে ফিরে যান
    • /./d যদি কোনও অক্ষর বাকী থাকে তবে লাইনটি প্যালিনড্রোম নয় - এটি মুছুন এবং পরবর্তী লাইনে চালিয়ে যান
    • gযদি আমরা এখানে পৌঁছে যাই, তবে কোনও লাইন মুছে ফেলা হয়নি, সুতরাং লাইনটি অবশ্যই একটি প্যালিনড্রোম ছিল। হোল্ড বাফার থেকে লাইনটি ফিরে পান এবং স্পষ্টভাবে প্রদর্শন করুন।

6

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

একটি বাইট সংরক্ষিত @ কেট ধন্যবাদ!

from datetime import*
def g(a,b):
 for s in"ab":exec"%s=date(*[int(x)for x in %s.split('-')])"%(s,s)
 for d in range((b-a).days+1):
    x=str(a+timedelta(d));y=x.replace("-","")
    if y==y[::-1]:print x

এখানে চেষ্টা করুন!

ইনপুট এবং আউটপুট বিন্যাস হয় YYYY-MM-DD। প্রথম উদ্দেশ্য স্তরটি ফাঁকা স্থান, দ্বিতীয়টি ট্যাব।
এখানে খুব বেশি বিশেষ কিছু হচ্ছে না। তারিখের স্ট্রিংটি চালু করে এবং তালিকাটিকে কন্সট্রাক্টরে স্প্ল্যাটেটিং করে ইনপুটটিকে অবজেক্টগুলিতে execরূপান্তর করতে কিছু আপত্তিজনক ব্যবহার করে । তারপরে আমরা তাদের অন্তর্ভুক্ত পরিসরে সমস্ত তারিখগুলি নিয়ে পুনরাবৃত্তি করি এবং প্যালিনড্রোমিক বলে মুদ্রণ করি।date-date


1
from datetime import*বাইট সংরক্ষণ করতে প্রথম লাইনে রাখুন
বিড়াল

নিশ্চিত না, তবে কি `a+timedelta(d)`একই রকম str(a+timedelta(d))?
ম্যাথিয়াস 711

1
@ ম্যাথিয়াস 711 দুর্ভাগ্যক্রমে নয়, reprসাধারণত strআদিম ডাটাটাইপগুলির সমতুল্য । জন্য dateবস্তু আমি পেতে datetime.date(2012, 12, 12)উদাহরণস্বরূপ।
ডেনকার

5

পাওয়ারশেল ভি 2 +, 127 বাইট

for($a,$b=[datetime[]]$args;$a-le$b){if(($c="{0:yyyyMMdd}"-f$a)-eq-join$c[$c.length..0]){"{0:MM/dd/yyyy}"-f$a}$a=$a.AddDays(1)}

কম্যান্ড-লাইন আর্গুমেন্ট হিসাবে ইনপুট লাগে $argsমধ্যে MM/DD/YYYY(অথবা অনুরূপ) বিন্যাস এবং হিসেবে recasts [datetime]অ্যারে, দোকানে তাদের মধ্যে $aএবং $b। এটি forলুপের সেটআপ স্টেপ । শর্তসাপেক্ষটি লম্বা হিসাবে $aবা-সমান-থেকে কম $b

প্রতিটি পুনরাবৃত্তি, আমরা ভিত্তিতে স্টাইলের $cএকটি -formatted স্ট্রিংয়ের সমান সেট করি । আমরা তখন তুলনা করি যদি এটি উল থেকে বিপরীত হয় (অ্যারে-যুক্ত ট্রিক ব্যবহার করে)। যদি তা হয় তবে আমরা সঠিক ফর্ম্যাটে আউটপুট দেব। যেভাবেই হোক না কেন, আমরা পরের দিন সরানোর সাথে বাড়িয়ে তুলি ।yyyyMMdd$a-eq$c$a$a.AddDays(1)

উদাহরণ

PS C:\Tools\Scripts\golfing> .\forecast-palindromic-dates.ps1 '06/23/2016' '12/12/2020'
02/02/2020

4

জুলিয়া, 132 বাইট

f(a,b,t=s->DateTime(s,"mm/dd/y"),g=d->Dates.format(d,"mm/dd/yyyy"))=map(g,filter(d->(r=replace(g(d),"/",""))==reverse(r),t(a):t(b)))

এটি এমন একটি ফাংশন যা দুটি স্ট্রিং গ্রহণ করে এবং স্ট্রিংগুলির একটি অ্যারে প্রদান করে।

Ungolfed:

function f(a, b)
    # Define a function to create a DateTime object from a string
    t = s -> DateTime(s, "mm/dd/y")

    # Define a function to create a string from a DateTime object
    g = d -> Dates.format(d, "mm/dd/yyyy")

    # Filter the range a:b to palindromic dates
    p = filter(d -> (r = replace(g(d), "/", "")) == reverse(r), t(a):t(b))

    # Format all dates in the array
    m = map(g, p)

    return m
end

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


3

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

(s,e)=>{for(r=[],s=Date.parse(s),e=Date.parse(e);s<=e;s+=864e5){d=new Date(s).toJSON().slice(0,10);`${a=d.match(/\d/g)}`==a.reverse()&&r.push(d)}return r}

আইএসও ফর্ম্যাটে I / O Ungolfed:

function date_palindrome(start, end) {
    start = Date.parse(start);
    end = Date.parse(end);
    var result = [];
    while (start <= end) {
        var date = new Date(start).toISOString().slice(0, 10);
        var digits = date.match(/d/g);
        if (digits.join() == digits.reverse.join()) {
            result.push(date);
        }
        start += 24 * 60 * 60 * 1000; // ms
    }
    return result;
}

2

টিএসকিউএল, 88 বাইট

তারিখের জন্য ISO8601 ফর্ম্যাট ব্যবহার করা হচ্ছে (yyyy-mm-dd)

DECLARE @ date='2050-05-02',@t date='2060-12-12'

a:IF stuff(reverse(@),3,1,'')=stuff(@,8,1,'')PRINT @
SET @=dateadd(d,1,@)IF @<=@t GOTO a

বেহালা


2

জাভা 7, 436 435 416 বাইট * দীর্ঘশ্বাস .. *

import java.text.*;import java.util.*;void c(String...a)throws Exception{DateFormat f=new SimpleDateFormat("dd-MM-yyyy");Calendar s=Calendar.getInstance(),e=Calendar.getInstance();s.setTime(f.parse(a[0]));e.setTime(f.parse(a[1]));for(Date d=s.getTime();s.before(e);s.add(5,1),d=s.getTime()){String o=f.format(d),x=o.replaceAll("\\W|_",""),w="";for(char c:x.toCharArray())w=c+w;if(x.equals(w))System.out.println(o);}}

ইনপুট এবং আউটপুট ফর্ম্যাট: dd-MM-yyyy

অবরুদ্ধ এবং পরীক্ষার কোড:

এখানে চেষ্টা করুন।

import java.text.*;
import java.util.*;

class Main{
  static void c(String... a) throws Exception{
    DateFormat f = new SimpleDateFormat("dd-MM-yyyy");
    Calendar s = Calendar.getInstance(),
             e = Calendar.getInstance();
    s.setTime(f.parse(a[0]));
    e.setTime(f.parse(a[1]));
    for(Date d = s.getTime(); s.before(e); s.add(Calendar.DATE, 1), d = s.getTime()){
      String o = f.format(d),
             x = o.replaceAll("\\W|_", ""),
             w = "";
      for(char c : x.toCharArray()){
        w = c + w;
      }
      if(x.equals(w)){
        System.out.println(o);
      }
    }
  }

  public static void main(String[] a){
    try{
      c("05-02-2050", "12-12-2060");
    } catch (Exception e){}
  }
}

আউটপুট:

05-02-2050
15-02-2051
25-02-2052
06-02-2060


@ ক্যাট আমার মন্তব্য অনুমানের জন্য ধন্যবাদ, তবে আপনি উত্তরটি +1 করতে ভুলে গেছেন। ; পি
কেভিন ক্রুইজসেন

ঠিক আছে, আমার অলস ব্রাউজারটি একমত হওয়ার মতো বোধ করছিল না যে আমি +1 করেছি এবং তাই আমি যখন রিফ্রেশ করি, বাম তখন আমার ভোট চলে গেল D:
বিড়াল

1

ওরাকল 11: এসকিউএল: 246 বাইট (আরে, কমপক্ষে আমি জাভা: পি লোলকে পরাজিত করেছি)

with d as(select to_date('&1','yyyy-mm-dd')s,to_date('&2','yyyy-mm-dd')e from dual),r as(select level-1 l from d connect by level<=e-s+1),x as(select s+l y,to_char(s+l,'yyyymmdd')w from d,r)select to_char(y,'yyyy-mm-dd')from x where w=reverse(w);

আউটপুট:

  SQL> with d as(select to_date('&1','yyyy-mm-dd')s,to_date('&2','yyyy-mm-dd')e from dual),r as(select level-1 l from d connect by level<=e-s+1),x as(select s+l y,to_char(s+l,'yyyymmdd')w from d,r)select to_char(y,'yyyy-mm-dd')from x where w=reverse(w);
  Enter value for 1: 2000-01-01
  Enter value for 2: 2021-01-01

  TO_CHAR(Y,
  ----------
  2001-10-02
  2010-01-02
  2011-11-02
  2020-02-02

  SQL>

পাঠযোগ্য বিন্যাসে:

  with d as (select to_date('&1','yyyy-mm-dd') s,
                    to_date('&2','yyyy-mm-dd') e
              from dual),
        r as (select level-1 l 
                from d connect by level <= e-s+1),
        x as (select s+l y, to_char(s+l,'yyyymmdd') w 
                from d,r)
  select to_char(y,'yyyy-mm-dd')
    from x 
   where w=reverse(w);

ব্যাখ্যা:

d: get input for start/end
r: generate rows needed, 1 per day.
x: calculate the actual dates, and convert them to a minimal string.
final: use REVERSE function to verify the palindroms, return in proper format.

আজ রিভার্স ফাংশন সম্পর্কে শিখলাম :)


1

সি #, 97 94 বাইট

(a,b)=>{for(;a<b;a=a.AddDays(1))if($"{a:yyy}".SequenceEqual($"{a:MMdd}".Reverse()))a.Dump();};

সি # ল্যাম্বদা ( Action) যেখানে ইনপুট রয়েছে DateTimeএবং .Dump()পদ্ধতিটি ব্যবহার করে আউটপুট প্রিন্ট করা হয় (@ এভিলফন্টির কৌশল ) ।


সি #, 115 112 বাইট

(a,b)=>{var r="";for(;a<b;a=a.AddDays(1))if($"{a:yyy}".SequenceEqual($"{a:MMdd}".Reverse()))r+=a+",";return r;};

সি # ল্যাম্বদা ( Func) যেখানে ইনপুট রয়েছেDateTime এবং আউটপুট হয় a string

কোড:

(a,b)=> {
    var r="";
    for(;a<b;a=a.AddDays(1)) {
        if($"{a:yyy}".SequenceEqual($"{a:MMdd}".Reverse()))
            r+=a+",";
    }
    return r;
};

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


0

ভিবিএ, 240 193 বাইট

Function f(a, b)
Dim j, g()
For i = CDate(a) To CDate(b)
    If Format(i, "yyyy") = StrReverse(Format(i, "mmdd")) Then
        ReDim Preserve g(j)
        g(j) = Format(i, "yyyy-mm-dd")
        j = j + 1
    End If
Next
f = g()
End Function

এটি বোধগম্য বিন্যাসে। পরীক্ষা ক্ষেত্রে:

Sub e()
MsgBox Join(f("5/2/2050", "6/2/2060"), ", ")
End Sub

অতিরিক্ত অপ্রয়োজনীয়তা ছাড়া:

Function f(a,b)
Dim j, g()
For i=CDate(a) To CDate(b)
If Format(i,"yyyy")=StrReverse(Format(i,"mmdd")) Then
ReDim Preserve g(j)
g(j)=Format(i,"yyyy-mm-dd")
j=j+1
End If
Next
f=g()
End Function

0

জাভাস্ক্রিপ্ট (বাহ্যিক গ্রন্থাগার ব্যবহার করে) (158 বাইট)

(a,b)=>_.RangeTo(a%1e20,b%1e20,864e5).Select(y=>new Date(y)).Where(x=>z=(_.From(x.toJSON()).Where(y=>!isNaN(y)).Take(8)).SequenceEqual(z.Reverse())).ToArray()

লিবে লিঙ্ক: https://github.com/mvegh1/

কোড ব্যাখ্যা: ঠিক আছে, আমি অবশেষে একবারে এখানে কিছু গল্ফিং ব্যবহার করেছি। সুতরাং ইনপুট a, b ডেট অবজেক্ট। A থেকে b পর্যন্ত পূর্ণসংখ্যার একটি ব্যাপ্তি তৈরি করুন, যেখানে a এবং b পূর্ণসংখ্যায় জোর করা হয় এবং পরিসরের মানগুলির মধ্যে দূরত্ব 86400000, অর্থাৎ একদিনে টিকের পরিমাণ। একটি তারিখ অবজেক্টের ব্যাপ্তির প্রতিটি মানকে মানচিত্র করুন। প্যালিনড্রমিকের তারিখগুলি উপস্থাপিত করে এমন প্রাকটিকের দ্বারা পরিসীমা ফিল্টার করুন। সাধারণটি নির্ধারণ করার জন্য যুক্তিটি ... লাইব্রেরি ব্যবহার করে বর্তমান তারিখের অবজেক্টের জেএসএন স্ট্রিং উপস্থাপনাটি কাঠের অ্যারেতে নিক্ষিপ্ত করুন এবং অ-সংখ্যাযুক্ত এন্ট্রিগুলি ফিল্টার করুন এবং কেবল প্রথম 8 টি মান গ্রহণ করুন (কারণ এটি হবে yyyyMMdd ) এবং এটিকে ভেরিয়েবল z এ সংরক্ষণ করুন, তারপরে z বিপরীত সমান কিনা তা পরীক্ষা করে দেখুন। অবশেষে, নেটিভ জেএস অ্যারেতে ফিরুন

সম্পাদনা করুন: অপ্রয়োজনীয় প্যারেনগুলি সরিয়ে 2 বাইট শেভ করা হয়েছে ..

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


0

জাভা, 269 বাইট

import java.time.LocalDate;void q(String...a)throws Exception{LocalDate s=LocalDate.parse(a[0]);while(!s.isAfter(LocalDate.parse(a[1]))){String d=s.toString().replace("-","");if(d.equals(new StringBuffer(d).reverse().toString()))System.out.println(d);s=s.plusDays(1);}}


Ungolfed:

import java.io.IOException;
import java.time.LocalDate;

public class UnGolfedPalindromicDates {
    public static void main(String...a) throws IOException {
        LocalDate start = LocalDate.parse(a[0]), end = LocalDate.parse(a[1]);
        while (!start.isAfter(end)) {
            String d = start.toString().replace("-","");
            if (palindrome(d)) System.out.println(d);
            start = start.plusDays(1);
        }
    }

    public static boolean palindrome(String s) {
        return s.equals(new StringBuffer(s).reverse().toString());
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.