Tarihi Noel Arifesi formatında kodlayın


51

Bu yazının yayınlandığı gün Noel Arifesiydi. Yarın Noel olacak. Dün Noel arifesi arifesiydi. İki gün içinde olacak

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

.

İşiniz, programın çalıştırıldığı tarihi almak ve onu Noel Arifesi formatında kodlamak.

  • Programınız Noel'de çalıştırılıyorsa, "Noel" dizesini çıkarmalıdır.
  • Programınızı Noel çalışmaz ise, çıkış gerektiği dize "Havva" tekrarlanan ardından dizesi "Noel", nbazen, nNoel'e kadar gün sayısını olduğunu.
    • Bunun bir sonraki Noel'e dayanması gerektiğini unutmayın . Örneğin, gün 26 Nisan 2019 ise, hesaplamanızı 25 Aralık 2019 tarihine göre yapmalısınız, başka bir Noel değil.
    • Artık günleri saymayı unutmayın.
  • Noel her yıl 25 Aralık’tır.

Bu , yani en kısa kod kazanır! Ancak, hedefin herhangi bir dilde en kısa programı bulmak değil, her dilde en kısa programı bulmak olduğunu unutmayın. Örneğin, en kısa C ++ programını bulursanız, o zaman birisi Python'da daha kısa bir program bulsa bile, C ++ için bu yarışmayı kazanır.


7
Benden 1 - Nedense bu PPCG ben karikatür gördüğüm an meydan olacaktı biliyordum
Siyah Baykuş Kai

25
Bugün yayınlanan bir xkcd çizgi film. imgs.xkcd.com/comics/christmas_eve_eve.png
Kara Baykuş Kai

7
@BlackOwlKai LMBO Bu komik yorumu bile görmedim. Bunu göndermeyi çoktan planlamıştım ve sadece Noel arifesini bekliyordum. Büyük beyinler aynı şeyi düşünüyor sanırım?
PyRulez

1
Tarih bir parametre olabilir mi?
Olivier Grégoire

1
@ OlivierGrégoire uhm, dilin şu anki tarihi başka bir şekilde alma becerisine sahip olmaması durumunda izin veririm.
PyRulez

Yanıtlar:


52

SmileBASIC, 73 71 67 bayt

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

Program "Noel" i yazdırır, sonra 25 Aralık olana kadar her gün geçtikten sonra "Havva" yazar. (12/25 = 0.48) Koşması
bir yıla kadar sürebilir.


7
saf deha ...
FlipTack

7
Bu beni güldürdü ...
Neil,

3
Güzel! JavaScript çözümlerinden biri de benzer bir yaklaşım benimsiyor. Ancak, JavaScript'te bekleme süresi sadece en iyi çabadır. SmileBASIC bu konuda ne kadar ileri gidiyor?
targumon

4
@ Sıçrama saniyelerinden dolayı açıkça başarısız olacak @ 12Me21, bu sürüm çok daha iyi görünüyor.
08'de

5
Kutunun dışında düşünmek ve beni güldürmek için +1.
Tom,

24

Excel formülü, 59 bayt

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

4
Bence YEAR(TODAY()+6)her zaman doğru yılı verir, böylece durumdan kaçınır.
Neil

3
Bence YEAR(NOW()+6)2 daha az bayt ile de çalışır.
Mühendis Toast

2
Bence = "Noel" ve REPT ("Havva", TARİH (YIL (ŞİMDİ () + 6), 12,26) -Şimdi ()) daha kısa ve çalışması gerektiğine inanıyorum.
JeroendeK

1
NOW()zamanı içerir, yani bir tamsayı olmaz ve REPTbuna izin vereceğinden emin değilim .
12Me21

2
ama bu Noel günü "Noel" vermiyor. Çek="Christmas"&REPT(" Eve",DATE(YEAR(DATE(2018,12,25)+6),12,26)-DATE(2018,12,25))
Anthony

12

Perl 6 , 61 47 bayt

'Noel' deyin ~ 'Eve'x (Date.today ... ^ {. ay == 12 &&. gün == 25})

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

Çevrimiçi deneyin!

Jo King sayesinde -14 bayt (!)

Date.today ...^ /12\-25/bugün başlayan ve Noelden önceki gün biten tarihlerin sırasıdır. (Düzenli ifade /12\-25/, tarihlerin dize gösterimi ile eşleştirilir.) Dize " Eve", bu dizinin uzunluğuna eşit sayıda çoğaltılır ve dizeden sonra çıkar "Christmas".


Bir bayt kaydetmek için "ay> 11" yapabilir misiniz?
chrixbittinx

