Le jour où ce message a été publié était la veille de Noël. Demain ce sera Noël. Hier, c'était la veille de Noël. Dans deux jours ce sera
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
.
Votre travail consiste à prendre la date d'exécution du programme et à l'encoder au format veille de Noël.
- Si votre programme est exécuté à Noël, il doit générer la chaîne "Noël".
- Si votre programme n’est pas exécuté à Noël, il doit générer la chaîne "Noël", suivie de la chaîne "Eve" à plusieurs
n
reprises, avecn
le nombre de jours avant Noël.- Notez que cela doit être basé sur le prochain Noël. Par exemple, si le jour est le 26 avril 2019, vous devez effectuer votre calcul en fonction du 25 décembre 2019, et non de tout autre Noël.
- N'oubliez pas de compter les jours bissextiles.
- Noël est le 25 décembre de chaque année.
C'est du code-golf , alors le code le plus court gagne! Notez cependant que l'objectif n'est pas de trouver le programme le plus court dans une langue, mais de trouver le programme le plus court dans chaque langue. Par exemple, si vous trouvez le programme C ++ le plus court, il remporte ce concours pour C ++, même si quelqu'un trouve un programme plus court en Python.
Réponses:
SmileBASIC,
737167 octetsLe programme imprime "Noël", puis "Eve" chaque jour, jusqu'au 25 décembre. (12/25 = 0,48)
Peut prendre jusqu'à un an.
la source
Formule Excel, 59 octets
la source
YEAR(TODAY()+6)
retourne toujours la bonne année, évitant ainsi la condition.YEAR(NOW()+6)
fonctionne aussi avec 2 octets de moins.NOW()
comprend le temps, donc ce ne sera pas un entier et je ne suis pas sûrREPT
que le permettrait.="Christmas"&REPT(" Eve",DATE(YEAR(DATE(2018,12,25)+6),12,26)-DATE(2018,12,25))
Perl 6 ,
6147 octetsdites 'Noël' ~ 'Eve'x (Date.aujourd'hui ... ^ {. mois == 12 &&. jour == 25})Essayez-le en ligne!
-14 octets (!) Grâce à Jo King
Date.today ...^ /12\-25/
est la séquence de dates commençant aujourd'hui et se terminant la veille de Noël. (L'expression régulière/12\-25/
correspond à la représentation sous forme de chaîne des dates.) La chaîne" Eve"
est répliquée un nombre de fois égal à la longueur de cette séquence et est sortie après la chaîne"Christmas"
.la source
/12.25/
travailler?12025-12-24
R ,
112 10672 octetsVia @digEmAll et @ J.Doe
Essayez-le en ligne!
Ma réponse initiale était antérieure à la clarification selon laquelle le code devait prendre comme date la date à laquelle le code est exécuté. Il pourrait être modifié comme ci-dessus pour économiser beaucoup d'octets, mais je ne vais pas m'en faire.
Essayez-le en ligne!
Explication: tout le monde est à l'église alors j'ai le temps de le faire. Extraire l'année, contraindre à un entier. Créez un vecteur de Noël de cette année et de l'année suivante et soustrayez la date d'entrée pour obtenir un vecteur de deux différences entre la date d'entrée et ces deux Xmases.
Choisissez le non négatif et
cat
"Noël" avec autant de "Eves".la source
y
qu'une seule fois, vous pouvez donc l'utiliser directement pour 108 octets.z[z>=0][1]
travaillerait au lieu demin
?Windows PowerShell ,
676463 octetsEssayez-le en ligne!
Géré pour raser
3 octets4 octets (merci charlatans ) en utilisant l'-f
opérateur ormat au lieu de.ToString()
, puis en soustrayant la chaîne de date de la valeur numérique 1225 au lieu de faire une comparaison avec-ne
. L'entier résultant sera interprété comme un booléen pour le conditionnel où0
(ce qui se passera à Noël) est interprété commeFalse
(n'entrez pas dans la boucle), et toute autre valeur est interprétée commeTrue
(entrez dans la boucle).Puisque le nombre entier est maintenant à gauche, la chaîne de date sera convertie en nombre entier et les calculs seront effectués, contrairement à la version précédente où le
1225
nombre entier a été converti en chaîne pour la comparaison.Version originale
Windows PowerShell , 67 octets
Essayez-le en ligne!
Utiliser une
for
boucle comme unewhile
boucle car elle est plus courte. Dans la condition de boucle, nous vérifions la date actuelle (date
une forme abrégée deGet-Date
),ForEach-Object
alias le nom de piped to%
, à l'aide du formulaire permettant d'appeler une méthode par un nom générique; dans ce cas, la méthode estAddDays()
sur l'DateTime
objet et la valeur que nous lui donnons est$i
.Ceci est redirigé sur
ForEach-Object
pour invoquer laToString()
méthode, avec une chaîne de formatageMd
(mois, puis jour, chiffres minimaux car nous ne nous soucions pas de ce qui va suivre). Cette chaîne est ensuite testée pour voir si elle n’est pas égale-ne
au nombre1225
qui sera converti en une chaîne pour la comparaison, ce qui me sauvera les guillemets.C'est pourquoi, peu importe que les mois et les jours soient à un chiffre, cela ne sera jamais ambigu, car il n'y a pas d'autre jour de l'année qui serait contraignant
1225
.La boucle continue jusqu'à ce que la chaîne soit
1225
. Au début du programme,$i
sera égal à zéro, ce qui permettra de comparer la date d'aujourd'hui et la boucle ne s'exécutera jamais, mais pour tout autre jour$i
, il sera incrémenté dans le corps de la boucle, de sorte que nous compterons le nombre de jours jusqu'à ce que le prochain Noël, en tenant compte automatiquement des années bissextiles et si Noël est passé ou non cette année.Après la boucle, nous sortons simplement la chaîne
Christmas
concaténée avec le résultat de la multiplication de la chaîneeve
multipliée par la valeur de$i
(ce qui, le jour de Noël, aura pour0
résultat aucuneve
s).la source
;
après{$i++}
est redondant? (aussi wow vous avez encore repris l'avantage sur bash)C # (compilateur interactif Visual C #) , 89 octets
Essayez-le en ligne!
-3 octets grâce à @JeppeStigNielsen!
Ma stratégie est assez simple:
t
à la date actuelleEve
si cet
n'est pas Noëlt
et répéterJ'ai essayé des choses plus sophistiquées, mais cette manière a exigé le moins d'octets.
la source
t.Month<12|t.Day!=25
par le plus court$"{t:Md}"!="1225"
. Il utilise une chaîne interpolée et une chaîne de mise en forme DateTime personnalisée.T-SQL,
9288 octetsEdit: 4 octets enregistrés grâce à @BradC.
la source
PRINT'Christmas'+...
et 2 autres en utilisantDATEDIFF(D,
au lieu deDATEDIFF(DAY,
APL (Dyalog Unicode) , SBCS de
7663 octetsProgramme complet. Suppose
⎕IO←0
(indexation zéro).Essayez-le en ligne!
⎕CY'dfns'
C o p y dans la bibliothèque dfns⎕TS
courant t emps de la tassage [année, mois, jour, heure, minutes, secondes, ms]days
[c] trouver le nombre de jours [n] depuis 31/12/1899 00: 00: 00.000(⍳366)
ajouter les premiers 366 entiers (0 … 365) pour quedate
[c] trouve les dates [n] qui correspondent à ces nombres (tableau 366 × 7; une colonne par unité)⍉
transposée (tableau 7 × 366; une ligne par unité)1↓
supprimer une ligne (années)2↑
prendre les deux premières lignes (mois et jours)12 25⍳⍨
trouver l'index du premier Noël4×
multiplier par quatre l'' Eve'⍴⍨
utiliser pour remodeler la liste des caractères'Christmas ',
append à ce que[c] code de cette fonction
[n] notes pour cette fonction
la source
Python 2 ,
111103 octetsEssayez-le en ligne!
Mise à jour inspirée par la réponse de Richard Crossley .
Explication:
la source
Ruby , 80 octets
Essayez-le en ligne!
Merci à tsh pour son idée
la source
puts
parp
: lien Try It OnlinePHP, 61 octets
Courez avec
-n
ou essayez-le en ligne .la source
JavaScript,
1351311219288 octetsMa première solution (naïve) ( 135b ):
Il fixe 2 dates: maintenant et Noël de cette année. Si ce dernier n'est pas encore passé, il les diffère, s'il est passé, diffs au Noël de l'année prochaine. Utilise soit diffs pour le nombre de répétitions.
(Essayer de) sortir des sentiers battus ( 131b ):
Challange spécifie QUELLE sortie est requise lors de l'exécution du programme un jour donné, mais ne spécifie pas QUAND le renvoyer ...
Cela va juste "dormir" pendant un jour, incrémenter un compteur de 1, et répéter jusqu'à ce que ce soit Noël pour donner la sortie.
Étant donné que JavaScript ne garantit pas le temps de "sommeil", le résultat réel peut être erroné.
Il est également moche d’utiliser la
alert
fonction, ce qui signifie que nous n’avons pas réellement affaire à du JavaScript pur, mais également aux API du navigateur (nous pouvons utiliserconsole.log
au prix de 6 octets supplémentaires).Une meilleure approche ( 121b ):
A partir d'aujourd'hui, incrémentez la date d'un jour jusqu'à Noël, puis utilisez le compteur de cette boucle pour connaître le nombre de répétitions requises.
Améliorer (y compris passer au minifier et utiliser l'astuce de 12Me21 pour gagner 5 b. De plus) ( 92b ):
Touches finales ( 88b ):
la source
t.getMonth()/t.getDate-.48
pour vérifier si la date n'est pas le 25 décembreprint
est nécessaire car il s’agit d’un programme et non d’une fonction, sauf si 1. vous le transformez en lambda ou 2. vous indiquez que vous utilisez un REPLt=new Date(+t+864e5)
est 1 octet plus court.VBA (Excel), 108 octets
Copier dans un module vierge. Imprime dans la fenêtre Immédiat:
Remarque: l' utilisation
:
de sauts de ligne au lieu de deux sauts de ligne économise deux octets par ligne.Notez que l'éditeur VBA insérera des espaces supplémentaires entre les mots clés, les opérateurs, etc ... et les parenthèses après la définition de Sub, mais si vous copiez et collez ce code, cela fonctionnera (je ne pouvais pas supprimer cet espace avant le
&
).Pas mal pour VBA (pour une fois).
la source
Christmas
: |&
jette une erreurnow
. Lorsque vous faites cela, cela devrait ressembler à quelque chose comme?"Christmas";:For i=1To DateSerial(Year(Now+6),12,25)-Now:?" Eve";:Next
Date Bash + GNU,
7273 octets!=
de-
d=0
, cardate -dday
date + 1 et ne fonctionnant pas le 25/12Essayez-le en ligne
la source
=~
pas travailler dans la boucle for conditionnelle?Python 2, 128 octets / Python 3, 130 octets
bien sûr, deux octets de moins avec Python 2
la source
as D
vousBash ,
686561 octetsGolfé 4 octets grâce à Nahuel Fouilleul en utilisant la
``
substitution de commande eteval
à la place de sede
etxargs
Essayez-le en ligne!
À l'intérieur de la
``
substitution de commande , nous avonseval
lance la chaîne suivante en tant que commande shelldate\ -d{0..366}day\;
sous l' extension accolade de{0..366}
, cela donne la chaînedate -d0day; date -d1day; date -d2day; ... date -d366day;
, chaque commande de cette chaîne calculant la date entre 0 et 366 jours, à partir de la date du jour, donnant lieu à la sortie du formatWed Dec 26 18:22:33 UTC 2018
, chacune dans sa propre ligne|sed
sur quoi, appelez les commandes sed suivantes/c.25/Q
si l'expression régulière/c.25/
est appariée,Q
uit sans impression\;cEve
sinon changez la ligne enEve
Tous les nombres requis
Eve
sont produits chacun sur sa propre ligne. Cette sortie est capturée dans``
et est sujette à la scission de mots lorsque les mots sont divisés sur les nouvelles lignes. Chaque mot est alimenté comme argumentecho
.echo Christmas
...
Chaque argument de
echo
est imprimé en étant séparé par des espaces, ce qui donne le résultat souhaité.la source
bash
spécifique à cette solution. Cela nécessite GNUdate
,sed
etseq
bien.C (gcc) , 157 octets
Je pensais pouvoir éviter d’inclure
time.h
mais cela ne donnait que des erreurs de segment.Essayez-le en ligne!
la source
#include <stdlib.h>
, pas comme si ça ne faisait rien du tout ici*t;f(u)
au lieu de*t,u;f()
et#import<time.h>
au lieu de#include <time.h>
et5[t=localtime(&u)]
au lieu det=localtime(&u);t[5]
Groovy , 66 octets
Essayez-le en ligne!
Gracieuseté de @ ASCII-only
la source
Chistmas
: /Python 3, 106 octets
la source
Scala ,
116113 octetsEssayez-le en ligne!
Où
c 25
est l'abréviation deDec 25
.la source
contains("c 25")
au lieu dematches(".*c 25.*")
JavaScript,
8677 octetsEn utilisant REPL ce serait
Félicitations à ASCII seulement pour -9 octets
la source
for(c='Christmas',d=new Date;!/c 25/.test(d=new Date(+d+864e5));)c+=' Eve';c
ou cette variante: lesfor(s='Christmas',t=Date.now();!/c 25/.test(new Date(t+=864e5));)s+=' Eve';s
deux sont de 76 octets.Lua ,
137118 octets.118 octets
137 octets (précédent)
Il convient de noter que cela ne fonctionne pas dans LuaJIT (erreur de syntaxe)
la source
MySQL, 102 octets
à peu près la même chose que la réponse T-SQL de Neil . Il ne semble pas y avoir de moyen plus court en SQL.
Essayez-le en ligne .
la source
MATLAB, 91 octets
MATLAB Non-Looper, 100 octets
la source
Scala , 123 octets
Merci au travail en ASCII uniquement.
Essayez-le en ligne!
Scala + Joda-Time , 140 octets
Ne s'exécute pas dans TIO car il nécessite la bibliothèque Joda-Time.
la source
java.util.Date
travailler ici: /object Main extends App{}
caractères dans mon décompte (parce que je ne l'ai pas non plus dans mes autres réponses Scala). Si on enlève ça, vous me battez ^^withDate()
appel coûte si cher ...05AB1E ,
9389 octetsEssayez-le en ligne ou essayez-le en ligne avec une date «aujourd'hui» émulée par vous-même .
Explication:
05AB1E ne contient pas d'intégré pour les dates, à l'exception de la réception de l'année / mois / jour / heures / minutes / secondes / microsecondes en cours. La plupart des octets sont donc utilisés pour les calculs manuels.
Voir ma réponse pour comprendre comment nous allons au lendemain. (PS:
1¾ǝ
a été remplacé parT`ǝ
, puisque nous utilisons lecounter_variable
endroit.)Voir cette astuce de mes 05AB1E (sections Comment utiliser le dictionnaire? Et Comment compresser les grands entiers? ) Pour comprendre pourquoi
'»ˆ
est"eve"
;'ŒÎ
est"christmas"
; etŽ9Ú
est1225
.la source
C # (compilateur interactif Visual C #) , 141 octets
Essayez-le en ligne!
la source
rouge ,
8986847876 octets-10 octets grâce à ASCII uniquement!
Essayez-le en ligne!
la source
now
et nonnow/date
. Merci pour vos améliorations!Perl 5 , 68 octets
Essayez-le en ligne!
Où
c 25
est l'abréviation deDec 25
.la source