সর্বশেষ সময়টি কখন এন দ্বারা বিভাজ্য ছিল?


24

একটি তারিখ যেমন স্বাক্ষরবিহীন পূর্ণসংখ্যার দ্বারা প্রতিনিধিত্ব করা যায়: YYYYMMDD। আপনার যা করা দরকার, তা হ'ল সংক্ষিপ্ততম প্রোগ্রাম বা ফাংশন যা সর্বাধিক সাম্প্রতিক তারিখটি নির্ধারণ করে যার সংখ্যাটি একটি নির্দিষ্ট সংখ্যার n(আজকের তারিখ সহ) বিভাজ্য ছিল এবং তারপরে সেই তারিখটি উপরে প্রদর্শিত বিন্যাসে ফেরত দেয়। প্রদত্ত পূর্ণসংখ্যার দ্বারা বিভাজ্য কোনও তারিখ (00000101 এবং আজ সমেত অন্তর্ভুক্ত) কখনও না থাকলে আপনার ফিরে আসা উচিত -1।

উদাহরণ

Current Date     Input     Output

30 July, 2014      4       20140728
30 July, 2014      7       20140729
28 July, 2014      4       20140728
28 July, 2014      7       20140722
28 July,    5    90000     -1

ইনপুট

আপনি STDIN থেকে পড়তে পারেন বা কোনও ফাংশন আর্গুমেন্ট নিতে পারেন বা ইনপুটটি কোনও ভেরিয়েবলের মধ্যে সঞ্চয় করার আশাও করতে পারেন। ইনপুটটি একটি স্বাক্ষরবিহীন পূর্ণসংখ্যা হবে।

আউটপুট

STDOUT এ লিখুন বা YYYYMMDD বিন্যাসে পূর্ণসংখ্যার প্রতিনিধিত্ব করে পূর্ণসংখ্যাটি (বা কোনও পরিবর্তনশীল হিসাবে সংরক্ষণ করুন) ফিরে আসুন।

বিধিনিষেধ

আপনি আপনার ভাষার অফারগুলির কোনও মানক গ্রন্থাগার ব্যবহার করতে পারেন। স্ট্যান্ডার্ড লুফোলস প্রযোজ্য।

জয়ের শর্ত

এটি একটি , তাই ক্ষুদ্রতম প্রোগ্রাম (বাইটে) জিতেছে। টাই হওয়ার ক্ষেত্রে সর্বাধিক ভোটের উত্তর জিতবে।


4
00000101 তারিখের অস্তিত্ব নেই। দ্বারা 1. বছর গণনা শুরু হয় en.wikipedia.org/wiki/0_%28year%29
edc65

1
@ edc65 আমরা কি এটির উপস্থিতি করতে পারি?
ওভাররেেক্টর

3
২৯ শে ফেব্রুয়ারির কী হবে? বৈধ তারিখগুলি পরীক্ষা করার জন্য আমাদের কী পুরো লিপ ইয়ার বিধি প্রয়োগ করা দরকার? en.wikedia.org/wiki/Leap_year
ডিজিটাল ট্রমা

6
জুলিয়ান-গ্রেগরিয়ান ক্যালেন্ডার স্যুইচের কারণে হারিয়ে যাওয়া দিনগুলি সম্পর্কে কী? নাকি আমরা পুরো পথে গ্রেগরিয়ান যাচ্ছি? en.wikedia.org/wiki/ গ্রেগরিয়ান_ক্যালেন্ডার
ডিজিটাল ট্রমা

1
আপনার ইনপুট / আউটপুট চশমা বরং আলগা। উদাহরণস্বরূপ, "ইনপুটটি কোনও ভেরিয়েবলের মধ্যে সংরক্ষণের আশা করা উচিত" C এর মতো কোনও ভাষাতে ভেরিয়েবলের ঘোষণা গণনা করা উচিত? আপনি "একটি প্রোগ্রাম লিখুন" বলছেন, তবুও আপনি "একটি ফাংশন আর্গুমেন্ট নিন" বলছেন - এর অর্থ কি আমরা একটি সম্পূর্ণ প্রোগ্রামের চেয়ে কেবল একটি ফাংশন লিখতে পারি?
বব

উত্তর:


16

গণিত, 93 60 বাইট

For[i=0,(r=DatePlus@i--~FromDigits~100)>0&&!n∣r,];r~Max~-1

ইনপুটটি সংরক্ষণ করা হবে বলে আশা করে n

মনে রাখবেন যে উল্লম্ব লাইনটি "বিভাজন" এর জন্য ইউনিকোড চরিত্র, যা আমি 3 বাইট (ইউটিএফ -8) হিসাবে গণনা করেছি।

