क्रिसमस की पूर्व संध्या प्रारूप में दिनांक को एनकोड करें


51

जिस दिन यह पोस्ट प्रकाशित हुई थी वह क्रिसमस की पूर्व संध्या थी। कल क्रिसमस होगा। कल क्रिसमस की पूर्व संध्या थी। दो दिनों में यह होगा

Christmas Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve

आपका काम उस तारीख को लेना है जिसे प्रोग्राम चलाया जाता है और इसे क्रिसमस ईव फॉर्मेट में एनकोड करें।

  • यदि आपका प्रोग्राम क्रिसमस पर चलाया जाता है, तो इसे स्ट्रिंग "क्रिसमस" का उत्पादन करना चाहिए।
  • यदि आपका प्रोग्राम क्रिसमस पर नहीं चलाया जाता है, तो इसे स्ट्रिंग "क्रिसमस" का उत्पादन करना चाहिए, इसके बाद स्ट्रिंग "ईव" को बार- nबार, जहां nक्रिसमस तक दिनों की संख्या है।
    • ध्यान दें कि यह अगले क्रिसमस पर आधारित होना चाहिए । उदाहरण के लिए, यदि 26 अप्रैल 2019 को दिन है, तो आपको अपनी गणना 25 दिसंबर 2019 को करनी चाहिए, किसी अन्य क्रिसमस पर नहीं।
    • लीप दिन गिनना याद रखें।
  • क्रिसमस हर साल 25 दिसंबर को होता है।

यह , इसलिए सबसे छोटा कोड जीतता है! ध्यान दें कि लक्ष्य किसी भी भाषा में सबसे छोटा कार्यक्रम खोजने का नहीं है, बल्कि हर विशेष भाषा में सबसे छोटा कार्यक्रम खोजने का है। उदाहरण के लिए, यदि आप सबसे छोटा C ++ प्रोग्राम पाते हैं, तो यह C ++ के लिए इस प्रतियोगिता को जीतता है, भले ही किसी को Pyroon में एक छोटा प्रोग्राम मिल जाए।


7
किसी तरह मैं जानता था कि यह एक PPCG चुनौती थी जिस पल मैंने कार्टून देखा - +1 मुझ से
ब्लैक उल्लू काई

25
एक xkcd कार्टून जो आज प्रकाशित हुआ। imgs.xkcd.com/comics/christmas_eve_eve.png
काला उल्लू काई

7
@BlackOwlKai LMBO मैंने आपकी टिप्पणी तक उस कॉमिक को नहीं देखा। मैंने पहले ही इसे पोस्ट करने की योजना बना ली थी, और बस क्रिसमस की पूर्व संध्या की प्रतीक्षा कर रहा था। महान दिमाग एक जैसा सोचते हैं, मुझे लगता है?
PyRulez

1
क्या दिनांक एक पैरामीटर हो सकता है?
ओलिवियर ग्रेगोइरे

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

जवाबों:


52

स्माइलबासिक, 73 71 67 बाइट्स

?"Christmas";
@L?" Eve"*(D!=P);
P=D
DTREAD OUT,M,D
IF M/D-.48GOTO@L

कार्यक्रम "क्रिसमस" प्रिंट करता है, फिर दिन में हर बार "ईव" प्रिंट करता है, जब तक कि यह 25 दिसंबर तक नहीं हो जाता। (12/25 = 0.48)
चलाने के लिए एक वर्ष तक का समय लग सकता है।


7
शुद्ध प्रतिभा ...
पलटें

7
इसने मुझे स्माइल किया ...
नील

3
अच्छा! मेरा एक जावास्क्रिप्ट समाधान एक समान दृष्टिकोण लेता है। हालाँकि, जावास्क्रिप्ट में, प्रतीक्षा समय केवल एक सर्वोत्तम प्रयास है। SmileBASIC इस संबंध में किस तरह से आगे बढ़ रहा है?
तारगुमां

4
@ 12Me21 जो स्पष्ट रूप से लीप सेकंड के कारण विफल हो जाएगा, यह संस्करण बहुत बेहतर दिखता है।
R

5
बॉक्स के बाहर सोचने और मुझे हंसाने के लिए +1।
टॉम

24

एक्सेल सूत्र, 59 बाइट्स

="Christmas"&REPT(" Eve",DATE(YEAR(NOW()+6),12,25)-TODAY())

4
मुझे लगता है कि YEAR(TODAY()+6)हमेशा सही वर्ष लौटता है, इस प्रकार स्थिति से बचा जाता है।
नील

