L'ordre de formatage des dates est l'un des problèmes les plus complexes et les plus conflictuels auxquels le monde est confronté aujourd'hui. Certains d'entre nous soutiennent avec véhémence que le mois / jour / année est approprié, étant donné que c'est ainsi que nous disons les dates à haute voix. D'autres proclament haut et fort que le jour / mois / année est le meilleur, car il place les termes dans l'ordre croissant de la durée qu'ils représentent.
Trop c'est trop. Les ordinateurs peuvent résoudre ce différend simplement et équitablement. Votre code, une fonction ou un programme complet, prendra une chaîne de date délimitée par des barres obliques, par exemple 12/1/2015
. Notez que c'est le format exact, sans zéros de tête et avec une année à quatre chiffres à la fin.
- Si c'est vraiment mois / jour / année, par exemple
10/31/1998
, la sortie d' une représentation textuelle de cette date dans ce format exact, avec le nom complet du mois, le jour et l' année:October 31, 1998
- Si c'est vraiment jour / mois / année, par exemple
25/12/1989
, sortie le même type de représentation du texte:December 25, 1989
. - S'il est ambigu, que ce soit Mois / Jour / Année ou Jour / Mois / Année, affichez une date qui résout l'ambiguïté en combinant les deux dates possibles comme suit:
- Créer un nouveau nom de mois en prenant la première moitié du nom du précédent mois et ajouter la deuxième moitié du plus tard mois. Pendant des mois avec une longueur impaire, la première moitié reçoit la lettre supplémentaire. Pour être explicite, la première moitié des mois sont
Janu
,Febr
,Mar
,Apr
,Ma
,Ju
,Ju
,Aug
,Septe
,Octo
,Nove
etDece
et les deuxièmes moitiés sont doncary
,uary
,ch
,il
,y
,ne
,ly
,ust
,mber
,ber
,mber
etmber
. - Calculez la journée en faisant la moyenne des deux jours possibles, en prenant la parole lorsque la moyenne n'est pas un entier.
- Sortez la représentation textuelle de cette date, par exemple pour la
10/8/2011
sortieAugber 9, 2011
.
- Créer un nouveau nom de mois en prenant la première moitié du nom du précédent mois et ajouter la deuxième moitié du plus tard mois. Pendant des mois avec une longueur impaire, la première moitié reçoit la lettre supplémentaire. Pour être explicite, la première moitié des mois sont
Si la date d'entrée ne peut pas être Mois / Jour / Année ou Jour / Mois / Année (par exemple 13/13/2013
ou même 2/30/2002
), tout comportement est acceptable. Ce code golf, le code le plus court gagne!
Cas de test:
10/31/1998
donne October 31, 1998
25/12/1989
donne December 25, 1989
10/8/2011
donne Augber 9, 2011
8/5/1957
donne Maust 6, 1957
9/12/2012
(curieusement) donne September 10, 2012
1/1/2000
donne January 1, 2000
without leading zeroes and with a four-digit year at the end
impliqueyear >= 1000
Réponses:
Pyth - 156 octets
Code vraiment mauvais, et devra utiliser des chaînes compressées, mais c'est quelque chose.
Suite de tests .
la source
Mathematica
341 304 298 288293 octetsCela utilise une fonction pure ou anonyme, c'est-à-dire une fonction sans son propre nom.
DateString
renvoie un message d'erreur si la date est ambiguë.Check
attrape l'ambiguïté et envoie la date incriminée àDateList
, ce qui la transforme en liste de 3 entiers (qu'elle croit être{year, month, day}
). Les entiers du mois et du jour sont triés par taille et utilisés pour déterminer le mois et le jour conformément aux instructions de l'OP.Quiet
fait taire l'erreur d'impression.la source
Javascript (ES6),
311295282274246238 octetsEdit: Utilise
toLocaleString
pour générer des noms de mois. Modifiez les paramètres régionaux pour obtenir des résultats en utilisant les noms de mois dans différents paramètres régionaux!Edit 2: Génère maintenant deux noms de mois au lieu des 12!
Non golfé:
Exemple:
Merci à:
@ user81655 , 274 => 246 octets
@ edc65 , 246 => 238 octets
la source
Math.ceil(e[c].length/2)
à(r=e[c].length/2)+r%1
,Array(2).fill().map((_,f)=>...)
àf=>...
et toute[n]
àe(n)
,i=+(g>h)
ài=g>h
ete[i]
àe[+i]
, supprimer les crochets inutiles dans le dernier opérateur ternaire, aussinewDate
devrait êtrenew Date
.Math.ceil
utiliserb=c=>e(c).length+1>>1
JavaScript ES6, 204
Extrait de test:
la source
Python 3 (290 octets)
Similaire à la réponse d'Ashwin Gupta, mais en profitant du module de calendrier de Python pour éviter d'écrire tous les noms de mois.
Python 2 devrait couper quelques octets avec une division entière et perdre les parenthèses pour
print
.la source
Python,
558554 octetsUn exemple vraiment, vraiment, vraiment horriblement golfé de comment faire cela en python. Désolé, je suis super mauvais dans ce truc de golf
D:
. Cela fonctionne cependant. Je suis sûr qu'il existe de nombreuses façons de simplifier cela, alors faites-le moi savoir dans les commentaires. Golfé:Non golfé
Capture d'écran:
la source
S=" "
en haut, puis remplacer chaque instance de" "
parS
- qui enlèvera quelques octetse= int[...
,o = o...
). en outre, il peut s'avérer hasardeux de définir des appels souvent utilisés, comme desint
variables majuscules à une seule lettrefrom math import* I=int S=" " C="," L=len P=print def d(i): l=["","January","February","March","April","May","June","July","August","September","October","November","December"];w=i.split('/');f=I(w[0]);s=I(w[1]);y=w[2] if f>12:e=I(w[1]);P(l[e]+S+w[0]+C+S+y) elif f<13and s>12:e=I(w[0]);P(l[e]+S+w[0]+C+S+y) else: if f<s:o=l[f];t=l[s] else:o=l[s];t=l[f];o=o[0:I(ceil(L(o)/2))];t=t[I(ceil(L(t)/2)):L(t)] P(o+t+S+str(floor((f+s)/2))+C+S+y)
PHP,
301294 octetsJe pensais pouvoir concurrencer la réponse Javascript. Tant pis.
Je pense que je pourrais le rendre plus petit et je n'aime pas le code que j'ai utilisé pour les dates ambiguës. Je pense qu'il y a une meilleure façon de le faire.
Non golfé:
la source