সম্পাদনা করুন: পুষ্পযুক্ত DateStringএবং ফর্ম্যাট স্পেসিফিকেশন এড়াতে একটি ঝরঝরে কৌশল খুঁজে পেয়েছে :) :)

সম্পাদনা করুন: সম্পূর্ণরূপে -1প্রয়োজনীয়তাটি ভুলে গেছেন । এখনই স্থির।

এখানে একটি ব্যাখ্যা

For[i=0,            i--                        ,];         (* i is the number of days AFTER
                                                              today. Hence, we decrement 
                                                              it. *)
For[i=0,   DatePlus@i--                        ,];         (* If no reference date is
                                                              provided, DatePlus will add
                                                              the given number of days to
                                                              today's date. The result is a 
                                                              list of 3 integers, luckily 
                                                              in order {year,month,day} *)
For[i=0,   DatePlus@i--~FromDigits~100         ,];         (* Interpret these as the digits
                                                              of a base 100 number. The 
                                                              beauty is that FromDigits
                                                              doesn't care about digits 
                                                              greater than the base and 
                                                              just carries them over. *)
For[i=0,(r=DatePlus@i--~FromDigits~100)        ,];         (* Store the number in r. *)
For[i=0,(r=DatePlus@i--~FromDigits~100)>0      ,];         (* Make sure it's positive. *)
For[i=0,(r=DatePlus@i--~FromDigits~100)>0&&!n|r,];         (* And keep going while n does 
                                                              not divide r. *)
For[i=0,(r=DatePlus@i--~FromDigits~100)>0&&!n|r,];r~Max~-1 (* Clamp result to -1. *)

নোট করুন যে আমি ব্যাখ্যার |পরিবর্তে ব্যবহার করেছি , কারণ ইউনিকোড একরকম মনোস্প্যাকিংয়ের সাথে মিশে গেছে।


+ ১.আপনার কাছে ইউনিকোড চরগুলি 3 বাইট হিসাবে গণনা করা উচিত বলে ইঙ্গিত করে এমন কোনও লিঙ্ক রয়েছে?
ডাঃ বেলিসারিয়াস

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

উইকির শেষের দিক থেকে আমি কখনই পড়তে পারি নি :) ধন্যবাদ!
ডাঃ বেলিসারিয়াস

6

পাইথন 2 - 150

import datetime as d,re
def f(n):
 t=d.date.today()
 while t:
    c=int(re.sub("-","",str(t)))
    if c%n<1:return c
    try:t-=d.timedelta(1)
    except:return-1

দিনগুলি অপসারণ করার পরামর্শের জন্য @ চিল0r কে ধন্যবাদ, এবং জেসন এস টিপটির জন্য যে চেষ্টা করে ব্লকটি একটি লাইনে হ্রাস করা যেতে পারে।


হ্যাঁ। এটি একটি স্ট্যান্ডার্ড অপারেটিং পদ্ধতি;)। ট্যাবগুলি আটকানোর পরে স্পেসে রূপান্তরিত হয়।
ভেক্টরাইজড

আপনি অপসারণ করতে পারেন days=মধ্যে t-=d.timedelta(days=1)। এটি খুব ভাল কাজ করে (কমপক্ষে পাইথন 3 এ)
chill0r

@ বিটপউনার আহ আমি দেখছি, তখন কিছু মনে করবেন না।
মার্টিন ইন্ডার

1
আপনি আরও সংরক্ষণ করতে পারেন: (1) ব্যবহার int(t.strftime("%Y%m%d"))এবং ড্রপ re, (2) একটি লাইন ব্যবহার করুন tryকারণ কেবল t-=d.timedelta(1)এটির মধ্যে থাকা দরকার।
জেসন এস

1
@ বিটপউনার strftimeপুরানো তারিখগুলিতে পাইথন 3 এ কাজ করে, যাচাই করা হয়েছে এবং পাইথন 2- তে আমি একটি ত্রুটি পেয়েছি
জেসন এস

5

সি # 136

সংশোধিত চশমা সহ, একটি ফাংশন যা একটি স্বাক্ষরবিহীন ইনট নেয় এবং একটি পূর্বাবস্থায় ফিরে আসে।

int F(uint n){var d=System.DateTime.Now;int i;try{while((i=int.Parse(d.ToString("yyyMMdd")))%n>0)d=d.AddDays(-1);}catch{i=-1;}return i;}

পরিবর্তনশীল ইনপুট / আউটপুট সহ 152 টি অক্ষর