3
मुझे लगता है कि YEAR(NOW()+6)2 कम बाइट्स के साथ भी काम करता है।
इंजीनियर टोस्ट

2
मुझे लगता है कि = "क्रिसमस" और REPT ("ईव", DATE (YEAR (अब) + 6), 12,26) -NOW ()) और भी छोटा है और मेरा मानना ​​है कि इसे काम करना चाहिए।
JeroendeK

1
NOW()समय शामिल है, इसलिए यह पूर्णांक नहीं होगा और मुझे यकीन नहीं है कि REPTइसकी अनुमति होगी।
12M2121

2
लेकिन यह क्रिसमस के दिन "क्रिसमस" नहीं देता है। चेक="Christmas"&REPT(" Eve",DATE(YEAR(DATE(2018,12,25)+6),12,26)-DATE(2018,12,25))
एंथनी

12

पर्ल 6 , 61 47 बाइट्स

'क्रिसमस' ~ 'Eve'x (Date.today ... ^ {। माह == 12 &&। दिन == 25}) कहें

say 'Christmas'~' Eve'x(Date.today...^/12\-25/)

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

-14 बाइट्स (!) जो किंग के लिए धन्यवाद

Date.today ...^ /12\-25/आज से शुरू होने और क्रिसमस के एक दिन पहले समाप्त होने का क्रम है। ( /12\-25/तारीखों के स्ट्रिंग प्रतिनिधित्व के खिलाफ नियमित अभिव्यक्ति का मिलान किया जाता है।) स्ट्रिंग " Eve"को उस अनुक्रम की लंबाई के बराबर कई बार दोहराया जाता है, और स्ट्रिंग के बाद आउटपुट होता है "Christmas"


क्या आप एक बाइट को बचाने के लिए "महीना> 11" कर सकते हैं?
chrixbittinx

2
चाहेंगे /12.25/काम करते हैं?
कृतिका लिथोस

2
@Cowsquack नहीं, क्योंकि तब यह वर्ष की तारीखों में मेल खा सकता है जैसे12025-12-24
Jo King

मुझे लगता है कि यह मान लेना सुरक्षित है कि ऐसा कभी नहीं होगा
12M2121

8

आर , 112 106 72 बाइट्स

वाया @digEmAll और @ जे। डी। ओ

x=Sys.Date()-1;cat('Christmas');while(!grepl('12-25',x<-x+1))cat(' Eve')

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

मेरा मूल उत्तर इस स्पष्टीकरण से पहले था कि कोड उस तारीख को लेना था जिस पर कोड को इनपुट के रूप में चलाया जाता है। यह कई बाइट्स को बचाने के लिए ऊपर के रूप में संशोधित किया जा सकता है लेकिन मैं परेशान नहीं करूंगा।

function(x,z=as.Date(paste0(strtoi(format(x,"%Y"))+0:1,"-12-25"))-x)cat("Christmas",rep("Eve",z[z>=0][1]))

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

स्पष्टीकरण: हर कोई चर्च में है इसलिए मेरे पास ऐसा करने का समय है। वर्ष निकालें, पूर्णांक के लिए मोटे। उस वर्ष के क्रिसमस और अगले वर्ष के क्रिसमस का वेक्टर बनाएं और इनपुट तिथि और उन दो एक्समेस के बीच दो अंतरों का वेक्टर प्राप्त करने के लिए इनपुट तिथि को घटाएं।

गैर-नकारात्मक एक और cat"क्रिसमस" को उस "ईव्स" के साथ चुनें।


आप केवल yएक बार उपयोग करते हैं ताकि आप इसे सीधे 108 बाइट्स के लिए उपयोग कर सकें।
ग्यूसेप

इसके z[z>=0][1]बजाय काम करेगा min?
ग्यूसेप

73 बाइट्स । अंतिम टिप्पणी के अनुसार, कार्यक्रम को उस दिन के आधार पर पाठ को आउटपुट करना होगा जिस दिन यह चलता है। मेरी क्रिसमस BTW! : D
डाइजेक्जेल

1
72 बाइट्स के लिए तुम्हारा मुड़, @digEmAll। क्रिसमस की बधाई!
J.Doe

8

विंडोज पॉवरशेल , 67 64 63 बाइट्स

for(;1225-'{0:Md}'-f(date|% *ys $i)){$i++}'Christmas'+' eve'*$i

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

