Ich habe kürzlich das Alter von mir und meiner Frau und meinen Kindern addiert und festgestellt, dass sich in nicht allzu ferner Zukunft unser Alter auf genau 100 Jahre summieren wird.
Herausforderung
Geben Sie für eine Eingabe, die aus einem kombinierten (Gesamt-) Alter und einer Liste von Geburtsdaten besteht, das Datum aus, an dem sich alle kombinierten Alter zur angegebenen Summe addieren.
- Das eingegebene kombinierte Alter (in Jahren) ist eine positive ganze Zahl
- Die eingegebene Liste der Geburtsdaten ist eine Liste (unabhängig vom für Ihre Sprache geeigneten Format) der Daten, die eine numerische Darstellung von Tag, Monat und Jahr enthalten muss. Anzahl der Tage seit einer bestimmten Epoche ist nicht akzeptabel. Sie können davon ausgehen, dass die Liste der Eingabedaten in chronologischer Reihenfolge sortiert ist.
- Die Ausgabe erfolgt als einzelnes Datum im selben Format wie die Eingabedaten
- Für die Zwecke des kombinierten Alters gilt 1 Jahr als genau 365,25 Tage
- Bei einigen Eingaben ist es nicht möglich, ein Datum nach allen Geburtsdaten zu finden, wenn sich alle zum kombinierten Alter addieren. Nehmen wir zum Beispiel zwei Geburtsdaten, die 20 Jahre auseinander liegen, aber wir wollen eine Kombination von 10 Jahren. In diesem Fall wäre die Ausgabe der 10. Geburtstag des älteren Geburtsdatums. Mit anderen Worten, das individuelle Alter wird für alle Daten vor dem Geburtsdatum dieser Person als 0 betrachtet
- Die Ausgabe ist das erste Datum, an dem das kombinierte Alter mindestens dem eingegebenen Alter entspricht
- Sie können integrierte Datums- / Uhrzeitfunktionen verwenden
- Sie müssen Daten unterstützen, die bis zum 01.01.1970 zurückreichen.
Beispiele
Hier gebe ich alle Daten im Format JJJJ / MM / TT an, aber Sie können jedes beliebige Format angeben.
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
Beachten Sie, dass in den letzten beiden Beispielen das Ausgabedatum gemäß Regel 5 im Bereich der Eingabedaten liegt.
Antworten:
Mathematica
138 107237 BytesMeine ersten Versuche waren schlampig und unwürdig. Dies sollte im Allgemeinen funktionieren, vorausgesetzt, die Geburtsdaten werden wie in den Testfällen in der Reihenfolge von frühestens bis spätesten angegeben.
Die Testfälle waren gut ausgewählt und schwer korrekt umzusetzen. Der Code fiel viel länger aus, als ich gehofft hatte.
Die allgemeine Logik ist zu
Testfälle
quelle
PowerShell,
145125 BytesZiemlich knifflige Herausforderung, aber einmal verstanden relativ einfach.
Erweitert und kommentiert:
Beispiel:
Die Eingabe muss ein explizit formatiertes Array von Zeichenfolgendatumsdarstellungen enthalten. Die Ausgabe erfolgt im
MM/DD/YYYY
Format (Standard für die En-Us-Lokalisierung in PowerShell).Bearbeiten - 20 Bytes durch Ändern der Iterationsmethode für Geburtstage und durch Verwenden von while anstelle von do / until
quelle
PHP, 220 Bytes
Ich habe einige Zeilen hinzugefügt, um die Lesbarkeit zu verbessern.
Ideone
Hier ist die ungolfed Version:
quelle