আলগা ইনপুট / আউটপুট প্রয়োজনীয়তার সুযোগ নিয়ে ইনপুটটি ভেরিয়েবলে সংরক্ষণ করতে হয় n(বর্তমানে পূর্ণসংখ্যার আক্ষরিক ব্যতীত সমস্ত অক্ষর গণনা করা হচ্ছে) এবং আউটপুটটি ভেরিয়েবলের সাথে সরবরাহ করা হয় s

class P{static void Main(){var n=4;var d=System.DateTime.Now;string s;try{while(int.Parse(s=d.ToString("yyyMMdd"))%n>0)d=d.AddDays(-1);}catch{s="-1";}}}

STDIN / STDOUT সহ 204 টি অক্ষর:

using System;class P{static void Main(){int n=int.Parse(Console.ReadLine());var d=DateTime.Now;string s;try{while(int.Parse(s=d.ToString("yyyMMdd"))%n>0)d=d.AddDays(-1);}catch{s="-1";}Console.Write(s);}}

1
সত্যিই, একটি ডাউনভোট? এটি সমস্যার সঠিকভাবে সমাধান করে না? দয়া করে ব্যাখ্যা করুন. যদি কেউ মনে করে আমি অন্য সি # উত্তরটি সদৃশ করে ফেলেছি তবে আমি এটি অন্যর আগে প্রায় এক ঘন্টা আগে লিখেছিলাম এবং এমনকি সি # 6.0 এর ঘোষণার এক্সপ্রেশনগুলির জন্য ব্যবহার করে দেখেছি । কিছুটা বিভ্রান্ত হয়ে পড়েছে, যার ফলস্বরূপ উত্তরটি দেরিতে পোস্ট করেছে। তারপরেও, এটি ডাউনটোটের জন্য একটি বরং ক্ষুদ্র কারণ।
বব

4

টি-এসকিউএল (2012) - 148

ধরে নেওয়া যায় যে এন মান সহ একটি মুক্ত ভেরিয়েবল আছে n

declare @ date=getdate()while convert(char,@,112)%@n>0 and'00010101'<@ set @=dateadd(d,-1,@)print iif(convert(char,@,112)%@n=0,convert(char,@),'-1')

4

গল্ফ্লুয়া 90 86

n=I.r()d="%Y%m%d"i=O.d(d)+0j=0@i>0?i%n==0w(i)O.q()$j=j+1i=O.d(d,O.t()-j*86400)+0$w(-1)

একটি অব্যক্ত লুয়া সংস্করণটি হবে,

n = io.read()
d = "%Y%m%d"
i = os.date(d)+0   -- implicitly casts os.date(d) to int
j = 0
while i>0 do
   if i % n == 0 then
      print(i)
      os.exit()
   end
   j = j+1
   i = os.date(d,os.time()-j*86400)+0
end
print(-1)

2
এখানে পরীক্ষিত n = 20140699 আউটপুট 20140699
উইলিয়াম বার্বোসা

@ উইলিয়াম বারবোসা: ফিক্সড; 20140699 ফেরত -1।
কাইল কানোজ

4

ম্যাটল্যাব: 61

-1,s=str2num(datestr(1:now,'YYYYmmDD')),d=s(~mod(s,n)),d(end)

ধরে নিই বিভক্তটি সঞ্চিত আছে n। ফলাফলটি একটি পরিবর্তনশীল হিসাবে সংরক্ষণ করা হবে ans


মন্তব্য করা সংস্করণ:

-1                                     % Store -1 in ans in case we don't find anything
s=str2num(datestr(1:now,'YYYYmmDD'))   % Make a list of date numbers
d=s(~mod(s,n)),                        % Select only those who are dividable and prepend -1
d(end)                                 % Store last found value in ans, if anything is found

কোনও ফলাফল না পাওয়া গেলে একটি ত্রুটি তৈরি করবে তবে এর পরেও উত্তরটি চলকটিতে পাওয়া যায়।


2 অতিরিক্ত অক্ষরের ব্যয়ে ত্রুটিটি এড়ানো যায়:

s=str2num(datestr(1:now,'YYYYmmDD')),d=[-1;s(~mod(s,n))],d(end)

@ মার্টিনব্যাটনার হুম, সমস্যাটি সমাধান করেছেন তবে এখন সমাধানটি কেবল ন্যূনতম অক্ষরের জন্য আবদ্ধ। আপনি কি কোনও উন্নতি দেখতে পাচ্ছেন?
ডেনিস জাহেরুদ্দিন

