Codifique la fecha en formato de Nochebuena

51

El día que se publicó esta publicación fue Nochebuena. Mañana sera navidad. Ayer fue Nochebuena. En dos días será

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

.

Su trabajo es tomar la fecha de ejecución del programa y codificarlo en formato de Nochebuena.

  • Si su programa se ejecuta en Navidad, debería generar la cadena "Navidad".
  • Si su programa no se ejecuta en Navidad, debería generar la cadena "Navidad", seguida de la cadena "Eva" repetidas nveces, donde nes el número de días hasta Navidad.
    • Tenga en cuenta que esto debe basarse en la próxima Navidad. Por ejemplo, si el día es el 26 de abril de 2019, debe hacer su cálculo en base al 25 de diciembre de 2019, no cualquier otra Navidad.
    • Recuerde contar los días bisiestos.
  • La Navidad es el 25 de diciembre de cada año.

Este es el , por lo que gana el código más corto. Sin embargo, tenga en cuenta que el objetivo no es encontrar el programa más corto en ningún idioma, sino encontrar el programa más corto en cada idioma en particular. Por ejemplo, si encuentra el programa C ++ más corto, entonces gana este concurso para C ++, incluso si alguien encuentra un programa más corto en Python.

PyRulez
fuente
77
De alguna manera supe que esto sería un desafío de PPCG en el momento en que vi la caricatura - +1 de mi parte
Black Owl Kai
25
Una caricatura xkcd que se publicó hoy. imgs.xkcd.com/comics/christmas_eve_eve.png
Black Owl Kai
77
@BlackOwlKai LMBO Ni siquiera vi ese cómic hasta tu comentario. Ya había planeado publicar esto, y estaba esperando la víspera de Navidad. ¿Las grandes mentes piensan igual, supongo?
PyRulez
1
¿Puede la fecha ser un parámetro?
Olivier Grégoire
1
@ OlivierGrégoire uhm, lo permitiré si el idioma no tiene la capacidad de obtener la fecha actual de otra manera.
PyRulez

Respuestas:

52

SmileBASIC, 73 71 67 bytes

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

El programa imprime "Navidad", luego imprime "Eva" cada vez que pasa un día, hasta el 25 de diciembre. (25/12 = 0,48)
Puede tardar hasta un año en ejecutarse.

12Me21
fuente
77
genio puro ...
FlipTack
77
Esto me hizo sonreír ...
Neil
3
¡Agradable! Una de mis soluciones de JavaScript tiene un enfoque similar. Sin embargo, en JavaScript, el tiempo de espera es solo el mejor esfuerzo. ¿Cómo le está yendo a SmileBASIC a este respecto?
targumon
44
@ 12Me21 que obviamente fallaría debido a segundos de salto, esta versión se ve mucho mejor
Rɪᴋᴇʀ
55
+1 por pensar fuera de la caja y hacerme reír.
Tom
24

Fórmula Excel, 59 bytes

="Christmas"&REPT(" Eve",DATE(YEAR(NOW()+6),12,25)-TODAY())
Richard Crossley
fuente
44
Creo que YEAR(TODAY()+6)siempre devuelve el año correcto, evitando así la condición.
Neil
3
Creo que YEAR(NOW()+6)funciona también con 2 bytes menos.
Engineer Toast
2
Creo que = "Christmas" & REPT ("Eve", DATE (YEAR (NOW () + 6), 12,26) -NOW ()) es aún más corto y creo que debería funcionar.
JeroendeK
1
NOW()incluye el tiempo, por lo que no será un número entero y no estoy seguro de que REPTlo permita.
12Me21
2
pero esto no da "Navidad" el día de Navidad. Comprobar="Christmas"&REPT(" Eve",DATE(YEAR(DATE(2018,12,25)+6),12,26)-DATE(2018,12,25))
Anthony
12

Perl 6 , 61 47 bytes

diga 'Navidad' ~ 'Eve'x (Fecha.hoy ... ^ {. month == 12 &&. day == 25})

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

Pruébalo en línea!

-14 bytes (!) Gracias a Jo King

Date.today ...^ /12\-25/es la secuencia de fechas que comienza hoy y termina el día antes de Navidad. (La expresión regular /12\-25/se compara con la representación de cadena de las fechas). La cadena " Eve"se replica varias veces igual a la longitud de esa secuencia, y se emite después de la cadena "Christmas".

