Recientemente estaba sumando las edades de mí y mi esposa e hijos y me di cuenta de que en algún momento en un futuro no muy lejano, nuestras edades sumarán exactamente 100 años.
Reto
Para una entrada que consta de una edad combinada (total) y una lista de fechas de nacimiento, indique la fecha en que las edades combinadas se suman al total dado.
- La edad combinada de entrada (en años) será un número entero positivo
- La lista de entrada de fechas de nacimiento será una lista (cualquier formato que sea conveniente para su idioma) de fechas que deben contener una representación numérica de Día, Mes y Año. Número de días desde que una época específica no es aceptable. Puede suponer que la lista de fechas de entrada está ordenada en orden cronológico.
- La salida será una sola fecha en el mismo formato que las fechas de entrada
- A los efectos de la edad combinada, 1 año se considera exactamente 365,25 días.
- Para algunas entradas, será imposible encontrar una fecha después de todas las fechas de nacimiento cuando todas sumen la edad combinada. Por ejemplo, considere dos fechas de nacimiento separadas por 20 años, pero queremos una combinación de 10 años. En ese caso, la salida sería el décimo cumpleaños de la fecha de nacimiento más antigua. En otras palabras, las edades individuales se consideran 0 para todas las fechas anteriores a la fecha de nacimiento de ese individuo.
- La salida será la primera fecha en que las edades combinadas sumen al menos la edad de entrada
- Puede usar funciones integradas de fecha y hora
- Debe admitir fechas que se remontan a 1970/01/01.
Ejemplos
Aquí estoy dando todas las fechas en formato AAAA / MM / DD, pero puede elegir el formato que desee.
Input Output
10 2000/01/01 2010/01/01
100 1975/03/05,1978/07/23,2008/11/12,2012/12/20 2018/11/22
100 1975/03/06,1978/07/23,2008/11/12,2012/12/20 2018/11/23
100 1975/03/09,1978/07/23,2008/11/12,2012/12/20 2018/11/23
100 1975/03/10,1978/07/23,2008/11/12,2012/12/20 2018/11/24
3 1990/08/01,1995/07/02 1993/08/01
50 1975/03/05,1978/07/23,2008/11/12,2012/12/20 2001/11/13
Tenga en cuenta que en los últimos dos ejemplos, la fecha de salida se encuentra dentro del rango de fechas de entrada, según la regla 5.
Respuestas:
Mathematica
138107237 bytesMis primeros intentos fueron descuidados e indignos. Esto debería funcionar en general, siempre que las fechas de nacimiento se den en orden de más temprano a más reciente, como en los casos de prueba.
Los casos de prueba fueron bien elegidos y difíciles de implementar correctamente. El código resultó mucho más largo de lo que esperaba.
La lógica general es
Casos de prueba
fuente
PowerShell,
145125bytesDesafío bastante complicado, pero relativamente sencillo una vez entendido.
Ampliado y comentado:
Ejemplo:
La entrada debe contener una matriz formateada explícitamente de representaciones de fecha de cadena. La salida está en
MM/DD/YYYY
formato (predeterminado para la localización en-us en PowerShell).Editar: jugó 20 bytes cambiando la forma en que iteramos a través de los cumpleaños y usando while en lugar de do / hasta
fuente
PHP, 220 bytes
He agregado algunas líneas nuevas para facilitar la lectura.
Ideone
Aquí está la versión sin golf:
fuente