के बजाय ormat ऑपरेटर का उपयोग करके 3 बाइट्स 4 बाइट्स (धन्यवाद गायों की वापसी ) को दाढ़ी बनाने के लिए प्रबंधित किया गया , और फिर तुलना करने के बजाय संख्यात्मक मान 1225 से तारीख स्ट्रिंग को घटाया । परिणामी पूर्णांक को सशर्त के लिए एक बूलियन के रूप में व्याख्या की जाएगी, जहां (जो क्रिसमस पर होगा) के रूप में व्याख्या की जाती है (लूप में प्रवेश न करें), और किसी भी अन्य मान के रूप में व्याख्या की जाती है (लूप दर्ज करें)।-f.ToString()-ne0FalseTrue

चूंकि पूर्णांक बाईं ओर है, इसलिए दिनांक स्ट्रिंग को पूर्णांक में बदल दिया जाएगा और गणित पिछले संस्करण के विपरीत, जहां 1225पूर्णांक तुलना के लिए स्ट्रिंग में परिवर्तित हो गया था , के विपरीत किया जाएगा ।

मूल संस्करण


विंडोज पॉवरशेल , 67 बाइट्स

for(;(date|% *ys $i|% tost* Md)-ne1225){$i++};'Christmas'+' eve'*$i

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

forलूप के रूप में whileमूल रूप से लूप का उपयोग करना , क्योंकि यह छोटा है। पाश हालत में हम आज की तारीख (जाँच date, का एक छोटा रूप Get-Date), को पहुंचाया ForEach-Objectहै उर्फ %, रूप है कि वाइल्डकार्ड नाम से एक विधि आह्वान कर सकते हैं का उपयोग करना; इस मामले में विधि है AddDays()पर DateTimeवस्तु, और मूल्य हम इसे है दे $i

यह विधि ForEach-Objectको लागू करने के लिए फिर से पाइप हो जाता है ToString(), प्रारूप स्ट्रिंग के साथ Md(महीने, फिर दिन, न्यूनतम अंक क्योंकि हम जो भी आता है उसकी परवाह नहीं करते हैं)। इस स्ट्रिंग का परीक्षण यह देखने के लिए किया जाता है कि क्या यह -neसंख्या के बराबर नहीं है 1225, जो तुलना के लिए एक स्ट्रिंग में बदल जाएगी, जिससे मुझे उद्धरण मिलेंगे।

यही कारण है कि यह कोई फर्क नहीं पड़ता कि महीने और दिन एकल अंक हैं, यह कभी भी अस्पष्ट नहीं होगा क्योंकि वर्ष का कोई दूसरा दिन नहीं होगा जो इसे कठोर बना देगा 1225

स्ट्रिंग जारी होने तक लूप जारी रहता है 1225 । कार्यक्रम की शुरुआत में, $iशून्य होगा इसलिए यह आज की तारीख की तुलना करेगा, और लूप कभी भी निष्पादित नहीं करेगा, लेकिन किसी भी अन्य दिन के $iलिए लूप बॉडी में वृद्धि होती है, ताकि हमारे पास कितने दिनों तक की गिनती होगी अगले क्रिसमस, स्वचालित रूप से लीप वर्ष के लिए लेखांकन और इस वर्ष क्रिसमस पारित हुआ या नहीं।

लूप के बाद हम स्ट्रिंग Christmasका गुणा करने के परिणाम के साथ संक्षिप्त स्ट्रिंग का उत्पादन करते eveहैं $i(जो कि क्रिसमस के दिन 0, जिसके परिणामस्वरूप कोई भी नहीं होगा eve)।


