2017 में सभी रविवार को प्रिंट करें


27

निम्न स्वरूप में 2017 में सब रविवार की तिथि को प्रिंट: dd.mm.yyyy
अपेक्षित उत्पादन:

01.01.2017
08.01.2017
15.01.2017
22.01.2017
29.01.2017
05.02.2017
12.02.2017
19.02.2017
26.02.2017
05.03.2017
12.03.2017
19.03.2017
26.03.2017
02.04.2017
09.04.2017
16.04.2017
23.04.2017
30.04.2017
07.05.2017
14.05.2017
21.05.2017
28.05.2017
04.06.2017
11.06.2017
18.06.2017
25.06.2017
02.07.2017
09.07.2017
16.07.2017
23.07.2017
30.07.2017
06.08.2017
13.08.2017
20.08.2017
27.08.2017
03.09.2017
10.09.2017
17.09.2017
24.09.2017
01.10.2017
08.10.2017
15.10.2017
22.10.2017
29.10.2017
05.11.2017
12.11.2017
19.11.2017
26.11.2017
03.12.2017
10.12.2017
17.12.2017
24.12.2017
31.12.2017

1
अपने रविवार की योजना के संभावित ठग ? यह एक विशिष्ट वर्ष है।
xnor

1
मैंने पोस्ट करने से पहले अपने रविवार की योजना बनाई , लेकिन यह किसी दिए गए महीने में रविवार को प्रिंट करने के लिए कहता है। @xnor
शिनमिगम

1
उस विशिष्ट आउटपुट प्रारूप का कोई विशेष कारण? आप थोड़ा सा खोल सकते हैं।
R

4
मैं वास्तव में एक सटीक-पाठ कोल्मोगोरोव चुनौती के रूप में इसे पसंद करता हूं। दिनांक को सही स्वरूपित करने से कुछ दिलचस्प अनुकूलन होते हैं।
xnor

5
वैसे भी, मुझे लगता है कि करीबी वोटों को वापस लेना चाहिए।
आउटगॉल्फ

जवाबों:


16

पायथन 2 , 81 बाइट्स

x=0
exec"print'%05.2f.2017'%(x%30.99+1.01);x+=7+'0009ANW'.count(chr(x/7+40));"*53

इसे ऑनलाइन आज़माएं!

कोई दिनांक लाइब्रेरी नहीं, सीधे तारीखों की गणना करता है। मुख्य चाल dd.mmएक दशमलव मान के रूप में माना जाता है। उदाहरण के लिए, 16.04.2017(16 अप्रैल) संख्या से मेल खाती है 16.04। संख्या को मुद्रित रूप में मुद्रित किया गया है जैसा xx.xxकि .2017जोड़ा गया है।

दिन और महीने की गणना अंकगणितीय रूप से की जाती है। प्रत्येक सप्ताह के रूप में किया 7 दिन कहते हैं x+=7। ले रहा xसापेक्ष 30.99घटाकर रोलओवर हैंडल 30.99जब भी दिन संख्या बहुत बड़ा हो जाता है। यह महीने को बढ़ाने के -31साथ दिनों को रीसेट करने के लिए जोड़ती है +0.01

रोलओवर मानता है कि हर महीने में 31 दिन होते हैं। कम दिनों के साथ महीनों xको कुछ हफ़्ते की संख्याओं के साथ ऊपर की ओर झुकाकर समायोजित किया जाता है +[8,8,8,17,25,38,47].count(x/7)। ये सूची इन छोटे महीनों को समाप्त करने वाले सप्ताह की संख्या की है, जो कि 8तीन गुना है क्योंकि फरवरी 31 के 3 दिन कम है।

इस सूची को ASCII मानों के साथ-साथ 40 को एक स्ट्रिंग में संकुचित किया जा +40सकता है। अनपेक्षित वर्णों के उपयोग से बचा जा सकता है, और पायथन 3 में बाइट्स ऑब्जेक्ट के रूप में छोटे तक पहुँचा जा सकता है।


क्या मस्त जवाब है! '888z!}+'.count(chr(x%146))एक बाइट बचाता है।
लिन

10

PHP, 48 बाइट्स

