Escriba una función o programa que acepte una fecha (como una cadena en YYYY-MM-DD
formato) como entrada y devuelva un valor verdadero si esa fecha es "alfabética" y un valor falsey si no lo es.
Una fecha alfabética es una fecha cuyo mes, día y año están en orden alfabético cuando se expresa como una cadena (y cuando se considera específicamente en orden M - D - Y). Por ejemplo, el 26 de septiembre de 2018 es una fecha alfabética:
September 26th 2018 -> September twenty-sixth two thousand eighteen
September
Twenty-sixth
Two thousand eighteen
Otra forma de pensar en este desafío: "¿los elementos de una fecha dada están ordenados léxicamente?"
Notas:
- 2018 se representa como "dos mil dieciocho", no "veinte dieciocho" o "dos cero uno ocho". Para otro ejemplo, el año 1456 se representaría como "mil cuatrocientos cincuenta y seis", no "catorce cincuenta y seis".
- 26 se representa como "vigésimo sexto", no "veintiséis".
- Cada elemento de la fecha se considera como un todo. Es por eso que 2018 no falla automáticamente a pesar de que la "e" en dieciocho viene antes que la "t" en dos.
Las siguientes fechas no son alfabéticas:
- 2 de septiembre de 2018 ("segundo" debe clasificarse antes de "septiembre")
- 30 de abril de 4000 ("cuatro mil" deberían clasificarse antes del "trigésimo")
Reglas Adicionales:
- Recibirá la fecha como una cadena, formateada como
YYYY-MM-DD
. El año siempre tendrá cuatro dígitos, y el mes y el día siempre tendrán dos dígitos cada uno. El relleno cero no se representa en la conversión de cadena (por ejemplo, '2000-01-01' es 'Primero dos mil de enero' como era de esperar). - Puede suponer que las fechas siempre serán válidas (no el 30 de febrero, no el 1 de marzo) y que el valor del año será positivo (sin fechas BC), pero la fecha puede estar muy lejos en el futuro ("en el año
dosnueve mil..."). - Debe devolver un valor verdadero o falso, no necesariamente un valor booleano
True
oFalse
. Si hace esto en Javascript y desea regresar'0'
y0
eso está bien. Por supuesto, si desea devolver un valor booleano, siéntase libre. - Las lagunas estándar están prohibidas.
- Esto es
code-golf
Más ejemplos de fechas alfabéticas
- 2066-01-02 (2 de enero de dos mil sesenta y seis)
- 1000-04-08 (ocho de abril de mil)
- 6000-08-01 (primero de agosto, seis mil)
Más ejemplos de fechas no alfabéticas
- 1066-01-02 (2 de enero de mil sesenta y seis)
- 1000-04-07 (7 de abril de mil)
- 8000-08-01 (primero de agosto, ocho mil)
Respuestas:
05AB1E ,
666258 bytesPruébelo en línea o verifique todos los ejemplos mencionados en el desafío .
Explicación:
Vea esta sugerencia mía 05AB1E (sección ¿Cómo comprimir listas enteras? ) Para comprender por qué
•88ΛηΣλšëÇñ0é≠>sîä&ζp°Lć®-αÅ®`•21в
es[7,3,7,0,7,7,7,0,13,10,10,0,4,12,17,6,4,17,15,2,9,17,2,19,17,6,4,17,15,2,9,19,19,19,19,19,19,19,19,19,19,17,17,11,20,18,5,5,16,14,1,8]
yŽqT32в
es[12,31,9]
.Explicación general adicional:
La función de clasificación clasificará los tres tipos (día, mes, año), al mismo tiempo, donde vamos a devolver un valor Truthy sólo si
M < D < Y
(cuando éstasD
,M
yY
son los valores que hemos recuperado de las listas de comprimidos).¿Por qué estas tres listas mencionadas anteriormente? Si ponemos todas las palabras en orden, clasificadas por tipo, tenemos el siguiente orden:
Si luego observamos cada tipo individualmente y su orden original (mil, dos mil, etc. por años; enero, febrero, etc. por meses; y primero, segundo, etc. por días), los números de clasificación mencionados anteriormente son en estos pedidos:
fuente
JavaScript (ES6), 101 bytes
Guardado 4 bytes gracias a @Shaggy
Pruébalo en línea! o prueba todas las fechas! (incluye algunas entradas inválidas)
¿Cómo?
La última parte de la cadena de búsqueda para los ID de día está ligeramente comprimido mediante el uso
${6e12-12}
, que se expande a5999999999988
(19 º a 31 st ).fuente
m=
fue, por supuesto, completamente inútil. Gracias. :)