Jest to zainspirowane jednym z pytań Downgoata w Sandbox, w którym zasugerowałem, aby uwzględnił 31 kwietnia jako dzień Pi dla osób korzystających z formatu dzień / miesiąc, tylko po to, aby poinformował mnie, że nie ma 31 kwietnia!
Biorąc pod uwagę ciąg daty w formacie miesiąc / dzień , który może być nieprawidłowy, wypisz prawidłową datę za pomocą najazdu. (Najpierw rollover miesiąc, następnie rollover dzień).
Przykłady:
„15/43” - oznacza to 43 dzień 15. miesiąca. Najpierw przechodzimy przez miesiąc do następnego roku, więc kończymy na 3 (marzec). Teraz, ponieważ marzec ma tylko 31 dni, przenosimy dodatkowe dni na kwiecień, więc podajemy rzeczywistą datę jako „4/12” (12 kwietnia).
„3/16” - To jest prawidłowa data (16 marca). Zwróć to, co jest.
„12/64” - Ach, tyle miłych wspomnień z 64 grudnia… Grudzień ma 31 dni, styczeń ma 31 dni, więc tak naprawdę mam na myśli „2/2” (2 lutego).
„19/99” - po pierwsze, 19 staje się 7 (lipiec). Lipiec ma 31 dni, sierpień ma 31 dni, wrzesień ma 30 dni, więc wynik to „10/7” (7 października).
„1/99999” - rok ma 365 dni. 99999 (mod 365) = 354. 354 dniem roku jest „12/20” .
„9999999/10” - Najwyraźniej 9999999 (mod 12) = 3, więc jest to „3/10” (10 marca).
Kryteria:
Miesiąc wejściowy jest liczbą całkowitą> 0. Dzień wejściowy jest liczbą całkowitą> 0. Rok nigdy nie musi być określany, ponieważ nie ma lat przestępnych do rozwiązania.
Aktualizacja:
Ponieważ uważam, że nadmiernie uprości to wyzwanie, funkcje kalendarza, takie jak te z klasy Java Calendar , są zakazane. Funkcje analizy / formatowania daty są jednak nadal dozwolone.
1/99999
powinieneś się poddać 12/19
.