2
Çalışır /12.25/mı?
Kritixi Lithos,

2
@Cowsquack hayır, çünkü o zamanki gibi yıllarla eşleşebilir12025-12-24
Jo King

Bunun asla gerçekleşmeyeceğini varsaymanın güvenli olduğunu düşünüyorum
23

8

R , 112 106 72 bayt

@DigEmAll ve @ J.Doe üzerinden

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

Çevrimiçi deneyin!

Asıl cevabım, kodun kodun çalıştırıldığı tarihte girileceği konusundaki açıklamadan önceydi. Birçok baytı kurtarmak için yukarıdaki gibi değiştirilebilir ancak rahatsız etmem.

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

Çevrimiçi deneyin!

Açıklama: herkes kilisede, bu yüzden bunu yapacak vaktim var. Yılı çıkarın, tamsayıya zorlayın. O yılın Xmas'ını ve bir sonraki yılın Xmas'ını vektör yapın ve giriş tarihi ile bu iki Xmas arasında iki fark olan bir vektör elde etmek için giriş tarihini çıkarın.

Negatif olmayan olanı seçin ve catbu "Eves" ile "Noel" i seçin.


Yalnızca bir ykez kullanırsınız, böylece doğrudan 108 bayt için kullanabilirsiniz.
Giuseppe

Ayrıca z[z>=0][1]yerine işe yarar minmı?
Giuseppe

73 bayt . Son yoruma göre, programın çalışacağı güne göre metni çıkarması gerekir. Mutlu noeller BTW! : D
digEmAll

1
Sizin için 72 byte , @digEmAll. Mutlu Noeller!
J.Doe

8

Windows PowerShell , 67 64 63 bayt

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

Çevrimiçi deneyin!

