J'additionnais récemment l'âge de moi-même, de ma femme et de mes enfants et je me suis rendu compte qu'à un moment donné, dans un avenir pas trop lointain, nos âges totaliseraient exactement 100 ans.
Défi
Pour une entrée composée d'un âge combiné (total) et d'une liste de dates de naissance, affichez la date à laquelle les âges combinés s'ajoutent au total donné.
- L'âge combiné en entrée (en années) sera un entier positif
- La liste d'entrée des dates de naissance sera une liste (quel que soit le format qui convient à votre langue) des dates qui doivent contenir une représentation numérique du jour, du mois et de l'année. Nombre de jours depuis une époque spécifique n'est pas acceptable. Vous pouvez supposer que la liste des dates d'entrée est triée par ordre chronologique.
- La sortie sera une seule date dans le même format que les dates d'entrée
- Aux fins de l'âge combiné, 1 an est considéré comme étant exactement 365,25 jours
- Pour certaines entrées, il sera impossible de trouver une date après toutes les dates de naissance quand elles s'ajouteront toutes à l'âge combiné. Par exemple, considérons deux dates de naissance espacées de 20 ans, mais nous voulons une combinaison de 10 ans. Dans ce cas, la sortie serait le 10e anniversaire de la date de naissance la plus ancienne. En d'autres termes, les âges individuels sont considérés comme 0 pour toutes les dates antérieures à la date de naissance de cet individu
- La sortie sera la première date à laquelle les âges combinés totalisent au moins l'âge d'entrée
- Vous pouvez utiliser des fonctions date-heure intégrées
- Vous devez accepter les dates remontant au 1970/01/01.
Exemples
Ici, je donne toutes les dates au format AAAA / MM / JJ, mais vous pouvez choisir le format de votre choix.
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
Notez que dans les deux derniers exemples, la date de sortie se situe dans la plage de dates d'entrée, conformément à la règle 5.
Réponses:
Mathematica
138 107237 octetsMes premières tentatives ont été bâclées et indignes. Cela devrait fonctionner de manière générale, à condition que les dates de naissance soient données du plus tôt au plus tard, comme dans les cas de test.
Les cas de test étaient bien choisis et difficiles à mettre en œuvre correctement. Le code s'est avéré bien plus long que je ne l'avais espéré.
La logique générale est de
Cas de test
la source
PowerShell,
145125octetsUn défi assez délicat, mais relativement simple une fois compris.
Développé et commenté:
Exemple:
L'entrée doit contenir un tableau au format explicite de représentations chaîne-date. La sortie est au
MM/DD/YYYY
format (par défaut pour la localisation en-us dans PowerShell).Modifier - Golfé de 20 octets en modifiant la façon dont nous parcourons les anniversaires et en utilisant while au lieu de faire / jusqu'à
la source
PHP, 220 octets
J'ai ajouté quelques nouvelles lignes pour la lisibilité.
Ideone
Voici la version non golfée:
la source