Oh Mann, dieses Verfallsdatum schreibt die Monate nicht mit Buchstaben! Ich kann nicht sagen , ob es am 10. März auslaufenden ist oder 3. Oktober ... Bitte warten, nein, geschweige denn, das Jahr 2012 sagt (Alley-Oops Ziegel Käse in den Müll Hälfte verwendet wird, kann ein Pro mögen)
Nehmen wir für einen Moment an, Sie sind zu beschäftigt, um zu überlegen, wann dieses Glas Marinara abläuft. Sie möchten nur die Cliff Notes-Version: Wie wahrscheinlich ist es, dass sie überfällig ist? Schreiben wir einen Code!
Sie wissen, dass die Hersteller das Datum als geordnetes Dreifach von ganzen Zahlen in einem von drei Formaten drucken:
YEAR MONTH DAY
MONTH DAY YEAR
DAY MONTH YEAR
Und Sie wissen, dass einige Daten nur auf eine oder zwei Arten interpretiert werden können, nicht alle drei: Die 55 in 55-11-5
müssen ein Jahr sein, was bedeutet, dass diese spezielle Box von Twinkies am 5. November 1955 abgelaufen ist. Das Jahr wird manchmal vierstellig und angegeben Nicht zwei, die einige Optionen ausschließen können. Wenn es sich jedoch um zwei Ziffern handelt, bedeutet 50..99 1950..1999 und 0..49 2000..2049.
Ihre Aufgabe ist es, ein Programm oder eine Funktion zu schreiben, die ein Array von Ganzzahlen verwendet, das in mindestens einer der obigen Interpretationen ein gültiges Datum ist, und eine prozentuale Wahrscheinlichkeit ausgibt, dass es immer noch gut ist. Die prozentuale Wahrscheinlichkeit ist einfach der Prozentsatz der gültigen Interpretationen des Datums, die am oder nach dem heutigen Datum liegen.
Das Array von Ganzzahlen ist der [Int]
Typ der Länge drei für Ihre Sprache, wenn es sich um ein Argument für eine Funktion handelt, und wird entweder als durch Bindestriche, Schrägstriche oder Leerzeichen getrennte Ganzzahlen (Sie können Ganzzahlen auswählen) angegeben, wenn sie als Eingabe für STDIN für a verwendet werden Volles Programm. *
"Heutiges Datum" kann das aktuelle Datum sein, das über eine Datumsfunktion ermittelt wurde, oder das Datum, das in einem zusätzlichen Argument für die Funktion oder einem zusätzlichen Parameter in STDIN angegeben wurde. Es kann in Unix-Epoche Sekunden sein, ein weiteres Jahr-Monat-Tag-Tripel, das auf eine der drei oben genannten Arten eingegeben wurde, oder eine andere bequemere Art und Weise.
Lassen Sie uns einige Beispiele haben! Die Eingabe des Ablaufdatums erfolgt im strichgetrennten Stil. In den folgenden Beispielen wird davon ausgegangen, dass das heutige Datum der 5. Juli 2006 ist.
14-12-14
- Beide gültigen Interpretationen (DMY und YMD) entsprechen dem Stand vom 14. Dezember 2014. Die Ausgabe beträgt 100, da dieses Produkt definitiv noch gut ist.8-2-2006
- Die letzte Zahl ist sicher ein Jahr, da sie vierstellig ist. Dies könnte entweder der 8. Februar (abgelaufen) oder der 2. August (immer noch gut) sein. Die Ausgabe ist 50 .6-7-5
- Das könnte alles sein! Die Interpretation "5. Juli 2006" ist immer noch gut (nur für einen Tag), aber die verbleibenden beiden sind beide im Jahr 2005 und sollten so schnell wie möglich geworfen werden. Die Ausgabe ist 33 .6-5-7
- Hier sind zwei von drei Interpretationen sicher. Sie können Ihre Dezimalstelle auf- oder abrunden, also sind 66 oder 67 beide in Ordnung.12-31-99
- Okay, dieser stammt eindeutig aus der Jahrhundertwende (Jahre von 50 bis 99 sind 19XX, und 31 kann unmöglich ein Monat sein). Eine große fette 0 , und Sie sollten Ihren Kühlschrank wirklich öfter ausräumen.
Sie können davon ausgehen, dass Eingaben, die den oben genannten Standards nicht entsprechen, nicht mit den oben genannten Ausgaberegeln übereinstimmen.
Keine Webanfragen oder Standardlücken. Datumsbearbeitungsbibliotheken sind zulässig. Das ist Codegolf: Möge das kürzeste Programm gewinnen.
* Wenn Sie Brainfuck oder eine ähnlich datentypbehinderte Sprache verwenden, können Sie davon ausgehen, dass die ASCII-Werte der ersten drei Zeichen in der Eingabe die Ganzzahlen für das Datum sind. Dies schließt natürlich die vierstellige Jahreslogik aus, aber ich denke, wir wären zu erstaunt, wenn wir in Brainfuck eine Lösung dafür finden würden, um Sie dafür zu beleidigen.