1
না, আমার মাথার উপরের অংশটি বন্ধ নয়। তবে আপনাকে আমাকে মারতে সাহায্য করার জন্য আমার প্রেরণাটি কিছুটা সীমাবদ্ধ। ;)
মার্টিন ইন্ডার

4

পিএইচপি (92 = 85 + 7)

ইনপুট সংরক্ষণ করা হবে আশা $n

for($d=date("Ymd");!($d%$n==0&checkdate($d/100%100,$d%100,substr($d,0,4))|$d<0);$d--);echo$d

আমি কেবল মনে করেছি কেন আমি আর পিএইচপি পছন্দ করি না =)

সম্পাদনা: এখন স্পেসিফিকেশন -1 খুব কার্যকর করা হয়।


না, কেবল এটি পরীক্ষা করে দেখুন, প্রতিধ্বনি করার সময় too d খুব কম হবে। 'আপনি জাল করেছেন' বলতে কী বোঝ? (দুঃখিত, কোন ইংরেজি নেটিভ =)
flawr

ওহ, আমি সেই অনুমানটি দেখিনি, অবশ্যই এটি যুক্ত করতে হবে, ধন্যবাদ!
flawr

3

জাভাস্ক্রিপ্ট (ES6) 115

ভেরিয়েবল এন-তে সংখ্যা প্রত্যাশা করে, ফলটি ভেরিয়েবল আর-এ সঞ্চিত থাকে। প্রতিটি দিন চেক করা হয়, বর্তমান তারিখ এবং হ্রাস সহ শুরু করে - আরও ভাল উপায় থাকতে হবে।
অধিকন্তু, স্ট্যান্ডার্ড জাভাস্ক্রিপ্টের তারিখ ফাংশনগুলি ব্যবহার করে, সমস্ত তারিখ গ্রেগরিয়ান থেকে নীচে বছর 1 (গ্রেগরিয়ান সংস্কারের পূর্বে লিপ বছরগুলি তত ভুল)।

for(z=new Date,t=n+1;t>n&&t%n;)
  d=z.getDate(),
  t=z.getFullYear()*1e4+(z.getMonth()+1)*100+d,
  z.setDate(d-1);
r=t>n?t:-1

3

সি # - 144 (বা লিনকুইপ্যাডে 124) প্রতিটি ডিজিটের জন্য + 1 n

এটি প্রত্যাশা করে যে ইনপুটটি ভেরিয়েবলের মধ্যে থাকবে n। এক্সিকিউশন শেষে কাঙ্ক্ষিত মান ভেরিয়েবলের মধ্যে আসবে r। এটি 00010101প্রথম তারিখ হিসাবে বিবেচনা করে , যদিও, তারিখটির 00000101অস্তিত্ব নেই। উন্নতির জন্য পরামর্শ সর্বদা স্বাগত।

class P{static void Main(){int n=7,r;var d=System.DateTime.Now;try{for(;(r=int.Parse(d.ToString("yyyMMdd")))%n>0;d=d.AddDays(-1));}catch{r=-1;}}}

লিনকপ্যাড সংস্করণ:

int n=7,r;var d=System.DateTime.Now;try{for(;(r=int.Parse(d.ToString("yyyMMdd")))%n>0;d=d.AddDays(-1));}catch{r=-1;}r.Dump();

3

গ্রোভি - 301 300 অক্ষর

খুব সহজ (এবং ধীর), কোনও কৌশল ছাড়াই এটি জোদা সময় ব্যবহার করে।

Golfed:

@Grab(group='joda-time', module='joda-time', version='2.3')
import org.joda.time.*
import org.joda.time.format.*
f={DateTimeFormat.forPattern("yyyyMMdd").print(new LocalDate().minusDays(it)) as int}
n=args[0] as int;b=0;x=-1;c=0
while(!b){if(f(c++)%n==0){x=f(--c);b=1};if(f(0)-c<=101){b=1}}
println x

উদাহরণ রান (7/30/2014 এ):

$ groovy D.groovy  7
20140729
$ groovy D.groovy  16
20140720
$ groovy D.groovy  90000
-1

Ungolfed:

@Grab(group='joda-time', module='joda-time', version='2.3')

import org.joda.time.*
import org.joda.time.format.*

f = { DateTimeFormat.forPattern("yyyyMMdd").print(new LocalDate().minusDays(it)) as int }

n = args[0] as int
b = 0 
x = -1
c = 0

while (!b) {
    if(f(c++)%n==0) { x=f(--c); b=1}
    if(f(0)-c<=101){b=1}
}

println x

3

আর, 146 139