जाहिरा तौर पर ;बाद {$i++}बेमानी है? (यह भी वाह कि आपने फिर से
बाजी

@Cowsquack अच्छा है! मैं कैसे ध्यान नहीं दिया ?!
रिश्वतखोर

7

सी # (विजुअल सी # इंटरएक्टिव कंपाइलर) , 89 बाइट्स

Write("Christmas");for(var t=DateTime.Now;$"{t:Md}"!="1225";t=t.AddDays(1))Write(" Eve");

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

-3 बाइट्स @JeppeStigNielsen को धन्यवाद!

मेरी रणनीति बहुत सीधी है:

  1. tवर्तमान दिनांक के लिए एक लूप वैरिएबल को प्रारंभ करें
  2. Eveअगर tक्रिसमस नहीं है तो प्रिंट करें
  3. एक दिन जोड़ें tऔर दोहराएं

मैंने कुछ कट्टर चीजों की कोशिश की, लेकिन इस तरह से सबसे कम बाइट्स की आवश्यकता थी।


... क्या आपको वेतन वृद्धि में खुद को असाइन करने की आवश्यकता है? मेरे सामने डॉक्स नहीं हैं, लेकिन यदि नहीं, तो आप दो बाइट्स अधिक बचा सकते हैं।
स्टैकस्टक

1
ओह, यह एक संरचना है। निश्चित रूप से यह है। कोई बात नहीं।
स्टैकस्टक

1
आप t.Month<12|t.Day!=25छोटे के साथ स्थानापन्न कर सकते हैं $"{t:Md}"!="1225"। यह एक प्रक्षेपित स्ट्रिंग और एक कस्टम डेटाइम स्वरूपण स्ट्रिंग का उपयोग करता है।
जेपी स्टिग नीलसन

6

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

PRINT'Christmas'+REPLICATE(' Eve',DATEDIFF(D,GETDATE(),STR(YEAR(GETDATE()+6))+'-12-25'))

संपादित करें: @BradC के लिए 4 बाइट्स धन्यवाद सहेजे गए।


अच्छा काम। के साथ 2 सहेजें PRINT'Christmas'+...और 2 अधिक का उपयोग करके DATEDIFF(D,बजायDATEDIFF(DAY,
BradC

@ ब्रैड नाइस, धन्यवाद!
नील

5

एपीएल (डायलॉग यूनिकोड) , 76 63 बाइट्स एसबीसीएस

पूरा कार्यक्रम। मान लेता है ⎕IO←0(शून्य-अनुक्रमण)।

⎕CY'dfns'
'Christmas',' Eve'⍴⍨4×12 25⍳⍨⍉2↑1↓⍉date(⍳366)+days⎕TS

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

⎕CY'dfns'd ons लाइब्रेरी में c o p y

⎕TS वर्तमान टी IME रों कूटना के रूप में [वर्ष, माह, दिन, घंटा, मिनट, सेकंड, एमएस]
days[सी]  दिनों की संख्या को खोजने के [n] 1899/12/31 के बाद से 00: 00: 00.000
(⍳366) पहले 366 पूर्णांक जोड़ने (0 ... 365) है कि करने के लिए
date[सी]  दिनांकों को खोजने [n] कि उन संख्याओं के अनुरूप (366 × 7 तालिका; प्रति यूनिट एक स्तंभ)
 स्थानांतरित (7 × 366 तालिका; प्रति यूनिट एक पंक्ति)
1↓ एक पंक्ति (वर्षों ड्रॉप)
2↑ ले पहली दो पंक्तियाँ (महीने और दिन)
12 25⍳⍨ पहले क्रिसमस के सूचकांक को
 चार गुणा करते हैं जो चार
' Eve'⍴⍨ उपयोग द्वारा चरित्र सूची को फिर से
'Christmas ', जोड़ने के लिए कहते हैं

[c]  उस फ़ंक्शन का कोड
[n]  उस फ़ंक्शन के लिए नोट्स


5

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

from datetime import*
d=date.today()
print"Christmas"+" Eve"*(date((d+timedelta(6)).year,12,25)-d).days

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

रिचर्ड क्रॉसली के उत्तर से प्रेरित अपडेट ।

स्पष्टीकरण:

from datetime import*
# get today as a date, so we don't have to worry about rounding errors due to time
d=date.today()
                              # get the year of the Christmas to compare to
                              # if the current date is after this year's Christmas, the 6 day offset will give the next year
                              # otherwise, returns this year
                              (d+timedelta(6)).year
                         # next Christmas minus the current date
                         date(.....................,12,25)-d
# Christmas, plus (number of days until next Christmas) " Eve"s
print"Christmas"+" Eve"*(...................................).days

4

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

require'date'
t=Date.today
puts'Christmas'+' Eve'*(Date.new((t+6).year,12,25)-t)

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

उनके विचार के लिए tsh का धन्यवाद


77 बाइट्स (यानी, 3 बाइट्स बचाएं) इसके putsसाथ प्रतिस्थापित करें p: यह ऑनलाइन लिंक आज़माएं
स्पेंसर डी


4

जावास्क्रिप्ट, 135 131 121 92 88 बाइट्स

मेरा पहला (भोलापन) समाधान ( 135b ):

t=new Date();n=new Date();n.setMonth(11);n.setDate(25);'Christmas'+' Eve'.repeat((n>=t?n-t:(n.setFullYear(n.getFullYear()+1)-t))/864e5)

यह इस वर्ष की 2 तारीखें निर्धारित करता है: अब और क्रिसमस। यदि उत्तरार्द्ध अभी तक पारित नहीं हुआ है, तो यह उन्हें अलग करता है, यदि यह पारित हो गया है, तो अगले वर्ष के क्रिसमस में भिन्न होता है। उपयोग दोहराए जाने की संख्या के लिए या तो भिन्न होता है।

(बॉक्स के बाहर सोचें) की कोशिश ( 131 बी ):

i=0;f=_=>{t=new Date();if(t.getMonth()!=11||t.getDate()!=25){i++;setTimeout(f,864e5)}else{alert('Christmas'+' Eve'.repeat(i))}};f()

इनवॉइस निर्दिष्ट करता है कि किसी दिए गए दिन प्रोग्राम को चलाने के दौरान WHICH आउटपुट की आवश्यकता होती है, लेकिन इसे वापस करने के लिए WHEN निर्दिष्ट नहीं करता है ...

यह सिर्फ एक दिन के लिए 'सो' जाएगा, 1 से एक काउंटर बढ़ाएँ, और तब तक दोहराएं जब तक कि यह आउटपुट देने के लिए एक्समास न हो।

चूंकि जावास्क्रिप्ट 'नींद' समय की गारंटी नहीं देता है, इसलिए वास्तविक परिणाम बंद हो सकता है।

यह alertफ़ंक्शन का उपयोग करने के लिए भी बदसूरत है , जिसका अर्थ है कि वास्तव में शुद्ध जावास्क्रिप्ट के साथ काम नहीं कर रहे हैं, लेकिन ब्राउज़र एपीआई के साथ ही (हम console.log6 अतिरिक्त बाइट्स की कीमत पर उपयोग कर सकते हैं )।

एक बेहतर दृष्टिकोण ( 121 बी ):

t=new Date();i=0;while(t.getMonth()!=11||t.getDate()!=25){t=new Date(t.valueOf()+864e5);i++};'Christmas'+' Eve'.repeat(i)

आज से शुरू करके, एक दिन तक तारीख बढ़ाएँ जब तक कि यह एक्समास न हो जाए, फिर आवश्यक दोहराए जाने की संख्या के लिए उस लूप के काउंटर का उपयोग करें।

सुधार करना (एक minifier से गुजरना और अतिरिक्त 5b शेव करने के लिए 12Me21 की चाल का उपयोग करना) ( 92b ):

for(s='Christmas',t=new Date;t.getMonth()/t.getDate()-.44;)t=new Date(t*1+864e5),s+=' Eve';s

अंतिम स्पर्श ( 88b ):

for(s='Christmas',t=new Date;t.getMonth()/(d=t.getDate())-.44;t.setDate(d+1))s+=' Eve';s
  • उपरोक्त सभी के लिए, REPL मान लिया गया है।
  • वादिम की अधीनता देखें - खदान से बहुत बेहतर!

1
मुझे लगता है कि आप यह t.getMonth()/t.getDate-.48जांचने के लिए उपयोग कर सकते हैं कि तारीख 25
12M2121

1
साइट पर आपका स्वागत है! आप अपने कोड ब्लॉक को बेहतर बनाने के लिए 4 स्थान के इंडेंट का उपयोग कर सकते हैं।
गेहूं जादूगर

1
PPCG में आपका स्वागत है!
झबरा

1
98 , printकी जरूरत है, क्योंकि यह एक प्रोग्राम कार्य नहीं है, जब तक कि 1. आप इसे एक लैम्ब्डा या 2. में बदल जाते हैं आप कहते हैं कि आप एक आरईपीएल उपयोग कर रहे हैं
ASCII-केवल

1
t=new Date(+t+864e5)1 बाइट छोटी है।
एंड्रयू Svietlichnyy

3

VBA (एक्सेल), 108 बाइट्स

रिक्त मॉड्यूल में कॉपी करें। तत्काल खिड़की पर प्रिंट:

Sub X:s="Christmas":d=Now:For t=1 To (DateSerial(Year(d+6),12,25)-d):s=s &" Eve":Next:Debug.Print s:End Sub

नोट: का प्रयोग :पंक्ति विराम के बजाय प्रत्येक पंक्ति में दो बाइट्स की बचत होती है।

ध्यान दें कि उप परिभाषा के बाद कीवर्ड, ऑपरेटर, आदि ... और कोष्ठक के बीच VBA संपादक अतिरिक्त स्थान सम्मिलित करेगा, लेकिन यदि आप इस कोड को कॉपी और पेस्ट करते हैं तो यह काम करेगा (मैं इससे पहले उस स्थान से छुटकारा नहीं पा सकता था &)।

VBA के लिए बुरा नहीं है (एक बार के लिए)।


1
* Christmas: |
केवल

@ ASCII-only: &थ्रो से पहले स्पेस को हटाना एक एरर
बैरनका

-1 बाइट्स। @
ASCII-

1
आप इसे तत्काल विंडो फ़ंक्शन में परिवर्तित करके और इसके लिए अस्थायी चर को हटाकर 71 वर्णों तक काट सकते हैं now। जब आप ऐसा करते हैं, तो उसे कुछ दिखना चाहिए?"Christmas";:For i=1To DateSerial(Year(Now+6),12,25)-Now:?" Eve";:Next
टेलर स्कॉट

3

बैश + जीएनयू तिथि, 72 73 बाइट्स

for((d=0;1`date +%d%m -d$d\day`-12512;d++));{ x+=\ Eve;};echo Christmas$x
  • एक बाइट के !=साथ की जगह बचाई-
  • एक और अतिरिक्त जगह को हटाने
  • -3 बाइट्स को ठीक करें d=0, क्योंकि date -ddayतारीख + 1 है और यह 25/12 पर काम नहीं करता है

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


हम्म, =~लूप सशर्त में काम क्यों नहीं करता है ?
क्रिक्टी लिथोस

क्योंकि लूप स्थिति के लिए एक अंकगणितीय अभिव्यक्ति है, शब्दों को पूर्णांक के लिए
ज़ब्त

3

पायथन 2, 128 बाइट्स / पायथन 3, 130 बाइट्स

बेशक, पायथन 2 के साथ दो कम बाइट्स

from datetime import date as D
T=D.today()
Y=T.year
a=(D(Y,12,25)-T).days
print("Christmas"+" Eve"*[a,(D(Y+1,12,25)-T).days][a<0])


@tsh यह एक अद्भुत दृष्टिकोण है!
iBug



3

बैश , 68 65 61 बाइट्स

Golfed को 4 बाइट धन्यवाद Nahuel Fouilleul का उपयोग करके ``आदेश प्रतिस्थापन और evalएसईडी के स्थान पर eऔरxargs

echo Christmas `eval date\ -d{0..366}day\;|sed /c.25/Q\;cEve`

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

`` कमांड प्रतिस्थापन के अंदर , हमारे पास है

eval शेल कमांड के रूप में निम्न स्ट्रिंग चलाएँ

  • date\ -d{0..366}day\;ब्रेस के विस्तार के तहत {0..366}, स्ट्रिंग में यह परिणाम होता है, इस स्ट्रिंग date -d0day; date -d1day; date -d2day; ... date -d366day;में प्रत्येक कमांड 0 से 366 दिनों के बीच की तारीख की गणना करता है, जिसके परिणामस्वरूप प्रारूप का आउटपुट होता है Wed Dec 26 18:22:33 UTC 2018, प्रत्येक अपनी लाइन में

|sed जिस पर, निम्नलिखित sed कमांड को कॉल करें

  • /c.25/Qयदि रेगेक्स /c.25/का मिलान किया जाता है, तो Qबिना मुद्रण के यूआईटी

  • \;cEve अन्यथा लाइन को बदल दें Eve

सभी आवश्यक Eveसंख्याएँ प्रत्येक अपनी लाइन पर निर्मित होती हैं। यह आउटपुट में कैप्चर किया गया है ``, और शब्द विभाजन के अधीन है, जहां शब्द नईलाइनों पर विभाजित होते हैं। प्रत्येक शब्द को एक तर्क के रूप में खिलाया जाता है echo

echo Christmas ...

प्रत्येक तर्क को echoरिक्त स्थान से अलग करके मुद्रित किया जाता है, जिसके परिणामस्वरूप वांछित आउटपुट होता है।


bashइस समाधान के बारे में वास्तव में बहुत कुछ नहीं है । इसके लिए जीएनयू की आवश्यकता है date, sedऔर seqयद्यपि।
कुसलानंद


@NahuelFouilleul धन्यवाद, xargs से बचने और seq पर बाहर निकलने के लिए eval का उपयोग करने के लिए backtick कमांड प्रतिस्थापन का उपयोग करने की अच्छी चाल
Kritii Lithos

2

सी (जीसीसी) , 157 बाइट्स

मैंने सोचा था कि मैं इसमें शामिल नहीं हो पाऊंगा, time.hलेकिन यह सिर्फ खंड दोष देता है।

#include <time.h>
*t,u;f(){time(&u);t=localtime(&u);t[5]+=t[4]>10&t[3]>25;t[4]=11;t[3]=25;u-=mktime(t);printf("Christmas");for(u/=86400;u++;printf(" Eve"));}

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


IMO आपको बाहर छोड़ देना चाहिए #include <stdlib.h>, जैसे कि यह यहाँ कुछ भी नहीं करता है
ASCII-only

सुझाएँ *t;f(u)बजाय *t,u;f()और #import<time.h>के बजाय #include <time.h>और 5[t=localtime(&u)]के बजायt=localtime(&u);t[5]
ceilingcat

2

ग्रूवी , 66 बाइट्स

d=[]as Date
print'Christmas'+' Eve'*(new Date((d+6).year,11,25)-d)

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

@ ASCII- के सौजन्य से


आपको इसे प्रिंट करने की आवश्यकता है क्योंकि यह एक पूर्ण कार्यक्रम नहीं एक फ़ंक्शन है
ASCII-only

> Chistmas: /
केवल



अपने पहले एक लेने और Groovy 2.5 का उपयोग कर इसे 115 तक नीचे ले जाता है ।
bdkosher


2

स्काला , 116 113 बाइट्स

var d=new java.util.Date
print("Christmas")
while(!(""+d).contains("c 25")){print(" Eve");d.setDate(d.getDate+1)}

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

कहाँ c 25के लिए कम है Dec 25


1
मुझे लगता है कि आप contains("c 25")matches(".*c 25.*")
12Me21

धन्यवाद, तीन बाइट्स कम! Il
Kjetil S.

वाह, अच्छी तरह से किया, तारीख की तारीख अच्छी थी
वी। कोर्टोइस

2

जावास्क्रिप्ट, 86 77 बाइट्स

REPL का उपयोग करना यह होगा

for(c='Christmas',d=new Date;!/c 25/.test(d);d=new Date(+d+864e5))c+=' Eve';c

Kudos से ASCII- केवल के लिए -9 बाइट्स



वाहवाही! तुमने मुझसे बहुत बेहतर किया। क्या मुझे एक अतिरिक्त बाइट दाढ़ी की पेशकश करनी चाहिए? for(c='Christmas',d=new Date;!/c 25/.test(d=new Date(+d+864e5));)c+=' Eve';c या इस प्रकार: for(s='Christmas',t=Date.now();!/c 25/.test(new Date(t+=864e5));)s+=' Eve';s दोनों 76 बाइट्स हैं।
तारगुमां

2

लुआ , 137 118 बाइट्स।

118 बाइट्स

t,d,month,day=os.time,os.date,1,-6year=d"%Y"+(d"%D">"12/25"and 2or 1)print("Christmas",d" Eve":rep(d("%j",t(_G)-t())))

137 बाइट्स (पिछले)

t,d=os.time,os.date a=d"*t"a.year,a.month,a.day=a.year+(d"%m%d">"1225"and 1 or 0),12,25 print("Christmas",("Eve "):rep((t(a)-t())/86400))

यह ध्यान देने योग्य है कि यह LuaJIT (सिंटैक्स त्रुटि) में काम नहीं करता है


PPCG में आपका स्वागत है! अच्छी पहली पोस्ट!
R


1

MATLAB, 91 बाइट्स

n=datetime
x=datetime(year(n+6),12,25)
s='Christmas'
while days(x-n)>=1 n=n+1 s=[s,' Eve'] end

MATLAB गैर-लूपर, 100 बाइट्स

x=datenum(datetime(floor((now+5)/365.2425),12,25))
d=x-now
['Christmas' repmat(' Eve',1,min(d(d>=0)))]

1

स्काला , 123 बाइट्स

ASCII- केवल काम के लिए धन्यवाद।

print("Christmas")
var d=new java.util.Date
while(d.getMonth()<11||d.getDate()!=25){print(" Eve");d.setDate(d.getDate()+1)}

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

स्काला + जोडा-टाइम , 140 बाइट्स

import org.joda.time._
var s="Christmas"
var d=DateTime.now
while(d!=d.withDate(d.year().get(),12,25)){d=d.plusDays(1);s+=" Eve"};println(s)

TIO में नहीं चलता क्योंकि इसके लिए Joda-Time लाइब्रेरी की आवश्यकता होती है।


नो जोडा, 154 । दुख की बात है कि java.util.Dateयहां काम करने के लिए नहीं मिल सकता है: /
केवल


आह @ ASCII- केवल मैंने object Main extends App{}अपनी गिनती में वर्णों की गिनती नहीं की (क्योंकि मैं अपने अन्य स्काला उत्तरों में भी नहीं था)। अगर हम इसे बाहर निकालते हैं तो आप मुझे ^ ^
वी। कोर्टोइस

withDate()कॉल इतना महंगा है ...
वी Courtois

1. याद रखें कि आपको भाषा को "स्काला + जोडा-टाइम" के रूप में निर्दिष्ट करने की आवश्यकता है क्योंकि आप बाहरी पुस्तकालय का उपयोग करते हैं और 2. मेरे परिवर्तनों का उपयोग नहीं करने जा रहे हैं? यह कम है प्लस को पुस्तकालय की आवश्यकता नहीं है: पी
एएससीआईआई-केवल

1

05AB1E , 93 89 बाइट्स

žežfžg)V'ŒÎ[Y¨JŽ9ÚQ#Y`2ô0Kθ4ÖUD2Qi\28X+ë31s<7%É-}‹iY¬>0ëYT`ǝDÅsD12‹i>1ë\1Dǝ¤>2}}ǝVð'»ˆ}J™

इसे ऑनलाइन आज़माएँ या 'आज' की एक स्व-निर्दिष्ट तिथि के साथ इसे ऑनलाइन आज़माएँ

स्पष्टीकरण:

05AB1E में तारीखों के लिए कोई बिल्टइन नहीं है, सिवाय चालू वर्ष / माह / दिन / घंटे / मिनट / सेकंड / माइक्रोसेकंड प्राप्त करने के लिए, इसलिए अधिकांश बाइट्स मैन्युअल गणना के लिए उपयोग किए जाते हैं।

žežfžg)V   # Get the current date and save it in variable `Y`
'ŒÎ       '# Push compressed string "christmas"
[          # Start an infinite loop
 Y¨JŽ9ÚQ   #  If the current date is December 25th:
        #  #   Stop the infinite loop
 Y`2ô0Kθ4ÖUD2Qi\28X31s<7%É-}‹iY¬>0ëYTDÅsD12i>1ë\1Dǝ¤>2}}ǝV
           #  Go to the next day, and set `Y` to it
 ð         #  Push a space " "
 '»ˆ      '#  Push compressed string "eve"
}          # After the infinite loop:
 J         # Join everything on the stack together
          # And make every word title-case (and output the result implicitly)

मेरा यह उत्तर देखने के लिए कि हम अगले दिन कैसे जाते हैं। (पुनश्च: के 1¾ǝसाथ बदल दिया गया है T`ǝ, क्योंकि हम counter_variableकहीं और का उपयोग करते हैं ।)