while($t<53)echo gmdate("d.m.2017
",605e3*$t++);

PHP, 46 बाइट्स (गैर-नकारात्मक यूटीसी ऑफसेट के लिए)

while($t<53)echo date("d.m.2017
",605e3*$t++);

1
नहीं होना चाहिए कि gmdatetimezone सुरक्षा के लिए? यह onlinephpfunctions.com पर फेल है। अन्य सभी पहलुओं में महान काम!
टाइटस

9

पायथन 2 , 90 79 बाइट्स

Xnor की सहायता से -5 बाइट्स (सप्ताह खुद गिनने से बचें)
-1 बाइट धन्यवाद xnor (605e3 के रूप में 605000 के लिए ई में वापस जोड़ें)

from time import*
i=0
exec"print strftime('%d.%m.2017',gmtime(i));i+=605e3;"*53

इसे ऑनलाइन आज़माएं!

01 जनवरी 1970 को युग के बाद से सेकंड 00:00:00 है, जो 2017 की तरह एक लीप वर्ष नहीं था। 605000सेकंड 1 सप्ताह, 3 मिनट, 20 सेकंड है। इन "सप्ताह" में से 52 जोड़ना हमें आधी रात से परे नहीं ले जाता है।


यहां अंकगणितीय प्रगति उत्पन्न करने का एक छोटा तरीका है।
xnor

@ एक्सनॉर थैंक्स, मैं एक ही तरह की चीज पर काम कर रहा था और नीचे जाने की कोशिश कर रहा था, लेकिन लाइब्रेरी के दृष्टिकोण के लिए 81 बहुत कुछ लगता है।
जोनाथन एलन

@xnor ... या नहीं।
जोनाथन एलन

1
अच्छा! संख्या हो सकती है 605e3। मेरे पास हालांकि कुछ विचार हैं:
xnor

7

बैश + कोरुटिल्स, 44 बाइट्स

seq -f@%f 0 605e3 32e6|date -uf- +%d.%m.2017

-uअगर GMT मान लिया जाए तो 2 बाइट्स बचा सकता है


  • @0 1970-1-1 है
  • 605000एक सप्ताह ( 604800) प्लस 200 सेकंड है
    • 200 सेकंड। बस काम करना चाहिए क्योंकि साल में केवल 52 सप्ताह होते हैं
  • @32000000 एक साल से थोड़ा अधिक है

seq -f@%1.f 14833e5 605e3 1515e6|date -uf- +%d.%m.%Yआपको 10 बाइट्स बचाता है। आपको संभवतः इसे बैश + कोरुटिल्स के रूप में दावा करना चाहिए , हालांकि।
डिजिटल ट्रामा

7

पॉवरशेल, ५१ ४S

0..52|%{date((date 2017-1-1)+7.*$_)-u %d.%m.%Y}

काफी सरल। 2017-01-01 एक रविवार है, इसलिए प्रत्येक सात दिनों के बाद है। हम दो बाइट्स बचा सकते हैं अगर हमें केवल स्क्रिप्ट की आवश्यकता है जो मेरे जीवनकाल में काम कर रहे हैं:

0..52|%{date((date 17-1-1)+7.*$_)-u %d.%m.%Y}

1
आप कुछ बाइट्स बचा सकते हैं यदि आप, एक स्ट्रिंग के बजाय, दिनों की संख्या का दोहरा प्रतिनिधित्व करते हैं, अर्थात (date 2017-1-1)+7.*$_इस जवाब को
Danko Durbić

@ DankoDurbić: ओह, वाह। मुझे केवल intअब तक के दिनों के लिए टिक्स और स्ट्रिंग्स को जोड़ने का पता था । जानकर अच्छा लगा।
जॉय

5

एक्सेल VBA 106 91 79 बाइट्स

Sub p()
For i = #1/1/2017# To #12/31/2017#
If Weekday(i) = 1 Then MsgBox i
Next
End Sub

@Radhato के लिए धन्यवाद 15 बाइट्स बचाए

1/1/2017 रविवार को मान लिया गया है कि यह 12 और बाइट्स बचाएगा।

Sub p()
For i = #1/1/2017# To #12/31/2017#
MsgBox i
i = i + 6
Next
End Sub

धन्यवाद @Toothbrush 66 बाइट्स

Sub p:For i=#1/1/2017# To #12/31/2017#:MsgBox i:i=i+6:Next:End Sub

संपादित करें: (उप और अंत उप आवश्यक नहीं है) 52 बाइट्स

For i=#1/1/2017# To #12/31/2017#:MsgBox i:i=i+6:Next

I = 42736 से 43100 के लिए i = # 1/1/2017 # के लिए # 12/31/2017 # के लिए जप में सुधार किया जा सकता है और फिर प्रारूप (...) को केवल i से बदल दिया जा सकता है
Radhato

@ राधारो लेकिन क्या बाइट का आकार नहीं बढ़ेगा?
रोहन

मैं इसे .. 96 करने के लिए इसे कम कर देता है कम से कम thats मैं क्या गिना पर लगता है lol
Radhato

हाँ इसने किया। धन्यवाद
रोहन

1
@newguy Sub p:For i=#1/1/2017# To #12/31/2017#:MsgBox i:i=i+6:Next:End Subपूरी तरह से मान्य VBA कोड है और केवल 66 बाइट्स है। तथ्य यह है कि अतिरिक्त रिक्त स्थान में VBA संपादक जोड़ता है अप्रासंगिक है।
टूथब्रश

4

PHP, 67 बाइट्स

इस तथ्य का उपयोग करते हुए कि PHP स्वचालित रूप से अघोषित लूप चर के लिए मूल्य 1 असाइन करता है, और लिनक्स युग का उपयोग करते हुए,

<?php for(;54>$t+=1;)echo date("d.m.Y\n",604800*($t)+1482624000);?>

PPCG में आपका स्वागत है! मेरा मानना ​​है कि यह 59 बाइट्स के रूप में गिना जा सकता है (हालांकि मैं खुद पीएचपी में गोल्फ नहीं करता हूं)।
जोनाथन एलन

4
<?for(;54>++$t;)echo date("d.m.Y\n",605e3*$t+148263e4);बस ठीक होना चाहिए
6

2
हमेशा कुछ नए PHP गोल्फर देखने के लिए अच्छा है! आप उपयोग करने की अनुमति php -rहै ताकि आप की जरूरत नहीं है <?phpऔर ?>के रूप में इस भरोसा कर सकते हैं और इसलिए 59 bytesतरह @JonathanAllan सही ढंग से कहा। आपको कोष्ठक की आवश्यकता नहीं है $t। कुछ अन्य गोल्फ और आप (मेरे समय क्षेत्र में) के for(;++$t<54;)echo date("d.m.Y\n",605e3*$t+14827e5);लिए समाप्त होते हैं 51 bytes। आप "\ n" को वास्तविक लाइन ब्रेक से बदल सकते हैं जो केवल 1 बाइट है इसलिए यह 51 बाइट है।
क्रिस्टोफ़

1
धन्यवाद @Christoph मैं एक और दृष्टिकोण की कोशिश कर रहा हूं, जल्द ही अपडेट होगा
शिनमिगामी

अन्य सभी संकेतों के अलावा, आप समयक्षेत्र सुरक्षा के gmdateबजाय उपयोग करना चाह सकते हैं date
टाइटस

4

k6, 32 बाइट्स

`0:("."/|"."\)'$2017.01.01+7*!53

संक्षिप्त विवरण:

                2017.01.01+7*!53 /add 0, 7, 14, ..., 364 to January 1st
   ("."/|"."\)'$                 /convert to string, turn Y.m.d into d.m.Y
                                 /   split by ".", reverse, join by "."
`0:                              /output to stdout (or stderr), line by line

काश, यह केवल बंद-स्रोत, ऑन-रिक्वेस्ट-केवल दुभाषिया में काम करने लगता है।

बंद-स्रोत दुभाषिया में कमांड चलाना।


4

पाइके , 26 24 बाइट्स

53 Fy17y"RVs6)c"%d.%m.%Y

इसे ऑनलाइन आज़माएं!

53 F                     - for i in range(53):, printing a newline between each
    y17y"                -  Create a time object with the year 2017. (Month and days are initialised to 1.)
         RV  )           -  Repeat i times:
           s6            -   Add 1 week
              c"%d.%m.%Y -  Format in "dd.mm.yyyy" time

या 11 बाइट्स

यदि आउटपुट प्रारूप को अनदेखा करने की अनुमति दी जाती है

y17y"52VDs6

इसे ऑनलाइन आज़माएं!

y17y"       - Create a time object with the year 2017. (Month and days are initialised to 1.)
     52V    - Repeat 52 times:
        D   -  Duplicate the old time
         s6 -  Add 1 week

3

आर, 79 67 58 बाइट्स

cat(format(seq(as.Date("2017/01/01"),,7,53),"\n%d.%m.%Y"))

जनवरी का पहला दिन रविवार होने के कारण, यह स्निपेट दिनों का एक क्रम बनाता है, हर 7 दिन में 01-01-2017 से शुरू होकर 31-12-2017 तक, उन्हें वांछित प्रारूप में प्रारूपित करें और उन्हें प्रिंट करें।


यह बात 41 बाइट्स के लिए नीचे लाना चाहिएprint(as.Date("2017-01-01")+seq(7,365,7))
गिनती

@count धन्यवाद, लेकिन यह (बजाय "2017/01/01" की यानी "2017/01/01") के लिए आवश्यक उत्पादन मुद्रित नहीं होगा
plannapus

3

Befunge-98 (PyFunge) , 99 95 93 85 बाइट्स, लीडिंग न्यूलाइन

@JoKing द्वारा उनके लिए बहुत-बहुत धन्यवाद सभी अनुकूलन किए गए थे

s :1g2/10g\%:d1p10g\`+:b`#@_:1\0d1g#;1+:a/'0+,a%'0+,'.,j;a"7102"4k,d1g7+
>8><><>><><>

इसे ऑनलाइन आज़माएं!

मुझे ऐसा लगा कि हम यहां कुछ परिश्रम करने से चूक रहे हैं इसलिए मैंने अपनी पसंदीदा एस्कॉर्टिक भाषा में एक समाधान बनाया।

स्पष्टीकरण :
>8><><>><><>12 महीने की लंबाई को एन्कोड करता है
s। पुराने दिन को खाली स्थान पर
:1g2/संग्रहीत करें खाली पंक्ति से एक ASCII मान प्राप्त करें और इसे दो से विभाजित करें यह हमें दिए गए महीने की लंबाई प्रदान करता है Ex: 8 = 56 में ASCII = 56%: 2 = 28 => महीने (फरवरी) में 28 दिन होते हैं अगला इंसट्रक्शन (डुह) छोड़ें नंबर को 1 इंडेक्सिंग में बदलें, प्रिंट करें, अंत में जोड़ें स्टैक से 0 का उपयोग करें कूदने के लिए नहीं और जाने के लिए उपयोग करें प्रिंट शेड्यूल फिर से अगली बार से कूदने के लिए 1 का उपयोग करें
10g\% पहले बचाए गए दिन को प्राप्त करें और इसे महीने की लंबाई से मोडुलो करें जो हमें अगले महीने में तारीख को बदलने की अनुमति देता है यदि पुरानी तारीख है तो
:d1pनए अपडेटेड दिन
10g\`+टेस्ट की एक प्रति सहेजें। > नई तिथि => हमने अगले महीने में संक्रमण किया => 1 महीने में काउंटर
:b`टेस्ट जोड़ें अगर महीने काउंटर> 11 का मतलब है कि हम वर्ष के अंत तक पहुंच गए (0 इंडेक्सिंग का उपयोग करके)
#@_पिछले के आधार पर यदि कार्यक्रम समाप्त हो गया
:1\0d1gतो स्टैक को फिर से चालू करें। तो यह इस तरह दिखता है:Month, 1, Month, 0, Day
#
1+:a/'0+,a%'0+,'.,.
j;;;
a"7102"4k, प्रिंट 2017\n
d1gदिन मूल्य फिर से पाने से 7+पहले एक सप्ताह जोड़ें


@JoKing Omc इतना स्पष्ट अनुकूलन! मैं उस एक को कैसे याद कर सकता था? धन्यवाद।
IQuick 143

1
कुछ और बाइट्स बंद। इसे ऑनलाइन आज़माएं! इसके बजाय एक -17 को एक टिप्पणी में बदलने के लिए, एक महीने के काउंटर के लिए 0 आधारित अनुक्रमण का उपयोग करने से और एक इसे एक-लाइनर में बदलने से
जो किंग

@JoKing वाह, आपने बहुत सारी गोल्फिंग की है। Lemme इसे उत्तर में जोड़ें।
IQuick 143

1
नरक, क्यों दिन 0 के रूप में अच्छी तरह से अनुक्रमित नहीं बनाते हैं, और सभी में से किसी भी आरंभीकरण को करने से बचाते हैं! 85 बाइट्स
जो किंग

3

जावास्क्रिप्ट, 111 106 बाइट्स

for(i=14833e8;i<1515e9;i+=605e6)console.log(new Date(i).toJSON().replace(/(....).(..).(..).*/,'$3.$2.$1'))

नोट: स्टैक एक्सचेंज का कंसोल पूरी सूची को प्रदर्शित करने के लिए पर्याप्त लंबा नहीं है, इसलिए यहां अलग स्निपेट के रूप में पहली छमाही है:

for(i=14833e8;i<15e11;i+=605e6)console.log(new Date(i).toJSON().replace(/(....).(..).(..).*/,'$3.$2.$1'))

कस्टम प्रारूप में मेरी लागत 40 बाइट है ...


2

पर्ल 5 , 64 बाइट्स

use POSIX;print strftime"%d.%m.%Y\n",0,0,0,7*$_+1,0,117for 0..52

इसे ऑनलाइन आज़माएं!

2017 का कार्य दिया गया था, किसी भी वर्ष नहीं, इसलिए मैंने इसमें हार्डकोड किया:

  • 117 (जो वर्ष 2017 के लिए कठिन है, 1900 + 117)
  • +1 क्योंकि 2017 में 1 जनवरी रविवार है
  • 0..52 क्योंकि 2017 में 53 रविवार हैं

POSIX एक कोर मॉड्यूल है और इसे हमेशा Perl5 के साथ इंस्टॉल किया जाता है। 101 बाइट्स में मॉड्यूल का उपयोग किए बिना ही व्हाट्सएप को हटाते हुए:

$$_[5]==117&&printf"%02d.%02d.%d\n",$$_[3],$$_[4]+1,$$_[5]+1900
  for map[gmtime(($_*7+3)*86400)],0..1e4

2

रूबी, 75 बाइट्स

तारीखों का पता लगाने के लिए सीधा समाधान Time

t=Time.new 2017
365.times{puts t.strftime("%d.%m.%Y")if t.sunday?
t+=86400}

1
यदि आप एक पूरे सप्ताह (604800 सेकंड) को जोड़ते हैं, तो आपको रविवार के लिए जांचने की आवश्यकता नहीं है, बस 53 बार दोहराएं।
जीबी

1
यदि आप @ जीबी द्वारा सुझाई गई ट्रिक करते हैं और अब रविवार के लिए चेक नहीं करते हैं, तो आप इसके साथ आरंभ भी कर सकते हैं t=Time.new 1और फिर t.strftime"%d.%m.2017"-1 बाइट के लिए कर सकते हैं ।
मूल्य इंक

2

एसएएस, 52 50 बाइट्स

सहेजे गए 2 बाइट @ user3490 के लिए धन्यवाद।

data;do i=20820to 21184 by 7;put i ddmmyyp10.;end;

आपको एक डेटासेट निर्दिष्ट करने की आवश्यकता नहीं है - केवल data;इसके बजाय उपयोग करें data c;और जो 2 बाइट्स बचाता है। मुझे लगता है कि आपको इसकी आवश्यकता है run;
15:34 पर user3490

@ user3490 धन्यवाद, मुझे इसकी जानकारी नहीं थी। मुझे लगता है कि इसके बराबर है data _null_? साथ ही, runयदि यह लापता है तो बयान निहित है।
J_Lard

काफी समतुल्य नहीं - आप datanनामकरण सम्मेलन के बाद एक आउटपुट डेटासेट के साथ समाप्त होते हैं ।
user3490

2

गणितज्ञ 90 84 बाइट्स

बहुत चिंताजनक। नंबरमैन और स्कॉट मिलनर ने क्रमशः 5 और 1 बाइट्स बचाए।

Column[#~DateString~{"Day",".","Month",".","Year"}&/@DayRange["2017","2018",Sunday]]

क्या आपको जरूरत है Most@? आउटपुट इसके बिना समान प्रतीत होता है।
नंबरमान

1
@numbermaniac, धन्यवाद। Most2018 में पहले रविवार से बचने के लिए था। मैंने मूल रूप से कोड का परीक्षण किया था, बिना Mostवर्षों के, 2011, 2012, जिसमें 2012 में पहले रविवार को आउटपुट में शामिल किया गया है। (इसलिए मैंने इसे कोड में शामिल किया है।) अजीब, Most2017-18 के लिए आवश्यक नहीं है। न ही Mostपरिणाम पर कोई स्पष्ट प्रभाव पड़ता है। रहस्यमय!
डेविड

1

VBA, 81 बाइट्स (शायद 64)

Sub p()
For i = 0 To 52
MsgBox format(42736 + i * 7, "dd.mm.yyyy")
Next i
End Sub

मेरी पहली पोस्ट। कार्यदिवस के लिए जाँच को हटाकर और हर 7 वें दिन को निर्दिष्ट करके newguy के समाधान पर निर्माण करना। तिथियों को हटाने से एक टुकड़ा 12 बाइट्स बचाता है। 42736 1/1/2017 है। आउटपुट तिथि प्रारूप सिस्टम सेटिंग पर निर्भर करता है। क्या इसकी अनुमति है? यदि ऐसा है, तो यह 64 बाइट्स है क्योंकि आपको प्रारूप विधि की आवश्यकता नहीं है ।

MsgBox #1/1/2017# + i * 7

आप बहुत सारे श्वेत स्थान को हटा सकते हैं जो ऑटोफ़ॉर्मेट है। उदाहरण के लिए, For i=0To 52और Format(42736+i*7,"dd.mm.yyyy")। इसके अलावा, आप के Nextबजाय बस का उपयोग कर सकते हैं Next i
इंजीनियर टोस्ट

1

एएचके , 67 बाइट्स

d=20170101
Loop,52{
FormatTime,p,%d%,dd.MM.yyyy
Send,%p%`n
d+=7,d
}

यहां कुछ भी जादुई नहीं होता। मैंने इससे छोटा साधन खोजने की कोशिश की FormatTime लेकिन मैं असफल रहा।


1

जावा 8+, 104 100 99 बाइट्स

()->{for(int t=0;t<53;)System.out.printf("%1$td.%1$tm.2017%n",new java.util.Date(t++*604800000L));}

जावा 5+, 109 105 104 बाइट्स

void f(){for(int t=0;t<53;)System.out.printf("%1$td.%1$tm.2017%n",new java.util.Date(t++*604800000L));}

की दिनांक-क्षमताओं का उपयोग करता है printfप्रारूप ।

इसे स्वयं परखें!

जमा पूंजी

  1. 104 -> 100: लूप मान और गुणक को बदल दिया।
  2. 100 -> 99: लूप को गोल्फ दिया

1

टी-एसक्यूएल, 94 बाइट्स

DECLARE @ INT=0,@_ DATETIME='2017'W:SET @+=1SET @_+=7PRINT FORMAT(@_,'dd.MM.yyy')IF @<52GOTO W

यदि आपको SQL GOTO या WHILE पसंद नहीं है, तो यहां 122 बाइट्स CTE समाधान है

WITH C AS(SELECT CAST('2017'AS DATETIME)x UNION ALL SELECT x+7FROM C WHERE X<'12-31-17')SELECT FORMAT(x,'dd.MM.yyy')FROM C

आपका पहला समाधान शुरू 08.01.2017नहीं होता है01.01.2017
Grabthefish

1
आपके समाधान में बहुत अच्छी चाल। बहुत बढ़िया। मैं उन्हें उधार लेने का विरोध नहीं कर सका। ;)
AXMIM


1

ग्रूवी, 81 77 63 60 56 बाइट्स

d=new Date(0);53.times{printf('%td.%<tm.2017%n',d);d+=7}

उपरोक्त को ग्रूवी लिपि के रूप में चलाया जा सकता है।

मेरा पहला कोड गोल्फ प्रविष्टि है। सौभाग्य से, वर्ष 1970 एक लीप वर्ष नहीं था, इस प्रकार इसका उपयोग आधार के रूप में किया जा सकता है।

डेनिस के लिए धन्यवाद, यहाँ: ऑनलाइन कोशिश करो!


प्रोग्रामिंग पहेलियाँ और कोड गोल्फ में आपका स्वागत है! यदि आप रुचि रखते हैं, तो यहां एक पर्मलिंक है: इसे ऑनलाइन आज़माएं!
डेनिस

धन्यवाद @Dennis मैं यह नहीं जानता था :)
क्रिस्टियन

आप समय ब्‍लॉक 53.times{printf('%td.%<tm.2017%n',new Date(0)+it*7)}, 52 बाइट के अंदर दिनांक को ले जाकर चार बाइट बचा सकते हैं । ग्रूवी के सम्मान की रक्षा यहाँ ...
मत्तीस बर्जलैंड

1

सी #, 138 111 102 बाइट्स

जोहान डू टिट के लिए 9 और बाइट्स धन्यवाद !

केविन क्रूज़सेन के सुझावों के लिए धन्यवाद 27 बाइट्स सहेजे गए !

()=>{for(int i=0;i<53;)Console.Write(new DateTime(2017,1,1).AddDays(7*i++).ToString("dd.MM.yyyy\n"));}

बेनामी फ़ंक्शन जो 2017 में सभी रविवारों को प्रिंट करता है।

पूर्ण कार्यक्रम अनप्लग्ड विधि के साथ:

using System;

class P
{
    static void Main()
    {
        Action f =
        ()=>
        {
            for (int i = 0; i < 53; )
                Console.Write(new DateTime(2017, 1, 1).AddDays(7 * i++).ToString("dd.MM.yyyy\n"));
        };



        f();
    }
}

1
यह सिर्फ उपयोग करने के लिए आसान नहीं है .AddDays(7*i++)? फिर .DayOfWeek<1चेक की कोई जरूरत नहीं है । हम जानते हैं कि 01-01-2017 एक रविवार है, और वहाँ से हम सिर्फ 7 दिन जोड़ सकते हैं।
केविन क्रूज़सेन

2
इस बारे में निश्चित नहीं है - सभी कोड गोल्फ में मैं भाग लेता हूं, मैंने हमेशा पूर्ण नाम स्थान का उपयोग किया है - लेकिन क्या आप Systemवहां कुछ s गायब नहीं कर रहे हैं - System.DateTimeऔर System.Console.Write?
अनुगमन

शांत लेकिन आप बाइट्स के एक जोड़े को बचा सकते हैं:()=>{for(int i=0;i<53;)Console.Write(new DateTime(2017,1,1).AddDays(7*i++).ToString("dd.MM.yyyy\n"));};
जोहान डु टिट

@ गौमन: हाँ, या तो पूर्ण नामस्थानों का उपयोग किया जाना चाहिए, या usingबयानों को बाइट की गिनती में शामिल किया जाना चाहिए।
राजनागुल

3
@adrianmp: usingकोड को चलाने के लिए आवश्यक कथनों को गिना जाना चाहिए। इस मेटा प्रश्न को देखें: क्या मुझे आयात का उपयोग करने की आवश्यकता है या क्या मैं एक कक्षा की खोज कह सकता हूं?
raznagul

1

सी #, 110 109 बाइट्स

using System;()=>{for(int i=42729;i<43100;Console.Write(DateTime.FromOADate(i+=7).ToString("dd.MM.yyy\n")));}

आप यहां इस कार्यक्रम का आनंद ऑनलाइन ले सकते हैं

इस समाधान में हम:

  • डेटाइम से "AddDay ()" से बचने के लिए OLE स्वचालन तिथि (OADate) का उपयोग करें।
    FromOADate()बड़ा लगता है, लेकिन यह बराबर हैnew DateTime(2017,1,1)

  • लूप को 2016 के अंतिम रविवार को शुरू करें। हमें +=केवल ऑपरेटर के साथ वेतन वृद्धि करने की अनुमति दें । यह ऑपरेटर वेतन वृद्धि के बाद मान लौटाता है।

  • तारीख छापने से पहले रविवार से रविवार तक कूदने के लिए 7 दिनों की वृद्धि।

  • 2017 के आखिरी रविवार को हिट होने के बाद हम रुक जाते हैं।

  • दो पात्रों को बचाने के Debugबजाय उपयोग करेंConsole

  • स्पष्ट चर घोषणा और असाइनमेंट होने से बचें


जब तक अन्यथा निर्दिष्ट, हमारे चूक कहते हैं कि तुम एक प्रदान करना चाहिए समारोह या कार्यक्रम (यानी नहीं एक टुकड़ा), और आप की जरूरत है डिबग और दिनांक समय अर्हता : मैं जोड़ने की सलाह देते हैं using System;और का उपयोग करने जा Consoleसे Debug(जो अपने आप कुशल एक बालक है, लेकिन मैं यह कर सकते हैं 'इसके बारे में मेटा पर कोई टिप्पणी नहीं पाते)।
विजुअलमेल

1
@VisualMelon मैं का पालन किया है "एक समारोह प्रदान करते हैं" और मैं भी की जगह है Debugके लिए Consoleके बाद से Debugएक विशिष्ट शामिल की आवश्यकता है। हालाँकि, मैंने 'उपयोग प्रणाली' का अनुपालन नहीं किया क्योंकि इस भाषा में मेरे प्रतियोगी ऐसा नहीं करते हैं। इसके अलावा, आप एक वर्ग के बाहर कोड नहीं कर सकते हैं जिसे स्वयं एक नामस्थान के भीतर परिभाषित करने की आवश्यकता है। मुझे पूरा यकीन है कि इस साइट पर अधिकांश c # उत्तर में वह शामिल नहीं है। तो अब क्या, हम इन सभी उत्तरों को कचरे में फेंक देते हैं? क्या हम उन सभी को उन्हें मजबूर करने के लिए मजबूर करते हैं? यदि ऐसा है, तो समुदाय कोडगुल्फ़ से पूरी तरह से प्रतिबंध लगा सकता है।
AXMIM

ये 'नियम' वही हैं जो समुदाय ने समय के साथ तय किए हैं (और मेटा पर प्रलेखित)। हम उत्तरों को कम नहीं करते हैं, हम टिप्पणी करते हैं और उन्हें आगे नहीं बढ़ाते हैं। जब वे उन्हें ठीक करते हैं, तो हम उभारने के लिए स्वतंत्र होते हैं। दोनों अन्य C # उत्तरों में यह सुझाव है कि उन्हें usingनिर्देश जोड़ना चाहिए या विधियों और प्रकारों को पूरी तरह से योग्य बनाना चाहिए , कृपया इसे व्यक्तिगत रूप से न लें। मैं एक लंबे समय तक सी # गोल्फर हूं, और मैं सराहना करता हूं कि नियम कैसे मनमाने लगते हैं, इसलिए जब मैं कर सकता हूं तो मुझे सही दिशा में लोगों को नंगा करना पसंद है। मैं विशेष रूप से 'सी' का जवाब देता हूं क्योंकि मुझे इस मामले में अपेक्षाकृत अच्छी जानकारी है।
विजुअलमेल

1
@VisualMelon मेला काफी, मैं वैसे भी यहाँ सिर्फ एक राहगीर हूँ। इसलिए मैं यहाँ रहते हुए आपके नियमों को स्वीकार करूँगा। इसलिए, मैंने इस बार अपने उत्तर का अनुपालन करने का प्रयास किया है।
AXMIM

1
मुझे ठीक लगता है! मूल दृष्टिकोण के लिए +1। और आपको स्थान की आवश्यकता नहीं है using System;(मुझे लगता है कि जानबूझकर नहीं था) तो 109 बाइट्स है।
विजुअलमेल

1

TSQL, 112 105 बाइट्स

SELECT CONVERT(VARCHAR,DATEADD(d,number*7,42734),104)FROM master..spt_values WHERE type='p' AND number<53

डेमो

T-SQL Convert Syntax


आप की जगह 2 बाइट्स बचा सकता DAYद्वारा d। यह वही करता है।
AXMIM

+1 के '20170101'साथ बदलकर आप एक और 3 बाइट्स बचा सकते हैं 42734। तारीखें संख्या हैं। समय संख्या का दशमलव भाग है।
AXMIM

1

जावास्क्रिप्ट (ईएस 6), 123 बाइट्स

यह मेरी पहली पोस्ट यहाँ है, हैलो!

a=x=>`0${x}.`.slice(-3);[].map.call('155274263153',(x,i)=>{for(j=0;j<4+(2633>>i&1);j++)console.log(a(+x+j*7)+a(i+1)+2017)})

यह समाधान हार्डकोड डेटा का उपयोग करता है और विशेष रूप से वर्ष 2017 के लिए काम करने के लिए डिज़ाइन किया गया है। यह बिना किसी तारीख / समय के एपीआई पर निर्भर करता है।

स्ट्रिंग में अंकों के लिए 155274263153, प्रत्येक अंक अपनी स्वयं की एक संख्या है और प्रत्येक लगातार महीने के पहले रविवार को दर्शाता है। पूरे वर्ष के लिए आउटपुट क्रमिक रूप से उन में 7 जोड़कर उत्पन्न किया जा सकता है।

जादू की संख्या के बारे में क्या, 2633लूप में उपयोग किया जाता है?
खैर ... 2633(दशमलव) 101001001001बाइनरी में है। अब उन लोगों का क्या 1मतलब हो सकता है? दाईं ओर से, पहली, चौथी, 7 वीं, 10 वीं और 12 वीं बिट सेट की जाती हैं। यह उन महीनों से मेल खाता है जो पांच रविवार होते हैं, उन लोगों के विपरीत जो केवल चार होते हैं। इस साफ-सुथरी अभिव्यक्ति के लिए तैयार, यह शुरू में इस तरह दिखता था for(j=0;j<4+ +[0,3,6,9,11].includes(i);j++):।

मुझे लगता है कि शेष भाग काफी आत्म-व्याख्यात्मक हैं।


@SIGSEGV: मुझे इसमें बदलाव ECMAScript 2015करने में कोई आपत्ति नहीं है Javascript (ES6), लेकिन ... आपने मेरा कोड तोड़ दिया और मुझे इसे वापस करना पड़ा।
राइनो

ओह, यह समुदाय की सर्वसम्मति है, जिसमें केवल लंबोदर भाग की अनुमति है।
मैथ्यू रोह

@SIGSEGV यहां ऐसा नहीं है। इस लैम्ब्डा में कोड का केवल एक छोटा सा हिस्सा है, और मुझे उस पहचानकर्ता की आवश्यकता है जो इसे कहीं और उपयोग करने में सक्षम हो। a=कोड के बिना वास्तव में टूट गया है
राइनो

1

टी-एसक्यूएल, 79 77 बाइट्स

सलमान ए की मदद करने के बाद अपने जवाब में सुधार करें । मैंने एक लूप का उपयोग करके अपना लिखने का फैसला किया और PRINT

मैं इस 90 बाइट्स समाधान के साथ समाप्त हुआ।

DECLARE @d DATETIME=42734 WHILE @d<43100BEGIN PRINT CONVERT(VARCHAR,@d,104)SET @d=@d+7 END

फिर मैंने टी-एसक्यूएल में वर्तमान नेता को देखा, जो इस उत्तर के साथ वर्क ऑल से 94 बाइट था । इस आदमी को बहुत अच्छी चालें मिली थीं।

  1. केवल चर का नाम बताइए @
  2. साथ लूप GOTOवास्तविक लूप के बजाय
  3. के FORMATबजाय का उपयोग कर एक चरित्र को बचाओ CONVERT। (SSMS2012 + केवल)

इन चालों का उपयोग करते हुए, इस समाधान को नीचे दिए गए समाधान के लिए ट्रिम किया गया था जो कि 79 बाइट्स है।

DECLARE @ DATETIME=42734G:PRINT FORMAT(@,'dd.MM.yyy')SET @+=7IF @<43100GOTO G

आप 2 बाइट्स को @ = @ + 7 से @ + = 7 में बदलकर और 7 और IF के बीच के स्थान को हटाकर बचा सकते हैं।
वर्किंग ऑल

इस पोस्ट में , जहाँ मुझे सभी ट्रिक्स मिली हैं, आपकी भी मदद कर सकते हैं।
वर्किंग ऑल

1
@WORNALL अद्भुत, मैं इस बात से अनजान था कि हम ऐसा कर सकते हैं। बहुत बहुत धन्यवाद।
AXMIM

1

ऑक्टेव , 37 बाइट्स

अन्य सभी गैर-गोल्फ भाषाओं की तुलना में बहुत कम है, और यह जेली के साथ भी जुड़ा हुआ है! ऑक्टेव जाने का रास्ता! :)

disp(datestr(367:7:737,'DD.mm.2017'))

इसे ऑनलाइन आज़माएं!

सौभाग्य से, वर्ष 2 ADबिल्कुल वर्ष जैसा दिखता है 2017 AD। दोनों एक रविवार को शुरू और समाप्त होते हैं, और न ही एक लीप वर्ष होता है। यह बहुत सारे बाइट्स बचाता है, क्योंकि 367:7:737यह काफी कम है 736696:7:737060

यह एक अनुगामी के साथ 01.01.0001प्रारूप पर एक स्ट्रिंग के बाद से , दिनों की संख्या को परिवर्तित करता है ।DD.mm.2017


1

हास्केल , 133 130 बाइट्स

import Data.Time.Calendar
((\[f,g,h,i,j]->i:j:'.':f:g:".2017\n").drop 5.show)=<<take 53(iterate(addDays 7)$fromGregorian 2017 1 1)

इसे ऑनलाइन आज़माएं!

एक कैलेंडर लाइब्रेरी के बिना, 148 144 140 बाइट्स

(\l->last l!l++length l!l++"2017\n").fst.span(>0).(<$>scanl((+).(+28))0[3,0,3,2,3,2,3,3,2,3,2]).(-)=<<[1,8..365]
a!_=['0'|a<=9]++show a++"."

यह अजीब बात है क्योंकि पेडिंग फ़ंक्शन के लिए ऑपरेटर का उपयोग करने से दो बाइट्स बचते हैं, जबकि दूसरा तर्क अप्रयुक्त होता है, क्योंकि कम कोष्ठक की आवश्यकता होती है - p(last l)की तुलना में अधिक है last l!lday/monthसंचयी महीने को घटाकर जोड़े की गणना करके काम साल के दिन से शुरू होता है। महीने की शुरुआत की तारीखें ( scanl((+).(+28))0[3,0,3,2,3,2,3,3,2,3,2]) के रूप में संकुचित हैं । महीना संख्या सकारात्मक तत्वों की संख्या है और दिन संख्या अंतिम सकारात्मक तत्व है।

इसे ऑनलाइन आज़माएं!


0

सी #, 116 114 113 बाइट्स

for(long i=(long)636188256e9;i<636502857e9;i+=(long)605e10)Out.Write(‌​new DateTime(i).ToString("dd.MM.yyyy\n"));

विजुअल स्टूडियो की इंटरएक्टिव खिड़कियों में चलाया जा सकता है (या रोसलिन पर आधारित कोई अन्य C # REPL)

नीचे 113 बाइट्स: केविन क्रूज़सेन के लिए धन्यवाद।


1
क्या आप TryItNow लिंक जोड़ सकते हैं ? इसके अलावा, आप थोड़ी देर के लूप के बजाय फॉर-लूप का उपयोग करके इसे थोड़ा गोल्फ कर सकते हैं:for(long i=(long)636188256e9;i<636502857e9;i+=(long)605e10)Out.Write(new DateTime(i).ToString("dd.MM.yyyy\n"));
केविन क्रूज़सेन

@KevinCruijssen Unfortunaly मैं दिए गए पृष्ठ पर एक लागू संकलक खोजने में सक्षम नहीं हूं। यदि आप इसके साथ संपर्क करना चाहते हैं तो यहां प्रयुक्त तकनीक का एक लिंक दिया गया है: लिंक । वैसे भी नए पाश के लिए धन्यवाद। :)
rmrm

1
जब तक अन्यथा निर्दिष्ट नहीं किया जाता है, हमारी चूक कहती है कि आपको एक फ़ंक्शन या प्रोग्राम (यानी एक स्निपेट नहीं) प्रदान करना चाहिए , और आपको डीबग औरusing System;Console.WriteLine(string)
डेटाइम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.