D=function(n){
z=as.double(gsub("-","",y<-Sys.Date()))
d=F
while(z>100&!d){
y=y-1 
z=as.double(gsub("-","",y))
d=!z%%n}
ifelse(z>100,z,-1)}

শুভকামনা যে তারিখটি কার্যকর হয় না। microbenchmark15 দিন ফিরে যেতে প্রায় অর্ধেক সেকেন্ড সময় লাগে বলে জানা গেছে। জুলাই 31, 2014 পর্যন্ত, -1কমপক্ষে খামের পিছনে অনুযায়ী, থুতু ফেলতে 20 মিলিয়ন সেকেন্ড (~ 23 দিন) এর মতো কিছু লাগবে ।

সম্পাদনা করুন : মন্তব্যে কিছু শর্টকাট


!dতুলনায় খাটো d==Fএবং !z%%nতুলনায় z%%n==0। এছাড়াও, as.numeric(gsub("-","",...)একটি ফাংশন তৈরির সাথে সাথে চরিত্রের সংখ্যাও হ্রাস করা উচিত। তবুও, সুন্দর কাজ!
প্ল্যানাপাস

ওহ এবং as.realএর প্রায়শই একটি ভাল, সংক্ষিপ্ত বিকল্প হয় as.numeric
প্ল্যানাপাস

দুর্ভাগ্যক্রমে as.realআর 3.0.0 হিসাবে অদৃশ্য। তবে আমাদের এখনও রয়েছে as.doubleযা একটি চরিত্রের চেয়ে ছোট।
শ্যাডট্যালকার

ওহ আমি জানতাম না যে আমি এখনও আর 2.14 টি ব্যবহার করছি
প্ল্যানাপাস

1
আমি যে কম্পিউটারে প্রশাসনের অধিকার পেয়েছি সেগুলিতে আমি কাজ করছি না, তাই এটি আমার পক্ষে সত্যই নয়। তবে আমি ইতিমধ্যে paste0আমার .Rprofileস্বাভাবিকভাবেই :)
প্ল্যানাপাস

3

মতলব 104

function d=f(v);for d=fix(now):-1:1 d=str2num(datestr(d,'YYYYmmDD'));if~mod(d,v)return;end;end;d=-1;end

অসমাপ্ত:

function d = f(v)
   for d=fix(now):-1:1
       d = str2num(datestr(d,'YYYYmmDD'));
       if ~mod(d,v)
          return; 
       end
   end
   d = -1;
end

সম্পাদনা: আমি এটিকে কিছুটা অপ্টিমাইজ করতে পেরেছি, তবে @ ডেনিসজাহেরউদ্দিনের এখানে আসল সমাধান রয়েছে


এটি এখনও কিছুটা গল্ফ করা যেতে পারে, আমি এটি আপডেট করব।
ডেনিস জাহেরউদ্দিন

@ ডেনিসজাহেরউদ্দিন এই মেটা পোস্টের ভিত্তিতে আমি আপনার সম্পাদনা প্রত্যাখ্যান করেছি । দয়া করে একটি মন্তব্যে আপনার উন্নতিগুলি প্রস্তাব করুন, যাতে ওপি তার উত্তরটি সংশোধন করার আগে সেগুলি পর্যালোচনা করতে পারে।
মার্টিন ইন্ডার

আপনি বিভিন্ন উপায়ে চরগুলি সংরক্ষণ করতে পারেন: ফাংশনটির পরিবর্তে একটি স্ক্রিপ্ট ব্যবহার করুন, জিনিসগুলি উত্তরগুলিতে অর্পণ করা যাক, লুপটি নিম্ন থেকে উচ্চে করুন এবং প্রতিটি ফলাফল পূর্ববর্তীটিকে ওভাররাইট করতে দিন যাতে আপনার লুপটি ভাঙার প্রয়োজন হয় না । - অবশ্যই ভেক্টরাইজেশন সাহায্য করতে পারে, আমার উত্তর দেখুন
ডেনিস জাহেরউদ্দিন

এখানে 67 টি অক্ষরের একটি সংক্ষিপ্ত লুপ ভিত্তিক সংস্করণ:-1,for s=str2num(datestr(1:now,'YYYYmmDD'))',if~mod(s,n),+s,end,end
ডেনিস জাহেরউদ্দিন

@ মার্টিনব্যাটনার মন্তব্যের জন্য ধন্যবাদ। আপনি যেমন বলেছিলেন তেমন একটি ত্রুটি হয়েছিল। এখন এটা ঠিক করা উচিত।
স্কট

3

পাইথন 3 - 151 148 বাইট, জেনারেটর

