Es Navidad para todos, y aquí hay un desafío de código de golf para celebrar. Necesita hacer un programa para imprimir un regalo. Específicamente, las palabras "Feliz Navidad". PERO, hay una trampa: este programa solo debe funcionar si es el 25 de diciembre. Si el código se ejecuta en cualquier otro día, entonces el programa debería bloquearse.
Este es Code-Golf, por lo que gana la respuesta con la menor cantidad de bytes.
¡Feliz Navidad!
Respuestas:
Pyke, 21 bytes
Pruébalo aquí!
O 18 bytes no competitivos.
Exactamente lo mismo excepto por esta sección:
Pruébalo aquí!
fuente
30 * (10+1)
= 330 no 325JavaScript,
555346 bytesNota: esto solo se ha probado en Google Chrome, el programa puede comportarse de manera diferente de un navegador a otro (o de un dispositivo a otro)
2 bytes guardados gracias a @ ConorO'Brien
7 bytes guardados gracias a @ETHProductions
Sale con
Uncaught ReferenceError: a is not defined
si la fecha no esDec 25
. No estoy realmente seguro si esto cuenta como estrellarsefuente
.slice(6,10)=="c 25"
?c
(Oct
se acerca, pero aún así no satisface la expresión regular). ¡Gracias por el consejo!Date()
es completamente dependiente de la implementación. Por ejemplo, espero que varíe con el idioma y la ubicación de la máquina.Python 3,
6663 bytesGracias a las ideas de las respuestas de JavaScript / ES aquí, logré exprimir algunos bytes. Indexar un diccionario: las claves inexistentes elevarán a
KeyError
. El siguiente código funciona en la zona horaria localEl formato de salida para
ctime
no depende de la configuración regional: el formato siempre es ~'Sun Dec 25 19:23:05 2016'
. Dado que solo en diciembre termina la abreviatura de 3 letrasc
, es seguro usarla'c 25'in time.ctime()
aquí.Versión previa:
Esto funciona en la zona horaria UTC. Para la zona horaria local, se necesitan
s/gm/local
3 bytes más. Para Python 2, se pueden eliminar paréntesis deprint
65 bytes.La construcción arroja
KeyError
en otras fechas:fuente
import time;print{'2512':'Merry Christmas'}[time.strftime("%d%m")]
y lo etiqueta como Python 2, todavía tiene 66 bytes y se bloquea con un KeyError en fechas distintas del 25 de diciembre.1:3
, copié mi código de prueba por accidentegmtime()
idea para mi respuesta. Espero que no tePHP,
3938 bytes, no compite (no se bloquea)o
o
fuente
date(Lz)%1001-358
? : D""
en el primer código que le ahorra 2 bytes. Si no fuera por años bisiestos maldita, podría ahorrar más de 2 bytes mediante la sustituciónmd
porz
y1225
por el número del día del año del 25 de diciembre.eval((date(md)^TQZZ).'"Merry Christmas";');
(43 bytes)1
. Esto imprimiría el resultado del cálculo. y0104-1225
es 1121.Python 2 ,
686765 bytes-1 con agradecimiento a @muddyfish
Gracias a @AnttiHaapala por la idea que salvó a otra pareja.
Pruébalo en línea!
Lanza un IndexError si no el 25 de diciembre.
Versión no competitiva para 59 bytes, ya que solo funciona para años no bisiestos (utiliza el día del año, que es 360 este año pero 361 en años bisiestos)
fuente
gmtime()
en afeitarme un par. Tengo que admitir que desearía que hubiera más cosas que pudiera hacer con la idea del día del año.R,
52 6158 bytesSi la fecha actual no es el 25 de diciembre, se devuelve un error porque no se proporciona ningún tercer argumento
if
.Editar: se corrigió un error tonto
fuente
Mi primera vez por aquí ... Comencé con el mejor idioma para este trabajo:
Java,
200188bytes (gracias a @Daniel Gray), 186 bytes eliminando "ln" de la impresión.Pruébalo aquí!
fuente
Calendar
for*
y guardar algunos bytes. También podría acortar el nombre delargs
parámetro en el método principal, creo ...MATL ,
3433 bytesEsto funciona en la versión actual (19.7.0) del lenguaje. Para causar el error, el siguiente código explota el hecho de que el logaritmo de una cadena da un error (esto puede cambiar en futuras versiones).
Pruébalo en línea!
Explicación
fuente
QBIC , 48 bytes
Explicación:
Esto supone la
MM-DD
notación de fecha estadounidense . Esto sería más corto si finalmente hiciera una función de subcadena en QBIC.fuente
05AB1E ,
3221 bytesGuardado 11 bytes gracias a la compresión de cadena de Adnan :).
Explicación
Pruébalo en línea!
Hice lo que se me ocurrió primero, por lo que puede haber mejores enfoques para este. Pero PPCG también merece una Feliz Navidad en 05AB1E;).
fuente
x
es la abreviatura de duplicado y doble :).C # / CS de script
10610099 bytesSolución de 99 bytes
Pruébalo aquí!
Solución de 100 bytes (prefiera esta ... un poco diferente)
Explicado:
DateTime.Now.AddDays(7).DayOfYear==1
es un byte más corto queDateTime.Now.ToString("ddMM")=="2512"
pero 1 byte más largo queDateTime.Now.ToString("dM")=="2512"
fuente
$"{DateTime.Now:dM}"=="2512"
.dM
es ambiguo, pero no para "2512".$"{DateTime.Now:dM}"=="2512"?"Merry Christmas":1/1-1+""
55 bytes) =)int i
y no solo1/0
?$"{DateTime.Now:dM}"=="2512"?"Merry Christmas":"".Remove(1)
(59 bytes)C # / CS Script, 96 Bytes, mayormente plagiado de Erresen
Elimina la
int i
declaración a favor de la codificación rígida de la división. Dejaría esto como un comentario pero no tengo la reputación.fuente
bash + utilidades Unix,
514947 bytes* Gracias a @ KenY-N por señalar que las comillas en el eco se pueden eliminar, y a @IporSircer por reducir el tamaño de la condición en 2 bytes.
fuente
bash: ${}: bad substitution
error. También puede descartar las citas de Feliz Navidad para guardar dos bytes. Además,[ `date +%m%d` = 1225 ]&&echo Merry Christmas
funciona para mí, igualando mis 45 bytes .${}
con!-
que yo por un byte. Te votaré a medida que ganes.Groovy, 57 bytes
Se bloquea en fechas distintas de 25.12. con
groovy.lang.MissingPropertyException
porqueb
no está definido.fuente
Apilado , 42 bytes
Pruébalo aquí!
Esto crea una matriz de un solo elemento que contiene a saber
'Merry Christmas!'
. Después, pone la fecha en una cadena con el mes seguido del día. Comprueba la igualdad con'1225'
(Navidad), lo invierte y¬
luego obtiene ese miembro de la matriz anterior. Si no es Navidad, esto generará un error de índice. De lo contrario, se imprimeMerry Christmas
. (Cambie la fecha en la cadena para ver cómo funciona en otros días).fuente
Lote, 66 bytes
La nueva línea final es significativa, ya que hace que el análisis de la
if
declaración falle. Es posible que deba ajustar la verificación de fecha para que coincida con su formato de fecha local.fuente
Python 2,
69 7775 o7270 BytesSi no importa si sale con un error cuando es Navidad, entonces:
EDITAR:
Gracias @ Flp.Tkc por señalar que necesitaba generar un error
-2 bytes de @Max para señalar sobre la eliminación de dos puntos de la función strftime
fuente
CJam, 28
Pruébalo en línea
Explicación:
fuente
C # .NET,
180172171 bytesGuardado 8 bytes gracias a Kritixi Lithos
Guardado 1 byte gracias a Kritixi Lithos, de nuevo;)
Alternativa, variante sin golf:
fuente
NotChristmasException
está solo en la variante no golfista.if(d.Day==25&&d.Month>11)Console.Write(...);else throw new Exception()
nota combinada si las declaraciones y la eliminación de llaves alrededor deConsole.Write
y reemplazarreturn
conelse
. También cambievar d=DateTime.Now
, puede deshacerse del lanzamiento de excepción con quizásargs[-1];
después de cambiar el nombre de args aa
esoa[-1];
(esto no es idéntico a dividir por ceros utilizados en otros lugares)Mathematica, 46 bytes
fuente
Now
ahorra 2 bytes másToday
Quit[]
o1/0
debería ser suficiente.Lisp común, 140
Se bloquea con una función indefinida si la fecha no es correcta.
fuente
awk, 29 bytes (+ longitud ("Merry xmas"))
Ejecutándolo:
Saludo de temporada se canaliza a
awk
.strftime
devuelve mes + día (por ejemplo1226
) y si coincide, el1225
$0
registro se expira. El resultado de la comparación1225==1226
se coloca env
var, que se usa para dividir 1 si la comparación de fechas falla.fuente
Haskell, 116
Se bloquea con "Patrones no exhaustivos en la función f" si no es Navidad.
Desafortunadamente, no hay una función que le permita obtener la hora inmediatamente en un formato útil, por lo que la mayor parte de esto es convertir los formatos de fecha.
fuente
C #,
122104bytes18 bytes guardados, gracias a @raznagul
Agrega 7 días al día actual y comprueba si es el primer día del año; en caso afirmativo, muestra "Feliz Navidad"; de lo contrario, se divide por cero.
fuente
return
no es necesario. Usar eni
lugar de()
.Ruby, 69 bytes
Funciona en 2016. No distingue entre años normales y bisiestos, es posible que deba ajustarse para los años no bisiestos.
fuente
ForceLang, 180 bytes
(Recuerde que
datetime.toDateString
depende de la configuración regional, por lo que esto puede no funcionar dependiendo de su configuración regional)fuente
C #, 90 bytes
Lanza IndexOutOfRangeException si no es Navidad.
Pruébalo aquí!
fuente
línea de comando bash,
454849 48 bytesSimilar a Mitchell Spector , pero se usa
grep
en modo silencioso para verificar una coincidencia, luego&&
se asegurará de que solo se imprima en el éxito y las||
causas para que busque el historial!-
, lo que me da esto:Y detiene la ejecución como lo
!- ; echo foo
demuestra. Labash
documentación dice que se!-n
refiere al comando actual menosn
, por lo que tal vez se está interpretando como!-0
, lo que da un mensaje de error idéntico (y no localizado).fuente
;
lugar de||
.