El orden de formato de las fechas es uno de los problemas más complejos y divisivos que el mundo enfrenta hoy. Algunos de nosotros argumentamos con vehemencia que Mes / Día / Año es apropiado, considerando que así es como decimos las fechas en voz alta. Otros proclaman en voz alta que Día / Mes / Año es mejor, porque pone los términos en orden ascendente de la duración que representan.
Suficiente es suficiente. Las computadoras pueden resolver esta disputa de manera simple y justa. Su código, una función o programa completo, tomará una cadena de fecha delimitada por barras, por ejemplo 12/1/2015
. Tenga en cuenta que este es el formato exacto, sin ceros a la izquierda y con un año de cuatro dígitos al final.
- Si definitivamente es Mes / Día / Año, por ejemplo
10/31/1998
, envíe una representación de texto de esa fecha en este formato exacto, con el nombre completo del mes, día y año:October 31, 1998
- Si es sin duda el día / mes / año, por ejemplo
25/12/1989
, la salida de la misma clase de representación de texto:December 25, 1989
. - Si es ambiguo ya sea Mes / Día / Año o Día / Mes / Año, genere una fecha que resuelva la ambigüedad combinando las dos fechas posibles de la siguiente manera:
- Cree un nuevo nombre de mes tomando la primera mitad del nombre del mes anterior y agregue la segunda mitad del mes posterior . Para meses con longitud impar, la primera mitad recibe la carta extra. Para ser explícitos, las primeras mitades de los meses son
Janu
,Febr
,Mar
,Apr
,Ma
,Ju
,Ju
,Aug
,Septe
,Octo
,Nove
, yDece
y las segundas mitades son, por lo tantoary
,uary
,ch
,il
,y
,ne
,ly
,ust
,mber
,ber
,mber
, ymber
. - Calcule el día promediando los dos días posibles, tomando el piso cuando el promedio no es un número entero.
- Salida de la representación de texto de esta fecha, por ejemplo
10/8/2011
, para salidaAugber 9, 2011
.
- Cree un nuevo nombre de mes tomando la primera mitad del nombre del mes anterior y agregue la segunda mitad del mes posterior . Para meses con longitud impar, la primera mitad recibe la carta extra. Para ser explícitos, las primeras mitades de los meses son
Si la fecha de entrada no puede ser Mes / Día / Año o Día / Mes / Año (por ejemplo, 13/13/2013
o incluso 2/30/2002
), cualquier comportamiento es aceptable. Este código de golf, el código más corto gana!
Casos de prueba:
10/31/1998
da October 31, 1998
25/12/1989
da December 25, 1989
10/8/2011
da Augber 9, 2011
8/5/1957
da Maust 6, 1957
9/12/2012
(curiosamente) da September 10, 2012
1/1/2000
da January 1, 2000
without leading zeroes and with a four-digit year at the end
implicayear >= 1000
Respuestas:
Pyth - 156 bytes
Código realmente malo, y necesitará usar cadenas empaquetadas, pero es algo.
Test Suite .
fuente
Mathematica
341 304 298 288293 bytesUtiliza una función pura o anónima, es decir, una función sin nombre propio.
DateString
devuelve un mensaje de error si la fecha es ambigua.Check
capta la ambigüedad y envía la fecha del delito aDateList
, que lo transforma en una lista de 3 enteros (que cree que es{year, month, day}
). Los enteros de mes y día se ordenan por tamaño y se utilizan para determinar el mes y el día según las instrucciones del OP.Quiet
silencia la impresión de error.fuente
Javascript (ES6),
311295282274246238 bytesEditar: se utiliza
toLocaleString
para generar nombres de mes. ¡Cambie la configuración regional para obtener resultados utilizando nombres de mes en diferentes configuraciones regionales!Edición 2: ¡ Ahora genera nombres de dos meses en lugar de los 12!
Sin golf:
Ejemplo:
Gracias a:
@ user81655 , 274 => 246 bytes
@ edc65 , 246 => 238 bytes
fuente
Math.ceil(e[c].length/2)
a(r=e[c].length/2)+r%1
,Array(2).fill().map((_,f)=>...)
af=>...
, y todos lose[n]
quee(n)
,i=+(g>h)
ai=g>h
ye[i]
ae[+i]
, quitar los soportes innecesarios en el último operador ternario, también,newDate
debe sernew Date
.Math.ceil
usarb=c=>e(c).length+1>>1
JavaScript ES6, 204
Fragmento de prueba:
fuente
Python 3 (290 bytes)
Similar a la respuesta de Ashwin Gupta, pero aprovechando el módulo de calendario de Python para evitar escribir todos los nombres de los meses.
Python 2 debería recortar algunos bytes con división entera y perder los paréntesis
print
.fuente
Python,
558554 bytesUn ejemplo realmente, realmente horrible de cómo hacer esto en Python. Lo siento, soy súper malo en estas cosas de golf
D:
. Funciona sin embargo. Estoy seguro de que hay muchas maneras de simplificar esto, así que hágamelo saber en los comentarios. Golfizado:Sin golf
Captura de pantalla:
fuente
S=" "
en la parte superior, luego reemplace cada instancia de" "
conS
- eso eliminará algunos bytese= int[...
,o = o...
). Además, puede resultar ventajoso establecer llamadas de uso frecuente comoint
letras mayúsculas de una sola letrafrom 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 bytesPensé que podía competir con la respuesta de Javascript. Oh bien.
Creo que podría hacerlo más pequeño y no me gusta el código que usé para las fechas ambiguas. Creo que hay una mejor manera de hacerlo.
Sin golf:
fuente