Écrivez une fonction qui prend une date et renvoie le jour de la semaine du 29 février suivant cette date.
L'entrée est une chaîne au format ISO Extended: AAAA-MM-JJ (par exemple, le 27 mai 2010 serait "2010-05-27").
La sortie est une chaîne qui est le nom du jour de la semaine (par exemple "lundi"). La capitalisation n'a pas d'importance, mais donnez le nom complet en anglais.
Si la date donnée est Février 29, puis revenez le jour de la semaine du prochain 29 Feburary.
Utilisez les calculs pour le calendrier grégorien proleptique (il utilise donc les calculs de l'année bissextile grégorienne pour toute sa longueur). Ne vous inquiétez pas du calendrier julien ou du moment où le passage de julien à grégorien s'est produit. Assumez simplement le grégorien pour tout.
La fonction doit fonctionner pour au moins la plage "0001-01-01" - "2100-01-01".
N'hésitez pas à utiliser les bibliothèques standard fournies par la langue de votre choix, mais n'utilisez pas de bibliothèques tierces à moins que vous ne souhaitiez inclure ce code dans votre solution.
Le code le plus court (le moins de caractères) l'emporte.
Exemples:
func("0001-01-01")
->"Sunday"
func("1899-12-03")
->"Monday"
func("1970-01-01")
->"Tuesday"
func("1999-07-06")
->"Tuesday"
func("2003-05-22")
->"Sunday"
func("2011-02-17")
->"Wednesday"
func("2100-01-01")
->"Friday"
(et non, vous n'avez pas à nommer la fonction func
)
Conseils:
- N'oubliez pas que les années se terminant par 00 qui ne sont pas divisibles par 400 ne sont pas des années bissextiles.
- Le 1er janvier 0001 est un lundi.
date
. Supprimez simplement GNUWin32 du CHEMIN et cela devrait fonctionner. Ou passezdate
àGet-Date
(ce type de comportement de secours ne fonctionne que lorsqu'aucune commande n'est trouvée - pour vérifier, utilisez simplementgcm date
). Quoi qu'il en soit, je ne considère pas qu'un problème particulier avec ce script comme GNUWin32 ne fait partie d'aucune installation Windows standard.get-date
et j'ai reçu le message d'erreur. A-Method invocation failed because [System.Management.Automation.PSObject] doesn't contain a method named 'op_Addition'.
t-il besoin de PS2 ou .Net 4 ou quelque chose?Get-Date
mais unSystem.DateTime
.$d=Get-Date "0400-01-01"; $d++
donne un message d'erreur sur le fait de++
ne pas être défini sur DateTime. Le même remplacement++
par+=1
ou+="1"
ou+='1'
donne le message d'erreur sur PSObject. Et ça+"1"
marche.Ruby 1.9, 85 caractères
Solution simple. Appelez la fonction avec
f[args]
.0001-01-01
test.la source
def*
définit juste une fonction appelée*
. De cette façon, je n'ai pas besoin d'espace entredef
et le nom de la fonction.T-SQL
166185 caractèresJe jouais déjà avec les fonctions de date T-SQL, alors j'ai pensé pourquoi pas ...
La solution d'origine était incorrecte ...
Voici ce que je dois réellement faire pour que cette stratégie fonctionne:
la source
C #, 176
la source
string f(string d){...}
.ToString("dddd")
imprime la date dans les paramètres régionaux actuels, mais pas en anglais.string f(string d){var n=DateTime.Parse(d).AddDays(1);return DateTime.IsLeapYear(n.Year)&&n.DayOfYear==60?n.DayOfWeek+"":f(n+"");}
Bash, 96 octets
Merci Peter ... Version très golfée, 96 octets:
Ancienne version, 229 octets
EXEMPLE D'E / S
la source
i=0;d=;until [ `date -d"$1 $i days" +%m-%d` = "02-29" ];do((i++));done
Perl, pas de bibliothèque date:
160 159155Le véritable avantage de ces bibliothèques de dates est de repousser la longueur des noms des jours à quelqu'un d'autre.
D'un autre côté, je pense que c'est la seule solution à ce jour qui fonctionne indépendamment des paramètres régionaux.
la source
DATE et de la colle BASHy (90)
La fonction:
Essai:
la source
D: 175 caractères
Plus lisiblement:
C'est très facile d'écrire en D, mais ça ne va certainement pas gagner de concours de golf de code. Pourtant, en dehors du golf de code, je préfèrerais de loin qu'il soit facile d'écrire et de comprendre, mais long que de le rendre concis mais difficile à écrire et à comprendre.
la source
Java 8 - 252 caractères
Golfé:
Non golfé:
la source
Rebol - 78
Non golfé:
Exemple d'utilisation (dans la console Rebol):
la source
PHP, 104 octets
panne
date(L)
:1
pour l'année bissextile,0
sinondate(l)
: représentation textuelle complète du jour de la semainela source
GNU coreutils, 71 octets
Recherche linéaire des 8 prochaines années (pire cas, donné 2096-02-29). Sed trouve et sort la première ligne qui correspond au 29 février.
J'ai été surpris de constater que
t;d;:;q
c'était plus court que de tester pour voir si les chiffres restaient (/[01]/d;q
), bien qu'il y ait deux fois plus de commandes.Les tests
J'ai ajouté une gamme supplémentaire de tests pour les cas d'angle difficiles:
la source