Sean
fuente
¿Podría hacer "mes> 11" para guardar un byte?
chrixbittinx
2
Funcionaria /12.25/?
Kritixi Lithos
2
@Cowsquack no, porque entonces podría coincidir con el año en fechas como12025-12-24
Jo King
Creo que es seguro asumir que eso nunca sucederá
12Me21
8

R , 112106 72 bytes

Vía @digEmAll y @ J.Doe

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

Pruébalo en línea!

Mi respuesta original fue antes de la aclaración de que el código debía tomar la fecha en que se ejecuta el código como entrada. Podría modificarse como anteriormente para guardar muchos bytes, pero no me molestaré.

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

Pruébalo en línea!

Explicación: todos están en la iglesia, así que tengo tiempo para hacer esto. Extraer el año, coaccionar a entero. Haga un vector de la Navidad de ese año y la Navidad del próximo año y reste la fecha de entrada para obtener un vector de dos diferencias entre la fecha de entrada y esas dos Navidad.

Elija el no negativo y cat"Navidad" con tantos "Eves".

ngm
fuente
Solo lo usa yuna vez, por lo que puede usarlo directamente para 108 bytes.
Giuseppe
También z[z>=0][1]funcionaría en lugar de min?
Giuseppe
73 bytes . Según el último comentario, el programa debe generar el texto en función del día en que se ejecuta. Feliz navidad por cierto! : D
digEmAll
1
Ajusté el tuyo por 72 bytes , @digEmAll. ¡Feliz Navidad!
J.Doe
8

Windows PowerShell , 67 64 63 bytes

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

Pruébalo en línea!

Se las arregló para eliminar 3 bytes 4 bytes (gracias Cows quack ) usando el -foperador ormat en lugar de .ToString(), y luego restando la cadena de fecha del valor numérico 1225 en lugar de hacer una comparación con -ne. El entero resultante se interpretará como un booleano para el condicional donde 0(que sucederá en Navidad) se interpreta como False(no ingrese al bucle), y cualquier otro valor se interpreta como True(ingrese el bucle).

Como el número entero está a la izquierda ahora, la cadena de fecha se convertirá al número entero y se realizarán las operaciones matemáticas, a diferencia de la versión anterior en la que el 1225número entero se convirtió en cadena para la comparación.

Versión original


Windows PowerShell , 67 bytes

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

Pruébalo en línea!

Usar un forciclo como un whileciclo básicamente, porque es más corto. En la condición de bucle, verificamos la fecha actual ( dateuna forma abreviada de Get-Date), canalizada al ForEach-Objectalias de %, utilizando el formulario que puede invocar un método por nombre comodín; en este caso, el método está AddDays()en el DateTimeobjeto y el valor que le damos es $i.

Esto se canaliza ForEach-Objectnuevamente para invocar el ToString()método, con formato de cadena Md(mes, luego día, dígitos mínimos ya que no nos importa lo que viene después). Esta cadena luego se prueba para ver si no es igual -neal número 1225, que se convertirá en una cadena para la comparación, ahorrándome las comillas.

Es por eso que no importa que los meses y los días sean de un solo dígito, nunca será ambiguo porque no hay otro día del año en el que encadenar 1225.

El bucle continúa hasta que la cadena es 1225 . Al comienzo del programa, $iserá cero, por lo que comparará la fecha de hoy, y el bucle nunca se ejecutará, pero para cualquier otro día $ise incrementa en el cuerpo del bucle, de modo que tendremos una cuenta de cuántos días hasta el la próxima Navidad, contabilizando automáticamente los años bisiestos y si la Navidad pasó o no este año.

Después del ciclo, acabamos de emitir la cadena Christmasconcatenada con el resultado de multiplicar la cadena por eveel valor de $i(que, el día de Navidad, será 0, resultando en no eves).

briantista
fuente
Al parecer, el ;después {$i++}es redundante? (también wow, tomaste la delantera en bash nuevamente)
Kritixi Lithos
@Cowsquack agradable! ¿Cómo no me di cuenta de eso?
briantist
7

C # (compilador interactivo de Visual C #) , 89 bytes

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

Pruébalo en línea!

-3 bytes gracias a @JeppeStigNielsen!

Mi estrategia es bastante sencilla:

  1. Inicializar una variable de ciclo ta la fecha actual
  2. Imprime Evesi tno es Navidad
  3. Agregue un día ty repita

Intenté algunas cosas más elegantes, pero de esta manera requería la menor cantidad de bytes.