from datetime import*
t=date.today()
f=lambda n:next((y for y in(int((t-timedelta(o)).strftime("%Y%m%d"))for o in range(t.toordinal()))if y%n<1),-1)

ধন্যবাদ @ জন্য nyuszika7h import*পরামর্শ



2

জাভা: 373 অক্ষর

এটি গ্রোভির উত্তরের একটি বন্দর এবং জোদা সময় ব্যবহার করে।

Golfed:

import org.joda.time.*;
import org.joda.time.format.*;
public class D {
static int f(int i){return Integer.parseInt(DateTimeFormat.forPattern("yyyyMMdd").print(new LocalDate().minusDays(i)));}
public static void main(String[] args){
int n=Integer.parseInt(args[0]);int b=0,c=0,x=-1;
while(b!=1){if(f(c++)%n==0){x=f(--c);b=1;};if(f(0)-c<=101){b=1;}}
System.out.println(x);}}

নমুনা রান (ক্লাসপথে জোদা-সময়-২.৪. জার সহ):

$ java D 7
20140729
$ java D 4
20140728
$ java D 16
20140720
$ java D 90000
-1

Ungolfed:

import org.joda.time.*;
import org.joda.time.format.*;

public class D {
    static int f(int i) {
        return Integer.parseInt(DateTimeFormat.forPattern("yyyyMMdd").print(new LocalDate().minusDays(i)));
    }

    public static void main(String[] args) {
        int n = Integer.parseInt(args[0]);
        int b = 0,c = 0,x = -1;

        while(b!=1) {
            if(f(c++)%n==0) { x=f(--c);b=1; }
            if(f(0)-c<=101) { b=1; }
        }

        System.out.println(x);
    }
}

3
এছাড়াও আছে java.time.*জাভার সর্বশেষ সংস্করণে।
ntoskrnl

2

বাশ + কোর্টিলস (8.21), 67 বাইট

seq -f-%gday $[9**9]|date -f- +[pq]sp[_1pq]sq%Y%m%ddA1=qd$1%%0=p|dc
  • seq1 থেকে 9 9 অবধি পূর্ণসংখ্যার প্রতি লাইন প্রতি এক করে এবং এটিকে ফর্ম্যাট করে-<x>day
  • এটিতে পাইপ date -fযা প্রতিটি লাইনকে ব্যাখ্যা করে এবং একটি dcএক্সপ্রেশনতে ফর্ম্যাট করা তারিখকে আউটপুট করে [pq] sp [_1pq] sq 20140728 d A1 =q d 7% 0=p( যেমন পাঠযোগ্যতার জন্য স্থানগুলি যুক্ত করা হয়)
    • [pq] স্ট্যাকের শীর্ষটি মুদ্রণের জন্য ম্যাক্রো সংজ্ঞায়িত করুন, তারপরে প্রস্থান করুন
    • sp রেজিস্টার ম্যাক্রো সংরক্ষণ করুন পি
    • [pq] -১ টি চাপতে ম্যাক্রো সংজ্ঞায়িত করুন, স্ট্যাকের শীর্ষটি মুদ্রণ করুন, তারপরে প্রস্থান করুন
    • sq কিউ রেজিস্টার ম্যাক্রো সংরক্ষণ করুন
    • 20140728 এম্বেড করা তারিখ পূর্ণসংখ্যা
    • d স্ট্যাকের সদৃশ শীর্ষ
    • A1 101 (00000101) টিপুন
    • =qপপ শীর্ষ 2 স্ট্যাক মান: তারিখ এবং 101 এর তুলনা করুন এবং qসমান হলে ম্যাক্রো কল করুন call
    • 7 বিভাজক ধাক্কা
    • % পপ বিভাজক এবং বিভাজক, বিভাজক এবং অবশিষ্টটিকে ধাক্কা
    • 0 0 চাপুন
    • =pপপ শীর্ষ 2 স্ট্যাকের মানগুলি: অবশিষ্ট এবং 0 টি তুলনা করুন এবং pসমান হলে ম্যাক্রো কল করুন
    • d স্ট্যাকের সদৃশ শীর্ষ
    • ম্যাক্রো pবলা হয়: তারিখ পূর্ণসংখ্যা মুদ্রণ করে এবং dcসম্পূর্ণভাবে প্রস্থান করে
  • dcএক্সপ্রেশন dcমূল্যায়নের জন্য পাইপ করা হয় । একবার dcসঠিক মান এবং প্রস্থানগুলি প্রিন্ট করলে, বাকি পাইপলাইনটি ছিন্ন হয়ে যায়

আউটপুট:

$ ./lastdivdate.sh 4
20140728
$ ./lastdivdate.sh 7
20140729
$ ./lastdivdate.sh 123456
17901120
$ ./lastdivdate.sh 77777
19910912
$ ./lastdivdate.sh 7777777
-1
$ 

যেহেতু এই প্রোগ্রামটি 1 থেকে 9 9 পর্যন্ত পূর্ণসংখ্যা উত্পন্ন করে, ভবিষ্যতে এটি কেবল 1 মিলিয়ন বছর অবধি বৈধ হবে। আমি আশা করি এই সীমাবদ্ধতা গ্রহণযোগ্য হবে ;-)


-২০ এর রিটার্ন সংক্ষিপ্ত করার জন্য @ উম্পাস কিউ.উম্বলিকে ধন্যবাদ।


@ মার্টিনব্যাটনার শাপ! এখন এটি 19 বাইট পেনাল্টি সহ :)
ডিজিটাল ট্রমা

খালি আউটপুট -1 এ রূপান্তর করার ছোট উপায়: |grep .||echo -1পাইপলাইনটির শেষে যুক্ত করুন , বা zsh ব্যবহার করুন যেখানে আপনি বাসা echo ${$(cmd):-1}

@ WumpusQ.Wumbley আমি কেন এটি ভাবিনি? ধন্যবাদ!
ডিজিটাল ট্রমা

1
যাইহোক, এটি কোর্টিল সংস্করণে সংবেদনশীল বলে মনে হচ্ছে। খনি (8.15) "1 দিন আগে "স্পেসিফিকেশন সহ 1901 এর আগে ফিরে যেতে অস্বীকার করে।

1
প্রকৃতপক্ষে এটি একটি sizeof time_tসমস্যা বলে মনে হচ্ছে , যেহেতু এটিটি যে সীমানাটি ভেঙেছিল তা 1/1/1970 এর আগে 2 ** 31 সেকেন্ড। আমার পুরানো ইনস্টলেশনটি করুণভাবে 32-বিট

2

পাইথন: 134 বাইট

বর্তমান নেতাকে পরাস্ত করতে সক্ষম হচ্ছি না, এবং এটি সেরা পাইথন উত্তরের চেয়ে বেশি ভাল নয়, তবে আমি আমার সেরা পাইথন সমাধান পোস্ট করার সিদ্ধান্ত নিয়েছি।

from datetime import*
def y(a,n):
 s=a.strftime("%Y%m%d")
 if int(s)%n==0:yield s
 try:x=y(a-timedelta(1),n)
 except:yield -1
 yield x

Ungolfed:

from datetime import *
def y(a, n):
    s=int(a.strftime("%Y%m%d"))
    if s%n==0:
        yield s
    try:
        x=y(a-timedelta(1), n)
    except:
        yield -1
    yield x

এটি আসলে 138 বাইট। আপনি from datetime import*পরিবর্তে import datetime as d, timedelta(1)পরিবর্তে d.timedelta(1)এবং yieldপরিবর্তে ব্যবহার করে 4 বাইট সংরক্ষণ করতে পারেন return
nyuszika7h

আমি একটি এলোমেলো অনলাইন বাইট কাউন্টার ব্যবহার করছি, এর চেয়ে ভাল বিকল্প আছে কি?
র‌্যাজকেজ


কি এই এক থেকে পৃথক করে তোলে? bytecount.bluebus112.com
RageCage

