अंतिम बार n द्वारा तिथि कब विभाजित की गई थी?


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

इनपुट

आप एसटीडीआईएन से पढ़ सकते हैं या फ़ंक्शन तर्क ले सकते हैं या यहां तक ​​कि इनपुट को एक चर में संग्रहीत करने की अपेक्षा कर सकते हैं। इनपुट एक अहस्ताक्षरित पूर्णांक होगा।

उत्पादन

STDOUT या रिटर्न (या एक चर में बचाने के लिए) लिखें YYYYMMDD प्रारूप में तारीख का प्रतिनिधित्व करने वाला पूर्णांक।

प्रतिबंध

आप अपनी भाषा के किसी भी मानक पुस्तकालय का उपयोग कर सकते हैं। मानक खामियां लागू होती हैं।

जीतने की स्थिति

यह एक , इसलिए सबसे छोटा कार्यक्रम (बाइट्स में) जीतता है। एक टाई के मामले में, सबसे अधिक वोटों के साथ जवाब जीत जाता है।


4
दिनांक 00000101 मौजूद नहीं है। वर्ष गणना 1 से शुरू होती है। en.wikipedia.org/wiki/0_%28year%29
edc65

1
@ edc65 क्या हम दिखावा कर सकते हैं कि यह मौजूद है?
ओवर जूलर

3
29 फरवरी को क्या होगा? क्या हमें वैध तिथियों की जांच के लिए पूर्ण लीप वर्ष नियम लागू करने की आवश्यकता है? en.wikipedia.org/wiki/Leap_year
डिजिटल ट्रामा

6
जूलियन-ग्रेगोरियन कैलेंडर स्विच के कारण खो जाने वाले दिनों के बारे में क्या? या हम ग्रेगोरियन सभी तरह से जा रहे हैं? en.wikipedia.org/wiki/Gregorian_calendar
डिजिटल ट्रामा

1
आपके इनपुट / आउटपुट स्पेक्स ढीले हैं। उदाहरण के लिए, क्या "उम्मीद है कि इनपुट को एक चर में संग्रहीत किया जाना चाहिए" सी जैसी भाषा में चर घोषणा की गणना करें? आप कहते हैं "एक कार्यक्रम लिखें", फिर भी आप कहते हैं "एक फ़ंक्शन तर्क ले लो" - इसका मतलब है कि हम एक पूर्ण कार्यक्रम के बजाय सिर्फ एक फ़ंक्शन लिख सकते हैं?
बॉब

जवाबों:


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. *)

ध्यान दें कि मैंने स्पष्टीकरण के |बजाय उपयोग किया है, क्योंकि यूनिकोड एक मोनोस्पेसिंग के साथ गड़बड़ करता है।


+ 1. क्या आपके पास एक लिंक है जो आपको इंगित करता है कि आपको 3 बाइट्स के रूप में यूनिकोड वर्णों को गिनना चाहिए?
डॉ। बिसरिज़ियस

2
@belisarius ओपी ने कहा कि यह कोड गोल्फ बाइट्स द्वारा गिना जाता है और वर्णों से नहीं (यह टैग विकी के अनुसार डिफ़ॉल्ट भी है)।
मार्टिन एंडर

मैं विकी के अंत के माध्यम से पढ़ने के लिए कभी नहीं मिला :) धन्यवाद!
डॉ। बेलीजरियस

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

सुझाव के लिए दिन निकालने के लिए धन्यवाद @ chill0r =, ​​और टिप के लिए जेसन एस कि कोशिश ब्लॉक को एक पंक्ति में कम किया जा सकता है।


हाँ। यह एक मानक संचालन प्रक्रिया है;)। चिपकाने के बाद टैब स्थान में परिवर्तित हो जाते हैं।
वेक्टर

आप निकाल सकते हैं days=में t-=d.timedelta(days=1)। यह ठीक भी काम करता है (कम से कम python3 में)
chill0r

@bitpwner आह मैं देखता हूं, फिर कोई बात नहीं।
मार्टिन एंडर

1
आप अधिक बचत कर सकते हैं: (1) उपयोग int(t.strftime("%Y%m%d"))और ड्रॉप re, (2) एक-लाइन का उपयोग करते हैं tryक्योंकि केवल इसमें रहने की t-=d.timedelta(1)आवश्यकता होती है।
जेसन एस

1
strftimeपुरानी तारीखों पर @bitpwner python3 में काम करता है, जाँच की गई और मुझे python2 में एक त्रुटि मिलती है
जेसन एस

5

सी # 136

संशोधित चश्मे के साथ, एक फ़ंक्शन जो अहस्ताक्षरित int लेता है और एक int देता है।

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
वास्तव में, एक नीच? क्या इससे समस्या का सही समाधान नहीं होता है? कृपया समझाएँ। अगर किसी को लगता है कि मैंने दूसरे C # उत्तर की नकल की है, तो मैंने वास्तव में दूसरे के बारे में एक घंटे पहले लिखा था, और यहां तक कि घोषणा के भावों के लिए C # 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)

एक अनगुल्ड Lua संस्करण होगा,

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
विलियम बारबोसा

@WilliamBarbosa: निश्चित; 20140699 रिटर्न -1।
काइल कानोस

4

MATLAB: 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

PHP (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

मुझे अभी याद आया कि मुझे PHP क्यों पसंद नहीं है =)

EDIT: अब विनिर्देशों के -1 को भी लागू कर दिया गया है।