dana
fuente
... ¿necesita asignarse t a sí mismo en el incrementador? No tengo los documentos frente a mí, pero si no, podría guardar dos bytes más.
Stackstuck
1
Oh, es una estructura. Por supuesto que es. No importa.
Stackstuck
1
Puedes sustituirlo t.Month<12|t.Day!=25por el más corto $"{t:Md}"!="1225". Utiliza una cadena interpolada y una cadena de formato de fecha y hora personalizada.
Jeppe Stig Nielsen
6

T-SQL, 92 88 bytes

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

Editar: Guardado 4 bytes gracias a @BradC.

Neil
fuente
Buen trabajo. Ahorre 2 con PRINT'Christmas'+...y 2 más usando en DATEDIFF(D,lugar deDATEDIFF(DAY,
BradC
@BradC Niza, gracias!
Neil
5

APL (Dyalog Unicode) , 76 63 bytes SBCS

Programa completo Asume ⎕IO←0(indexación cero).

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

Pruébalo en línea!

⎕CY'dfns'c o p y en la biblioteca dfns

⎕TS actual t iempo s apisonamiento como [año, mes, día, hora, minuto, segundo, ms]
days[c]  encontrar el número de días [n] desde el 12/31/1899 00: 00: 00.000
(⍳366) añadir los primeros 366 números enteros (0 ... 365) para que
date[c]  encuentran las fechas [n] que corresponden a los números (366 × 7 mesa, una columna por unidad)
 transpuesta (7 × 366 mesa, una fila por cada unidad)
1↓ colocar una fila (los años)
2↑ para llevar las primeras dos filas (meses y días)
12 25⍳⍨ encuentran el índice de la primera
 multiplicación navideña que por cuatro
' Eve'⍴⍨ usa para cambiar la forma de la lista de personajes y
'Christmas ', añádelo a esto

[c]  código de esa función
[n]  notas para esa función

Adán
fuente
5

Python 2 , 111103 bytes

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

Pruébalo en línea!

Actualización inspirada en la respuesta de Richard Crossley .

Explicación:

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
Triggernometry
fuente
4

PHP, 61 bytes

Christmas<?for($t=time();date(md,$t+=86400)-1226;)echo" Eve";

Ejecutar -no probarlo en línea .

Titus
fuente
4

JavaScript, 135 131 121 92 88 bytes

Mi primera solución (ingenua) ( 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)

Establece 2 fechas: ahora y Navidad de este año. Si este último aún no ha pasado, solo difiere, si ha pasado, difiere de la Navidad del próximo año. Utiliza cualquiera de las diferencias para el número de repeticiones.

(Intentando) Pensar fuera de la caja ( 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()

El desafío especifica QUÉ salida se requiere al ejecutar el programa en un día determinado, pero no especifica CUÁNDO devolverlo ...

Esto solo "dormirá" durante un día, incrementará un contador en 1 y repetirá hasta que sea Navidad para dar la salida.

Dado que JavaScript no garantiza el tiempo de "suspensión", el resultado real podría estar desactivado.

También es feo para usar la alertfunción, lo que significa que en realidad no estamos tratando con JavaScript puro, sino también con las API del navegador (podemos usar console.logal costo de 6 bytes adicionales).

Un mejor enfoque ( 121b ):

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

A partir de hoy, incremente la fecha por un día hasta que sea Navidad, luego use el contador de ese ciclo para la cantidad de repeticiones requeridas.

Mejora (incluyendo pasar por un minificador y usar el truco de 12Me21 para afeitarse 5b extra) ( 92b ):

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

Toques finales ( 88b ):

for(s='Christmas',t=new Date;t.getMonth()/(d=t.getDate())-.44;t.setDate(d+1))s+=' Eve';s
  • Para todo lo anterior, se supone REPL.
  • Vea la presentación de Vadim, ¡mucho mejor que la mía!
targumon
fuente
1
Creo que puede usar t.getMonth()/t.getDate-.48para verificar si la fecha no es el 25 de diciembre
12Me21
1
Bienvenido al sitio! Puede usar una sangría de 4 espacios para que sus bloques de código se vean mejor.
Wheat Wizard
1
Bienvenido a PPCG!
Shaggy
1
98 , printes necesario ya que este es un programa, no una función, a menos que 1. lo conviertas en un lambda o 2. declares que estás utilizando un REPL
solo ASCII
1
t=new Date(+t+864e5)es 1 byte más corto.
Andrew Svietlichnyy
3

VBA (Excel), 108 bytes

Copiar en un módulo en blanco. Imprime en la ventana Inmediato:

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

Nota: Usar en :lugar de saltos de línea ahorra dos bytes por línea.

Tenga en cuenta que el editor de VBA insertará espacios adicionales entre palabras clave, operadores, etc. y paréntesis después de la definición secundaria, pero si copia y pega este código funcionará (no podría eliminar ese espacio antes de &).

No está mal para VBA (por una vez).

Barranka
fuente
1
* Christmas: |
Solo para ASCII el
@ Solo ASCII: eliminar el espacio antes del &lanzamiento de un error
Barranka
-1 bytes. Gracias a @ ASCII-only por atrapar el error tipográfico
Barranka
1
Puede reducir esto a 71 caracteres convirtiéndolo en una función de ventana inmediata y eliminando la variable temporal para now. Cuando haces eso, debería verse algo así?"Christmas";:For i=1To DateSerial(Year(Now+6),12,25)-Now:?" Eve";:Next
Taylor Scott
3

Bash + fecha GNU, 72 73 bytes

for((d=0;1`date +%d%m -d$d\day`-12512;d++));{ x+=\ Eve;};echo Christmas$x
  • un byte guardado reemplazando !=con-
  • otro removiendo espacio extra
  • arregla -3 bytes d=0, porque date -ddayes fecha + 1 y no funciona el 25/12

Pruébalo en línea

Nahuel Fouilleul
fuente
Hmmm, ¿por qué =~no funciona en el condicional for-loop?
Kritixi Lithos
debido a que la condición del bucle for es una expresión aritmética, las palabras se convierten en números enteros y también se supone que el número que comienza con 0 en octal, por eso se antepone 1
Nahuel Fouilleul
3

Bash , 68 65 61 bytes

Golfó 4 bytes gracias a Nahuel Fouilleul mediante el uso de la ``sustitución de comandos y evalen lugar de sed eyxargs

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

Pruébalo en línea!

Dentro de la `` sustitución de comandos , tenemos

eval ejecuta la siguiente cadena como comandos de shell

  • date\ -d{0..366}day\;bajo la expansión de llaves{0..366} , esto da como resultado la cadena date -d0day; date -d1day; date -d2day; ... date -d366day;, cada comando en esta cadena calcula la fecha entre 0 y 366 días desde el presente, lo que da como resultado la salida del formato Wed Dec 26 18:22:33 UTC 2018, con cada uno en su propia línea

|sed sobre el cual, llame a los siguientes comandos sed

  • /c.25/QSi la expresión regular /c.25/coincide, Quit sin imprimir

  • \;cEve de lo contrario cambie la línea a Eve

Todo el número requerido de Eves se produce cada uno en su propia línea. Esta salida se captura ``y está sujeta a la división de palabras, donde las palabras se dividen en nuevas líneas. Cada palabra se alimenta como un argumento para echo.

echo Christmas ...

Cada argumento de echose imprime al estar separados por espacios, lo que resulta en la salida deseada.

Kritixi Lithos
fuente
No hay nada realmente bashespecífico sobre esta solución. Requiere GNU date, sedy seqsin embargo.
Kusalananda
-4 bytes
Nahuel Fouilleul
@NahuelFouilleul Gracias, buen truco de usar la sustitución del comando de retroceso para evitar xargs y usar eval para omitir la
secuencia
2

C (gcc) , 157 bytes

Pensé que podría evitar incluir, time.hpero eso solo dio fallas de segmento.

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

Pruébalo en línea!

ErikF
fuente
En mi opinión, deberías dejar de lado el #include <stdlib.h>, no como si hiciera nada aquí
solo ASCII
Sugerir en *t;f(u)lugar de *t,u;f()y en #import<time.h>lugar de #include <time.h>y en 5[t=localtime(&u)]lugar det=localtime(&u);t[5]
ceilingcat
2

Groovy , 66 bytes

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

Pruébalo en línea!

Cortesía de @ ASCII-only

bdkosher
fuente
Debe imprimirlo, ya que este es un programa completo, no una función
solo ASCII el
> Chistmas: /
ASCII-only
fijo, 149
Solo ASCII
123
Solo ASCII
tomando el primero y usando Groovy 2.5 lo reduce a 115 .
bdkosher
2

Python 3, 106 bytes

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

Scala , 116 113 bytes

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

Pruébalo en línea!

Donde c 25es la abreviatura de Dec 25.

Kjetil S.
fuente
1
Creo que puede usar en contains("c 25")lugar dematches(".*c 25.*")
12Me21
¡Gracias, tres bytes menos! 😁
Kjetil S.
wow, bien hecho, toString of date was nice
V. Courtois
2

JavaScript, 86 77 bytes

Usando REPL sería

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

Felicitaciones a ASCII solo para -9 bytes

Vadim
fuente
77
Solo ASCII
¡Bravo! Lo hiciste mucho mejor que yo. ¿Puedo ofrecer afeitarme un byte extra? for(c='Christmas',d=new Date;!/c 25/.test(d=new Date(+d+864e5));)c+=' Eve';c o esta variante: for(s='Christmas',t=Date.now();!/c 25/.test(new Date(t+=864e5));)s+=' Eve';s ambos son 76 bytes.
targumon
2

Lua , 137 118 bytes.

118 bytes

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 bytes (anterior)

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

Vale la pena señalar que no funciona en LuaJIT (error de sintaxis)

Tae Hanazono
fuente
Bienvenido a PPCG! Bonito primer post!
Rɪᴋᴇʀ
1

MySQL, 102 bytes

más o menos lo mismo que la respuesta T-SQL de Neil . Parece que no hay una forma más corta en SQL.

select concat("Christmas",repeat(" Eve",datediff(concat(year(now()+interval 6 day),"-12-25"),now())));

Pruébalo en línea .

Titus
fuente
1

MATLAB, 91 bytes

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

MATLAB Non-looper, 100 bytes

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

Scala , 123 bytes

Gracias al trabajo de ASCII-only.

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

Pruébalo en línea!

Scala + Joda-Time , 140 bytes

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)

No se ejecuta en TIO ya que requiere la biblioteca Joda-Time.

V. Courtois
fuente
no joda, 154 . lamentablemente no puedo ir java.util.Datea trabajar aquí: /
ASCII-only
148
Solo ASCII
Ah @ solo ASCII No conté los object Main extends App{}caracteres en mi recuento (porque tampoco lo hice en mis otras respuestas de Scala). Si sacamos eso, me ganas ^^
V. Courtois
La withDate()llamada es muy cara ...
V. Courtois
1. ¿recuerda que necesita especificar el idioma como "Scala + Joda-Time" ya que usa una biblioteca externa y 2. no va a usar mis cambios? es más corto y no necesita una biblioteca: P
Solo ASCII
1

05AB1E , 93 89 bytes

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

Pruébelo en línea o Pruébelo en línea con una fecha autoevaluada emulada de 'hoy' .

Explicación:

05AB1E no tiene ningún valor incorporado para las fechas, excepto para recibir el año / mes / día / horas / minutos / segundos / microsegundos actuales, por lo que la mayoría de los bytes se usan para cálculos manuales.

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

Vea esta respuesta mía para comprender cómo vamos al día siguiente. (PD: 1¾ǝha sido reemplazado por T`ǝ, ya que también usamos el counter_variableotro lugar)

Vea este consejo mío 05AB1E (secciones ¿Cómo usar el diccionario? Y ¿Cómo comprimir enteros grandes? ) Para comprender por qué '»ˆes "eve"; 'ŒÎes "christmas"; y Ž9Úes 1225.

Kevin Cruijssen
fuente
¡Golf inteligente!
MilkyWay90
0

C # (compilador interactivo de Visual C #) , 141 bytes

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

Pruébalo en línea!

Encarnación de la ignorancia
fuente
1
No creo que esto funcione para el 30 de noviembre ...
Neil
Solucionado ahora, olvidé agregar un cheque si era diciembre o no
Encarnación de la ignorancia
¿Estás seguro del mes> 25?
Neil
Fijado ahora ...
Realización de la Ignorancia
¿Es el? 1: 0 necesario? no y devuelve un entero?
12Me21
0

Rojo , 89 86 84 78 76 bytes

-10 bytes gracias a ASCII-only!

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

Pruébalo en línea!

Galen Ivanov
fuente
84
Solo ASCII
@ Solo ASCII Hmm, por supuesto! ¡Gracias!
Galen Ivanov
78
Solo ASCII
76
Solo ASCII
@ Solo ASCII Su versión de 76 bytes no da el resultado correcto cuando se ejecuta en Navidad: Fecha como argumento Me siento estúpido por no usar solo nowy no now/date. Gracias por tus mejoras!
Galen Ivanov
0

Perl 5 , 68 bytes

print"Christmas";print" Eve"while localtime($i++*86400+time)!~/c 25/

Pruébalo en línea!

Donde c 25es la abreviatura de Dec 25.

Kjetil S.
fuente