Esto está inspirado en una de las preguntas de Downgoat en Sandbox, donde le sugerí que incluyera el 31 de abril como día Pi para las personas que usan el formato día / mes, ¡solo para que él me informe que no hay 31 de abril!
Dada una cadena de fecha en mes / día formato de que puede no ser válida, envíe la fecha correcta utilizando la renovación. (Primero reinvierta el mes, luego reinvierta el día).
Ejemplos:
"15/43" - Esto se lee como el día 43 del mes 15. Primero, pasamos el mes al próximo año, por lo que terminamos con 3 (marzo). Ahora, dado que marzo solo tiene 31 días, transferimos los días adicionales a abril, por lo que mostramos la fecha real como "4/12" (12 de abril).
"3/16" : esta es una fecha válida (16 de marzo). Devuélvelo como está.
"12/64" - Ah, tantos buenos recuerdos del 64 de diciembre ... Diciembre tiene 31 días, enero tiene 31 días, así que lo que realmente quiero decir es "2/2" (2 de febrero).
"19/99" - Primero, el 19 se convierte en un 7 (julio). Julio tiene 31 días, agosto tiene 31 días, septiembre tiene 30 días, por lo que la salida es "10/7" (7 de octubre).
"1/99999" : un año tiene 365 días. 99999 (mod 365) = 354. El día 354 del año es "12/20" .
"9999999/10" - Aparentemente, 9999999 (mod 12) = 3, entonces esto es "3/10" (10 de marzo).
Criterios
El mes de entrada es un entero> 0. El día de entrada es un entero> 0. El año nunca necesita ser especificado, por lo que no hay años bisiestos que tratar.
Actualizar:
Como creo que simplificaría demasiado el desafío, las funciones de calendario, como las de la clase Java Calendar , están prohibidas. Sin embargo, las funciones de análisis / formato de fechas todavía están permitidas.
1/99999
debería ceder12/19
, creo.Respuestas:
LabVIEW, 32 primitivas de LabVIEW
fuente
C #,
269223Editar : arreglado para funcionar en casos como 24/1, 36/1, etc. y jugó un poco al golf. Gracias por los comentarios, ¡hay varios lugares que guardé un poco!
Sin golf:
fuente
24/1
.Console.Write
másreturn
, y en C # lo usaríachar[]
como reemplazostring
, pero es la misma cantidad de caracteres y hace que la división sea/
más problemática. ¡Pero su nota en el Diccionario me llevó a una versión mucho mejor!R,
208182 bytesObtenga el mes dividiéndolo por 12, luego repita, eliminando el número de días del mes actual hasta obtener un número negativo., Invierta el último paso e imprima.
En varias líneas (necesita usar un archivo y obtenerlo):
fuente
PHP> = 5.5, 181 bytes
PHP casi admite la transferencia con solo el análisis de fechas y las instrucciones de formateo. Por ejemplo:
Sin embargo, una vez que cualquiera de los números sea mayor que 100, PHP rechaza analizarlo y devuelve un error (probablemente por alguna razón arbitraria). Entonces, la teoría con esta respuesta es regresarlo a donde PHP lo analizará y luego enviarlo
date_create_from_format()
.Sin golf:
Pruébalo en línea
fuente
$argv
o STDIN.$t
de$argv[1]
y ahora se lee de la entrada de línea de comandos.JavaScript (ES6), 106 bytes
Explicación
Prueba
Mostrar fragmento de código
fuente
Respuesta no competitiva - Bash + coreutils, 55
"Sin embargo, las funciones de análisis / formateo de fechas todavía están permitidas" . Supongo que esto significa que la
date
utilidad está permitida.La entrada se lee desde la línea de comando, por ejemplo:
Esto no es competitivo porque el comando de fecha se expande a algo como esto, que agrega varios días:
fuente
date.add(875)
aumentar la fecha en 875 días. Eso es principalmente lo que buscaba.date
comando completamente expandido aquí esdate -d1-3-1+42day +%-m/%-d
, así que está haciendo exactamente eso. Supongo que esta es una respuesta no competitiva :(