नहीं, बस इसे चेक किया, प्रतिध्वनि होने पर $ d एक बहुत कम होगा। For फोर्ज फोर्ज ’से आपका क्या अभिप्राय है? (क्षमा करें, कोई अंग्रेजी मूल =)
दोष जूल

ओह, मैंने उस युक्ति को नहीं देखा, निश्चित रूप से यह जोड़ा जाना चाहिए, धन्यवाद!
दोष

3

जावास्क्रिप्ट (ईएस 6) 115

चर n में संख्या की अपेक्षा करता है, चर r में संग्रहीत परिणाम। प्रत्येक दिन की जाँच की जाती है, वर्तमान तिथि और गिरावट के साथ शुरू - एक बेहतर तरीका होना चाहिए।
इसके अलावा, मानक जावास्क्रिप्ट तिथि कार्यों का उपयोग करते हुए, सभी तिथियां वर्ष 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

प्रत्येक अंक के लिए C # - 144 (या LINQPad में 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;}}}

LINQPad संस्करण:

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

आर, १४६ १३ ९

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

एक तारीख के साथ अच्छी किस्मत जो काम नहीं करती है। microbenchmarkरिपोर्ट में 15 दिन पीछे जाने में लगभग आधा सेकंड का समय लगता है। 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

रूबी 103

require'date'
f=->{d=Date.today 
(s=d.strftime('%Y%m%d').to_i
return s if s%n<1
d-=1)while d.year>0
-1}

इनपुट

विभाज्य मान को चर में उपस्थित होने की अपेक्षा करता है n

उत्पादन

fफ़ंक्शन का वापसी मान

ऑनलाइन उदाहरण: http://ideone.com/LoYxG4


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

नमूना चलता है (क्लासपाथ पर joda-time-2.4.jar के साथ:

$ 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] मैक्रो को पुश -1 पर परिभाषित करें, स्टैक के शीर्ष को प्रिंट करें, फिर छोड़ दें
    • sq मैक्रो को रजिस्टर q में सहेजें
    • 20140728 एम्बेडेड दिनांक पूर्णांक
    • d डुप्लिकेट शीर्ष स्टैक
    • A1 पुश 101 (00000101)
    • =qपॉप 2 स्टैक मान: दिनांक और 101 की तुलना करें, और qयदि बराबर हो तो मैक्रो को कॉल करें
    • 7 विभक्त धक्का
    • % पॉप विभक्त और विभाजित, शेष को विभाजित और धक्का
    • 0 धक्का ०
    • =pपॉप 2 स्टैक मान: शेष और 0 की तुलना करें, और pयदि बराबर हो तो मैक्रो को कॉल करें
    • d डुप्लिकेट शीर्ष स्टैक
    • मैक्रो pकहा जाता है: प्रिंट पूर्णांक तिथि और dcपूरी तरह से छोड़ देता है
  • dcdcमूल्यांकन के लिए अभिव्यक्तियों को पाइप किया जाता है। एक बार 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 मिलियन वर्षों तक मान्य होगा। मुझे आशा है कि यह सीमा स्वीकार्य है; ;-)


धन्यवाद @ WumpusQ। -1 की वापसी को छोटा करने के लिए।


@ मार्टिनबरनर शाप! अब यह 19 बाइट के दंड के साथ करता है :)
डिजिटल ट्रॉमा

खाली आउटपुट को -1 में परिवर्तित करने के तरीके: |grep .||echo -1पाइपलाइन के अंत में जोड़ें , या zsh का उपयोग करें जहाँ आप विस्तार कर सकते हैं जैसे कि echo ${$(cmd):-1}(यह आपको कहीं और बैकस्लैश खर्च होगा ...)

@ WumpusQ.Wumbley मैंने ऐसा क्यों नहीं सोचा? धन्यवाद!
डिजिटल ट्रामा

1
वैसे, यह कोरुटिल्स संस्करण के प्रति संवेदनशील प्रतीत होता है। मेरा (8.15) 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 बाइट्स है। आप का उपयोग करके 4 बाइट बचा सकता है from datetime import*के बजाय import datetime as d, timedelta(1)के बजाय d.timedelta(1)और yieldके बजाय return
nyuszika7h

मैं एक यादृच्छिक ऑनलाइन बाइट काउंटर का उपयोग कर रहा हूं, क्या कोई बेहतर विकल्प है?
क्रोधाग्नि


इस एक से अलग क्या है? bytecount.bluebus112.com
RageCage

वह नई संख्याओं की गणना नहीं करता है, साथ ही यह वर्णों को भी गिनता है , बाइट्स को नहीं। ASCII पाठ के लिए, दो समान हैं, इसलिए बाद वाले को यहां कोई फर्क नहीं पड़ता है। में कोड गोल्फ , आप आमतौर पर पात्रों गिनती जब तक ओपी अन्यथा कहते हैं। (इसके अलावा, जो मैं जुड़ा था वह "बाइट काउंट" के लिए Google में पहला परिणाम था ।)
nyuszika7h

2

जावास्क्रिप्ट (ईएस 5) - 94

यह चर में इनपुट की उम्मीद करता है x, और आउटपुट को अंदर रखता है o

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

2

k4 (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परीक्षण मामलों को चलाने के लिए इसे q शाब्दिक तारीख ( या 1 जनवरी, 2000 से दिन) में एक पूर्णांक में बदलें । (क्ष अठारहवीं शताब्दी की शुरुआत से पहले दिनांक शाब्दिक रूप से पार्स नहीं करेगा, इसलिए इससे पहले की तारीखों के लिए, आपको मूल्य को वर्कआउट करना होगा और सीधे पूर्णांक का उपयोग करना होगा। 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

VBA 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}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.