Traş başardı 3 bayt 4 bayt (teşekkürler İnekler şarlatan kullanarak) -fyerine Ormat operatörü .ToString()ve sonra sayısal değer 1225 tarih dizesi çıkarılarak yerine ile bir karşılaştırma yapıyor -ne. Ortaya çıkan tamsayı, 0(Noel'de gerçekleşecek olan) koşullara bir Falsedöngü olarak yorumlanacak (döngüye girmeyin) ve diğer herhangi bir değer True(döngüye gir) olarak yorumlanacaktır .

Tamsayı şimdi solda olduğundan, tarih dizgisi 1225tamsayıya dönüştürülecek ve tamsayı karşılaştırma için dizeye dönüştürüldüğü önceki sürümün aksine matematik yapılacaktır .

Orijinal versiyon


Windows PowerShell , 67 bayt

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

Çevrimiçi deneyin!

forBir whiledöngüyü temel olarak döngü olarak kullanmak , çünkü daha kısadır. Döngü koşulunda joker karakter adıyla bir yöntemi çağırabilecek formu kullanarak, geçerli tarihini ( datekısaltılmış bir biçimi Get-Date) ForEach-Objecttakma %adına göre ekleriz; Bu durumda, yöntem nesnenin AddDays()üzerinde DateTimeve verdiğimiz değer $i.

Bu ForEach-Object, ToString()yöntemi çağırmak için yeniden biçimlendirilir, biçim dizgesiyle Md(ay, sonra gün, en az rakam olduğundan sonrakileri umursamayız). Bu dize daha sonra karşılaştırma için bir dizgeye dönüştürülecek -nesayıya eşit olup olmadığını görmek için test edilir 1225, bu da beni alıntılardan kurtarır.

Bu yüzden ayların ve günlerin tek haneli olması önemli değil, asla belirsiz olmayacak çünkü yılın çekeceği başka bir gün yok 1225.

Dize kadar döngü devam eder ise 1225 . Programın başlangıcında $isıfır olacak , bu nedenle bugünün tarihini karşılaştıracak ve döngü asla çalışmayacak, ancak başka bir gün $iiçin döngü gövdesinde artırılır, böylece programa kaç gün kala kalacağız. sonraki Noel, otomatik olarak artık yıllarını hesaba katar ve bu yıl Noel'in geçip geçmeyeceğini belirler.

Döngü bittikten sonra sadece çıkış dize Christmasdize çarpılması sonucu ile birleştirilmiş eveçarpı değerini $i(Noel günü, olacak olan 0hiçbir sonuçlanan eves).


Görünüşe göre ;sonraki {$i++}gereksiz mi? (Ayrıca vay tekrar bash üzerinde yol aldı wow)
Kritixi Lithos

@Cowsquack güzel! bunu nasıl farketmedim?
Britanyalı

7

C # (Visual C # Etkileşimli Derleyici) , 89 bayt

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

Çevrimiçi deneyin!

@JeppeStigNielsen! 'E -3 bayt!

Stratejim oldukça basit:

  1. tGeçerli tarihe bir döngü değişkeni başlat
  2. Noel Evedeğilse yazdırt
  3. Bir gün ekle tve tekrarla

Bazı meraklısı şeyler denedim, ama bu şekilde en az bayt gerekli.


... artımlıda kendisine t atamanız gerekiyor mu? Önümde dokümanlar yok, ancak değilse, iki byte daha fazla tasarruf edebilirsiniz.
Stackstuck

1
oh, bu bir yapı. Tabiki öyle. Boşver.
Stackstuck

1
Daha t.Month<12|t.Day!=25kısa olanı değiştirebilirsiniz $"{t:Md}"!="1225". Enterpolasyonlu bir dize ve özel bir DateTime biçimlendirme dizesi kullanır.
Jeppe Stig Nielsen,

6

T-SQL, 92 88 bayt

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

Düzenleme: @ BradC sayesinde 4 bayt kaydedildi.


İyi iş. PRINT'Christmas'+...Kullanarak DATEDIFF(D,yerine 2 ile 2 tane daha DATEDIFF(DAY,
kazanın

@BradC Güzel, teşekkürler!
Neil

5

APL (Dyalog Unicode) , 76 63 bayt SBCS

Tam program Varsayalım ⎕IO←0(sıfır indeksleme).

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

Çevrimiçi deneyin!

⎕CY'dfns'c O s y dfns kütüphanesi

⎕TS mevcut t ime s olarak [yıl, ay, gün, saat, dakika, saniye, ms] tamp
days[c]  gün sayısını bulmak [n] 00 1899-12-31 tarihi: 00: 00.000
(⍳366) ilk 366 tamsayılar eklemek (0 Buna ... 365)
date[c]  tarihleri bulmak [n] biriminin başına bir sütun), (366 × 7 tablo bu numaralara karşılık
 devrik (7 × 366 tablo; birimin başına bir satır)
1↓ bir satır (yıl damla)
2↑ almak ilk iki satır (aylar ve günler)
12 25⍳⍨ ilk Noel endeksini bulur  , karakter listesini yeniden şekillendirmek için
 dört
' Eve'⍴⍨kullanımıyla bunu buna
'Christmas ', ekler.

[c]  bu işlevin kodu
[n]  bu işleve ilişkin notlar


5

Python 2 , 111 103 bayt

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

Çevrimiçi deneyin!

Güncelleme, Richard Crossley'in cevabından ilham aldı .

Açıklama:

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

JavaScript, 135 131 121 92 88 bayt

İlk (saf) çözümüm ( 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 tarih belirler: şimdi ve bu yılki Noel. İkincisi henüz geçmediyse, sadece onları, geçtiğinde, gelecek yılın Xmas'ına göre farklılaştırır. Tekrar sayısı için her iki farkı da kullanır.

(Çalışmaya Çalışıyor) Kutunun Dışını Düşünün ( 131b ):

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

Challange, belirli bir günde programı çalıştırırken WHICH çıktısının gerekli olduğunu belirtir, ancak geri dönmek için WHEN belirtmez ...

Bu sadece bir gün boyunca 'uyuyacak', bir sayacı 1 artıracak ve çıktısını vermek için Xmas olana kadar tekrarlayacaktır.

JavaScript 'uyku' süresini garanti etmediğinden gerçek sonuç kapalı olabilir.

Ayrıca, alertişlevi kullanmak için de çirkindir , bu aslında saf JavaScript ile değil, tarayıcı API'leriyle de uğraşmak anlamına gelir console.log(6 ekstra bayt karşılığında da kullanabiliriz ).

Daha iyi bir yaklaşım ( 121b ):

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

Bugünden başlayarak tarihi, Noel olana kadar bir gün artırın, ardından gerekli tekrar sayısı için o döngünün sayacını kullanın.

İyileştirme (bir minifierden geçmek ve ekstra 5b'yi tıraş etmek için 12Me21'in numarasını kullanmak dahil) ( 92b ):

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

Son dokunuşlar ( 88b ):

for(s='Christmas',t=new Date;t.getMonth()/(d=t.getDate())-.44;t.setDate(d+1))s+=' Eve';s
  • Yukarıdakilerin tümü için, REPL varsayılır.
  • Vadim'in gönderimini gör - benimkinden çok daha iyi!

1
Sanırım t.getMonth()/t.getDate-.48tarihin 25 Aralık
18

1
Siteye Hoşgeldiniz! Kod bloklarınızın daha iyi görünmesini sağlamak için 4 boşluk girintisi kullanabilirsiniz.
Buğday Sihirbazı

1
PPCG'ye Hoşgeldiniz!
Shaggy

1
98 , printbu bir program, bir işlev değil çünkü tabi olmadıkça size bir repl kullandığınız belirtmektedirler bir lambda veya 2. çevirmek 1.
ASCII sadece

1
t=new Date(+t+864e5)1 bayt daha kısa.
Andrew Svietlichnyy,

3

VBA (Excel), 108 bayt

Boş bir modüle kopyalayın. Hemen penceresine yazdırır:

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

Not:: Satır sonları yerine kullanmak satır başına iki bayttan tasarruf sağlar.

VBA editörünün Alt tanımdan sonra anahtar kelimeler, operatörler, vb ... ve parantez arasına ek boşluklar koyacağına dikkat edin, ancak bu kodu kopyalayıp yapıştırırsanız çalışır (daha önce bu alandan kurtulamadım &).

VBA için fena değil (bir kez).


1
* Christmas: |
ASCII-sadece

@ Yalnızca ASCII: &hata
atmadan

-1 bayt. @ ASCII'ye - yalnızca yazım hatası yakaladığınız için teşekkürler
Barranka

1
Bunu hemen bir pencere işlevine dönüştürerek ve için geçici değişkeni kaldırarak 71 karaktere çıkarabilirsiniz now. Bunu yaptığınızda, bir şeye benzemeli?"Christmas";:For i=1To DateSerial(Year(Now+6),12,25)-Now:?" Eve";:Next
Taylor Scott

3

Bash + GNU tarihi, 72 73 bayt

for((d=0;1`date +%d%m -d$d\day`-12512;d++));{ x+=\ Eve;};echo Christmas$x
  • !=ile değiştirilen bir bayt kaydedildi-
  • başka bir fazladan boşluk kaldırarak
  • Düzeltme -3 bayt d=0, çünkü date -ddaytarih + 1 ve 25 / 12'de çalışmıyor

Çevrimiçi deneyin


Hmmm, neden =~for-koşullu koşulda çalışmıyor ?
Kritixi Lithos

for loop koşulu bir aritmetik ifade olduğundan, kelimeler tamsayıya zorlanır, ayrıca 0 ile başlayan sayılar sekizlik olarak kabul edilir, bu yüzden 1 hazırlanır
Nahuel Fouilleul


3

Bash , 68 65 61 bayt

4 bayt sayesinde golfed Nahuel FOUILLEUL kullanarak ``komut ikamesi ve evalsed yerine evexargs

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

Çevrimiçi deneyin!

İçinde `` komut ikamesi , elimizdeki

eval aşağıdaki dizeyi kabuk komutları olarak çalıştırın.

  • date\ -d{0..366}day\;altında ayracı genişleme ait {0..366}bu dize ile sonuçlanır date -d0day; date -d1day; date -d2day; ... date -d366day;, biçim çıkışında sonuçlanan günümüze gelen 0 ile 366 gün arasında tarihi hesaplama bu dizedeki her komut Wed Dec 26 18:22:33 UTC 2018kendi satırında her biriyle,

|sed bunun üzerine aşağıdaki sed komutlarını çağır

  • /c.25/Qregex /c.25/eşleşirse, Qyazdırmadan uit

  • \;cEve aksi halde çizgiyi olarak değiştirin Eve

Gerekli tüm Eves sayısı her biri kendi çizgisinde üretilir. Bu çıktı yakalanır ``ve sözcüklerin yeni satırlarda bölündüğü yerde sözcük ayırmaya tabidir . Her kelime bir argüman olarak beslenir echo.

echo Christmas ...

Her argüman echoboşluklarla ayrılarak yazdırılarak istenen çıktı elde edilir.


bashBu çözümle ilgili gerçekten özel bir şey yok . Bu GNU gerektirir date, sedve seqolsa.
Kusalananda


@NahuelFouilleul Teşekkürler, xargs önlemek için backtick komut değiştirme kullanarak ve seq dışarı atlamak için eval kullanarak güzel bir hile
Kritixi Lithos

2

C (gcc) , 157 bayt

Dahil etmekten kaçınabileceğimi düşündüm time.hama bu sadece segment hataları verdi.

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

Çevrimiçi deneyin!


IMO dışarı bırakmalısınız #include <stdlib.h>, hiç burada bir şey yapmıyor gibi değil
ASCII sadece

Öner *t;f(u)yerine *t,u;f()ve #import<time.h>yerine #include <time.h>ve 5[t=localtime(&u)]yerinet=localtime(&u);t[5]
ceilingcat


2

Python 3, 106 Bayt

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

2

Scala , 116 113 bayt

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

Çevrimiçi deneyin!

İçin c 25kısa Dec 25.


1
Kullanabileceğin düşünmek contains("c 25")yerinematches(".*c 25.*")
12Me21

Teşekkürler, üç bayt daha az! Jet
Kjetil S.

vay, güzel bitti, buluşma tarihi güzeldi
V. Courtois

2

JavaScript, 86 77 bayt

REPL kullanarak olacak

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

ASCII sadece -9 bayt için Kudos



Bravo! Benden çok daha iyisini yaptın. Fazladan bir bayt tıraş etmeyi önerebilir miyim? for(c='Christmas',d=new Date;!/c 25/.test(d=new Date(+d+864e5));)c+=' Eve';c veya bu değişken: for(s='Christmas',t=Date.now();!/c 25/.test(new Date(t+=864e5));)s+=' Eve';s ikisi de 76 bayttır.
targumon,

2

Lua , 137 118 bayt.

118 bayt

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 bayt (önceki)

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'de çalışmadığını kaydetmeye değer (sözdizimi hatası)


PPCG'ye Hoşgeldiniz! Güzel ilk mesaj!
Rɪᴋᴇʀ


1

MATLAB, 91 bayt

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

MATLAB Lüper olmayan, 100 bayt

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

1

Scala , 123 bayt

Yalnızca ASCII'nin çalışması için teşekkürler.

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

Çevrimiçi deneyin!

Scala + Joda-Time , 140 bayt

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)

Joda-Time kütüphanesi gerektirdiğinden TIO'da çalışmaz.


joda yok, 154 . ne yazık ki java.util.Dateburada çalışmak mümkün olamıyorum : /
ASCII sadece


Ah @ ASCII-sadece object Main extends App{}sayımdaki karakterleri saymadım (çünkü diğer Scala cevaplarımda da yoktu). Bunu dışarı
V. Courtois

withDate()Çağrı ... çok pahalı
V. Courtois

1. harici bir kütüphane kullandığınızdan ve "değişikliklerimi kullanmayacağınız için" Scala + Joda-Time "dilini belirtmeniz gerektiğini unutmayın. daha kısadır ve bir kütüphaneye ihtiyaç duymaz: P
ASCII sadece

1

05AB1E , 93 89 bayt

ž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™

Çevrimiçi deneyin veya öykünmüş bir 'bugün' tarihi ile çevrimiçi deneyin .

Açıklama:

05AB1E, geçerli yıl / ay / gün / saat / dakika / saniye / mikrosaniye değerlerini almak dışında tarihler için yerleşik yapıya sahip değildir, bu nedenle çoğu bayt manuel hesaplamalar için kullanılır.

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

Ertesi gün nasıl gideceğimizi anlamak için bu cevabımı görün . (PS: 1¾ǝyerine başka bir yerde T`ǝkullandığımız için değiştirildi counter_variable.)

Bu 05AB1E ucuna bakınız (bölümler Sözlüğü nasıl kullanılır? Ve büyük tamsayıları nasıl sıkıştırırsınız? ) Neden '»ˆolduğunu anlamak için "eve"; 'ŒÎolduğu "christmas"; ve Ž9Úolduğu 1225.


Zeki golf!
MilkyWay90

0

C # (Visual C # Etkileşimli Derleyici) , 141 bayt

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

Çevrimiçi deneyin!


1
Bunun 30 Kasım'da işe yaradığını sanmıyorum ...
Neil

Şimdi düzeltildi, Aralık olup olmadığına bir çek eklemeyi unuttum
Ignorance'ın

Ay> 25'ten emin misiniz?
Neil

Şimdi düzeltildi ...
Cehalet

? 1: 0 gerekli midir? & bir tamsayı döndürmüyor mu?
12Me21

0

Kırmızı , 89 86 84 78 76 bayt

Sadece ASCII sayesinde -10 bayt!

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

Çevrimiçi deneyin!



Tabii ki @ ASCII-sadece Hmm! Teşekkür ederim!
Galen Ivanov



: Noel çalıştırdığınızda @ ASCII Sadece 76 bayt sürümü doğru sonucu vermez tarihi bir argüman olarak sadece kullanmayan için aptal hissediyorum nowdeğil now/date. Gelişmeleriniz için teşekkür ederiz!
Galen Ivanov

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.