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
.Odpowiedzi:
LabVIEW, 32 Prymitywy LabVIEW
źródło
C #,
269223Edycja : Naprawiono do pracy w przypadkach takich jak 24/1, 36/1 itp. I trochę golfa. Dzięki za komentarze, jest kilka miejsc, które trochę zapisałem!
Nie golfowany:
źródło
24/1
.Console.Write
więcej niżreturn
, aw języku C # użyłbym gochar[]
jako zamiennikastring
, ale to ta sama ilość znaków i sprawia, że dzielenie na/
bardziej problematyczne. Ale twoja notatka w Słowniku doprowadziła mnie do znacznie lepszej wersji!R,
208182 bajtówUzyskaj miesiąc, dzieląc przez 12, a następnie zapętlając, usuwając liczbę dni bieżącego miesiąca, aż otrzymasz liczbę ujemną., Odwróć ostatni krok i wydrukuj.
W wielu wierszach (należy użyć pliku i źródła):
źródło
PHP> = 5,5, 181 bajtów
PHP prawie obsługuje przechodzenie z samych instrukcji parsowania i formatowania. Na przykład:
Jednak gdy którakolwiek liczba staje się większa niż 100, PHP odrzuca jej analizę i zwraca błąd (prawdopodobnie z jakiegoś arbitralnego powodu). Tak więc teoria z tą odpowiedzią polega na sprowadzeniu jej z powrotem do miejsca, w którym PHP ją przeanalizuje, a następnie prześle
date_create_from_format()
.Nie golfowany:
Wypróbuj online
źródło
$argv
lub STDIN.$t
na$argv[1]
teraz i czyta się z wprowadzania z wiersza poleceń.JavaScript (ES6), 106 bajtów
Wyjaśnienie
Test
Pokaż fragment kodu
źródło
Odpowiedź niekonkurencyjna - Bash + coreutils, 55
„Funkcje analizy / formatowania daty są jednak nadal dozwolone” - zakładam, że oznacza to, że
date
narzędzie jest dozwolone.Dane wejściowe są odczytywane z wiersza poleceń, np .:
Jest to niekonkurencyjne, ponieważ polecenie date rozwija się do czegoś takiego, co dodaje liczbę dni:
źródło
date.add(875)
na zwiększenie daty o 875 dni. Po to przede wszystkim chciałem.date
poleceniedate -d1-3-1+42day +%-m/%-d
, więc robi dokładnie to. Myślę, że to jest niekonkurencyjna odpowiedź :(