मेरा 05AB1E टिप देखें (यह समझने के लिए कि शब्दकोश का उपयोग कैसे करें ? और बड़े पूर्णांक कैसे संपीड़ित करें? ) यह समझने के लिए कि क्यों '»ˆहै "eve"; 'ŒÎहै "christmas"; और Ž9Úहै 1225


चतुर गोल्फ!
मिल्कीवेय

0

सी # (विजुअल सी # इंटरएक्टिव कंपाइलर) , 141 बाइट्स

var g=DateTime.Now;Write("Christmas"+string.Concat(Enumerable.Repeat(" Eve",(new DateTime(g.Year+(g.Day>25&g.Month>11?1:0),12,25)-g).Days)));

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


1
मुझे नहीं लगता कि यह 30 नवंबर के लिए काम करता है ...
नील

अब निश्चित है, मैं एक चेक जोड़ना भूल गया था कि यह दिसंबर है या नहीं
अज्ञानता का अवतार

क्या आप महीना> 25 के बारे में निश्चित हैं?
नील

इसे अभी तय करें ...
अज्ञानता

क्या? १: ० निशाचरी? पूर्णांक वापस नहीं करता है
12Me21

0

लाल , 89 86 84 78 76 बाइट्स

-10 बाइट्स ASCII-only को धन्यवाद!

does[a: now prin"Christmas"while[a/3 * 31 + a/4 <> 397][prin" Eve"a: a + 1]]

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



@ ASCII- केवल हम्म, निश्चित रूप से! धन्यवाद!
गैलेन इवानोव



@ ASCII- केवल आपका 76-बाइट संस्करण क्रिसमस पर चलने पर सही परिणाम नहीं देता है: एक तर्क के रूप में दिनांक मैं केवल nowऔर नहीं का उपयोग करने के लिए बेवकूफ महसूस करता हूं now/date। आपके सुधार के लिए धन्यवाद!
गैलेन इवानोव

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