Aww, stary, ta data ważności nie pisze miesięcy listami! Nie wiem, czy wygasa 10 marca, czy 3 października ... Poczekaj, nie, nieważne, rok mówi 2012. (aleja oops w połowie zużyta cegła sera do kosza może jak zawodowiec)
Załóżmy więc przez chwilę, że jesteś zbyt zajęty, aby spróbować zrozumieć, kiedy ten słoik marinara ma wygasnąć. Chcesz tylko wersję Cliff Notes: jak prawdopodobne jest, że jest przeterminowana? Napiszmy kod!
Wiesz, że producenci drukują datę jako zamówioną potrójną liczbę całkowitą, w jednym z trzech formatów:
YEAR MONTH DAY
MONTH DAY YEAR
DAY MONTH YEAR
I wiesz, że niektóre daty można interpretować tylko na jeden lub dwa sposoby, a nie wszystkie trzy: 55 w 55-11-5
musi być rokiem, co oznacza, że to konkretne pudełko Twinkies wygasło 5 listopada 1955 r. Rok ten jest czasem podawany w czterech cyfrach i nie dwa, co może wykluczyć niektóre opcje. Kiedy są to dwie cyfry, 50..99 oznacza 1950..1999, a 0..49 oznacza 2000..2049.
Twoim zadaniem jest napisanie programu lub funkcji, która pobiera tablicę liczb całkowitych, która jest prawidłową datą w co najmniej jednej z powyższych interpretacji i daje procent szansy, że nadal jest dobra. Procentowa szansa to po prostu procent prawidłowych interpretacji daty, która przypada w dniu dzisiejszym lub później .
Tablica liczb całkowitych będzie [Int]
typu trzech długości twojego języka, jeśli jest argumentem funkcji i podana jako liczba całkowita rozdzielona myślnikiem, ukośnikiem lub spacjami (możesz wybrać), jeśli jest używana jako dane wejściowe STDIN do pełny program. *
„Dzisiejsza data” może być dzisiejszą rzeczywistą datą uzyskaną za pomocą funkcji daty lub datą podaną w dodatkowym argumencie funkcji lub dodatkowym parametrze w STDIN. Może to być sekunda epoki uniksowej, kolejny potrójny dzień-miesiąc wprowadzony na jeden z trzech powyższych sposobów lub inna wygodniejsza moda.
Zobaczmy kilka przykładów! Wprowadzanie daty wygaśnięcia będzie odbywało się w stylu rozdzielanym myślnikiem i przyjmijmy w poniższych przykładach, że dzisiejsza data to 5 lipca 2006 r.
14-12-14
- Obie ważne interpretacje tego (DMY i YMD) są równoważne, 14 grudnia 2014 r. Wynik wynosi 100, ponieważ ten produkt jest zdecydowanie dobry.8-2-2006
- Ostatni numer to na pewno rok, ponieważ ma cztery cyfry. Może to być 8 lutego (wygasł) lub 2 sierpnia (nadal dobry). Wyjście wynosi 50 .6-7-5
- To może być cokolwiek! Interpretacja „5 lipca 2006 r.” Jest nadal dobra (tylko na jeden dzień), ale pozostałe dwie są w 2005 r. I powinny zostać odrzucone tak szybko, jak to możliwe. Wyjście to 33 .6-5-7
- Tutaj dwie z trzech interpretacji są bezpieczne. Możesz zaokrąglać ułamek dziesiętny w górę lub w dół, więc 66 lub 67 są w porządku.12-31-99
- Okej, ten jest jednoznaczny z przełomu wieków (lata od 50 do 99 to 19XX, a 31 nie może być miesiącem). Duży tłuszcz 0 i naprawdę powinieneś częściej czyścić lodówkę.
Możesz bezpiecznie założyć, że wszelkie dane wejściowe, które nie spełniają powyższych standardów, nie są objęte powyższymi regułami dotyczącymi wyników.
Brak żądań internetowych lub standardowych luk. Biblioteki obsługi dat są dozwolone. To jest kod golfowy: może wygrać najkrótszy program.
* Jeśli używasz głupoty lub jakiegoś języka z podobnym upośledzeniem typu danych, możesz założyć, że ASCII pierwszych trzech wprowadzonych znaków to liczby całkowite dla daty. To wyklucza czterocyfrową logikę roku, oczywiście, ale myślę, że bylibyśmy zbyt zdumieni widząc rozwiązanie tego problemu w Brainfuck, aby cię za to lekceważyć.