এটি কোনও নিউলাইন গণনা করে না, পাশাপাশি এটি অক্ষর গণনা করে , বাইটগুলি নয়। এএসসিআইআই পাঠ্যের জন্য, দুটি একই, সুতরাং পরবর্তীগুলি এখানে কোনও পার্থক্য করে না। ইন কোড-গলফ , সাধারণত আপনি অক্ষর গণনা যদি না ওপি অন্য কথা বলতেছে। (এছাড়াও, আমি
যেটিকে

2

জাভাস্ক্রিপ্ট (ES5) - 94

এটি ভেরিয়েবলের ইনপুটটি প্রত্যাশা করে xএবং আউটপুটটিকে ভিতরে রাখে o

for(i=Date.now();i>-7e13&&(o=(new Date(i)).toISOString().replace(/-|T.*/g,''))%x;i-=864e5)o=-1

2

কে 4 (84) (73)

f:{f d@*|&~.q.mod[(f:{$[^x;-1;.($x)@&~"."=$x]})'d:{"d"$x+!1+"i"$y-x}[-730457;.z.D];x]}

এটি প্রথম অ্যালগরিদম যা মনে মনে আসে কেবল এটি একটি প্রাথমিক কাট; আমি নিশ্চিত যে পারফরম্যান্স এবং দৈর্ঘ্য উভয় ক্ষেত্রেই আরও ভাল সম্ভব।

এই সংস্করণটি "আজ" অংশটিকে হার্ডকোড করে (এটিই .z.D); yyyy.mm.ddপরীক্ষার কেসগুলি চালানোর জন্য এটিকে কিউ ডেট সিস্টেমের (বা জানুয়ারী 1, 2000 এর দিন) তারিখের আক্ষরিক ( ) বা পূর্ণসংখ্যায় পরিবর্তন করুন । (কিউ অষ্টাদশ শতাব্দীর শুরুর তুলনায় তারিখের অক্ষরগুলি বিশ্লেষণ করবে না, সুতরাং তার আগে তারিখগুলির জন্য, আপনাকে সঠিক মানটি ব্যবহার করতে হবে এবং যথাযথ পূর্ণসংখ্যার সরাসরি ব্যবহার করতে হবে the জানুয়ারী 1, "AD 0", স্পেক থেকে বের হতে -730457, যা ফাংশন কোড ব্যবহার করা হয়। জুলাই 28, খ্রি 5, শেষ টেস্ট মামলা থেকে, দেখা যাচ্ছে হতে -728450।)

প্রদত্ত পরীক্ষার মামলাগুলি:

  {f d@*|&~.q.mod[(f:{$[^x;-1;.($x)@&~"."=$x]})'d:{"d"$x+!1+"i"$y-x}[-730457;2014.07.30];x]}4
20140728
  {f d@*|&~.q.mod[(f:{$[^x;-1;.($x)@&~"."=$x]})'d:{"d"$x+!1+"i"$y-x}[-730457;2014.07.30];x]}7
20140729
  {f d@*|&~.q.mod[(f:{$[^x;-1;.($x)@&~"."=$x]})'d:{"d"$x+!1+"i"$y-x}[-730457;2014.07.28];x]}4
20140728
  {f d@*|&~.q.mod[(f:{$[^x;-1;.($x)@&~"."=$x]})'d:{"d"$x+!1+"i"$y-x}[-730457;2014.07.28];x]}7
20140722
  "d"$-728450
0005.07.28
  {f d@*|&~.q.mod[(f:{$[^x;-1;.($x)@&~"."=$x]})'d:{"d"$x+!1+"i"$y-x}[-730457;-728450];x]}90000
-1

সম্পাদনা:

g:.,/$`\:`$$:;f:{$[Z=r:{(z>x)&.q.mod[g z]y}[Z:-730458;y]{x-1}/x;-1;g"d"$r]}

এটি একটি পৃথক পদ্ধতি যা কোনও বিভাজনীয় সন্ধান না পাওয়া অথবা এটি 1/1/0000 সীমা অতিক্রম না করা অবধি তারিখ হ্রাস করতে কনভার্জেন্স অপারেটরগুলির মধ্যে একটি ব্যবহার করে। এটি তারিখ থেকে পূর্ণসংখ্যায় কিছুটা আলাদাভাবে রূপান্তর করে।

পরীক্ষার কেসগুলি, এবার একবারে:

  g:.,/$`\:`$$:;{$[Z=r:{(z>x)&.q.mod[g z]y}[Z:-730458;y]{x-1}/x;-1;g"d"$r]}'[2014.07.30 2014.07.30 2014.07.28 2014.07.28,"d"$-728450;4 7 4 7 90000]
20140728 20140729 20140728 20140722 -1

1

ভিবিএ 343 বাইট (মডিউল)

Sub divD(i As Long)
a = Now()
b = Format(a, "yyyymmdd")
    Do While b / i <> Int(b / i)
    a = DateAdd("d", -1, a)
    b = Format(a, "yyyymmdd")
        If b = "01000101" Then
            MsgBox -1
            Exit Sub
        End If
    Loop
MsgBox b
End Sub

এটি ভারীভাবে কনডেন্সড হতে পারে Sub d(i):a=Now:b=a:Do Until b/i=Int(b/i):a=DateAdd("d",-1,a):b=Format(a,"yyyymmdd"):If b="01000101"Then:b=-1:Exit Sub:Loop:Debug.?b:End Sub139 বাইটে
টেলর স্কট

1

পাওয়ারশেল - 76

এটি চলকটিতে সঞ্চিত সংখ্যার উপর নির্ভর করে $n

try{@(0..$n|%{'{0:yyyyMMdd}'-f(date).AddDays(-$_)}|?{!($_%$n)})[0]}catch{-1}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.