Kto nie lubi relaksować się w niedzielny poranek latem przy schłodzonym piwie i telewizorze lub zimą grając w badmintona lub z przyjaciółmi?
Zawsze myślę, że wiedza o tym, ile dni musisz odpocząć w ciągu miesiąca, zapewnia ci dobre informacje i pomaga zaplanować, co chcesz zrobić. Czy to siedzenie przed komputerem i rozwiązywanie problemów z golfem lub wychodzenie na mecz.
Więc mi pomóc napisać program lub funkcję, która przyjmuje jako wejście 2 liczb całkowitych dodatnich, Y
a M
i wysyła liczbę niedziele w danym roku ( Y
) i miesiąca ( M
) (wg kalendarza gregoriańskiego), a następnie do dnia każdej niedzieli.
Pamiętaj też, że wygrywa najkrótszy kod.
Ograniczenia wejściowe
1000 <= Y <= 9999
1 <= M <= 12
Wynik
Te przypadki testowe będą miały dane wyjściowe będą miały daty każdej niedzieli tego miesiąca w tym roku w formacie DD-MM-YYYY
.
Przykładowe przypadki testowe
Przypadek testowy 1
Przykładowe dane wejściowe
2017 1
Przykładowe dane wyjściowe
5
01-01-2017
08-01-2017
15-01-2017
22-01-2017
29-01-2017
Przypadek testowy 2
Przykładowe dane wejściowe
2018 2
Przykładowe dane wyjściowe
4
04-02-2018
11-02-2018
18-02-2018
25-02-2018
Przypadek testowy 3
Przykładowe dane wejściowe
2016 11
Przykładowe dane wyjściowe
4
06-11-2016
13-11-2016
20-11-2016
27-11-2016
Date()
obiekt, i dowolny format wyjściowy, w tym[4, [<dateobj>, <dateobj>, <dateobj>, <dateobj>]]
(gdzie<dateobj>
jest rzeczywisty obiekt daty i[]
rzeczywista tablica)./
zamiast-
? Czy może to być miesiąc, dzień, rok?Odpowiedzi:
MATL ,
46454235 bajtówDane wejściowe to tablica formularza
[2017 1]
. Format wyjściowy to29/01/2017
.Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
Python 2 ,
150,148,145 bajtówWypróbuj online!
-3 bajty, dzięki czemu rzeczy są bardziej pytoniczne (użycie zip i filtru!)
źródło
JavaScript (ES6), 107 bajtów
Edycja: dodanie jawnej liczby kosztuje 15 bajtów. Formatowanie danych wyjściowych kosztowałoby co najmniej kolejne 33 bajty w zależności od tego, jak ścisły jest format wyjściowy.
źródło
outputs the number of Sundays in that particular year and month
; wygląda na to, że obecnie nie wyświetla liczby niedziel.<input type='date'>
.PowerShell , 91 bajtów
Wypróbuj online!
(Uwaga specjalna - jest to zależne od ustawień regionalnych i kulturowych. Ponieważ TIO działa jako
en-us
, działa poprawnie tam, gdzie jest). Kod ten może wymagać zmiany w różnych lokalizacjach.)Pobiera dane wejściowe jako dwie liczby całkowite
$y
i$m
. Pętle od1
do31
, otrzymując nowydatetime
obiekt dla każdej możliwej daty (poprzezGet-Date
cmdlet). Przerzuca błędy do STDERR (domyślnie ignorowane w wyzwaniach związanych z golfem) przez miesiące z mniej niż 31 dni, ale to nie wpływa na wynik. Bierzemy każdy z tychdatetime
obiektów i używamy na nich znakuWhere-Object
(|?{...}
) z klauzulą!$_.dayofweek
. Właściwość.dayofweek
jest liczbą od0
do6
, z0
dogodnie odpowiadającąSunday
, więc!
ta jest prawdziwa, co pozwala zaoszczędzić kilka bajtów w porównaniu do kontroli równości, takiej jak-eq0
.Niedziele są następnie gromadzone w parenach i przechowywane w
$a
. Następnie bierzemy to.count
, a to jest umieszczane na rurociągu. Następnie wykonujemy pętlę$a
i używamy-f
operatora ormat do skonstruowania poprawnego formatu wyjściowego. Pamiętaj, że to nie generuje zer wiodących przez dni lub miesiące. Te ciągi dat są również pozostawione w potoku, a domniemaneWrite-Output
po zakończeniu programu drukuje je z separatorami nowej linii.Uwaga - jeśli format wyjściowy byłby bardziej elastyczny, moglibyśmy po prostu wyjść
$a
z potoku i nie musieć go zapętlać. Spowoduje to usztywnieniedatetime
obiektów jako format długiej daty, w tym informacje o czasie, ale doprowadzi nas do 69 bajtów , które (obecnie) zostałyby pobite tylko przez Mathematica i MATL.źródło
Oktawa, 72 bajty
nweekdate
zwraca numer daty odpowiadającyN
-temu wystąpieniu określonego dnia tygodnia w określonym miesiącu / roku. Używamy tablicy1:6
zamiast,N
aby uzyskać wszystkie wystąpienia w ciągu miesiąca. JeśliN
w ciągu miesiąca jest mniej niż wystąpień tego dnia tygodnia, wynikowy numer daty to0
. Z tego powodu wybieramy tylko prawidłowe daty za pomocą,(x>1)
a następnie przekształcamy je w ciągi za pomocądatestr
.Następnie, aby policzyć liczbę niedziel, zliczamy liczbę niezerowych (
nnz
) liczb daty w wyniku.Następnie zawijamy całość,
cellfun
aby wyświetlić każdą wartość.źródło
Rubinowy,
140132129 129118 bajtówźródło
Excel - 103 znaki
Umieść rok w komórce
A1
, a miesiąc w komórceA2
.Liczba jest w komórce
D1
, a niedziele w komórkachD2:D6
.Zakłada
D2:D6
się, że są sformatowane DD-MM-RRRR.źródło
Mathematica,
8268 bajtówFunkcja anonimowa. Wyświetla listę dni, a następnie listę niedziel jako
DateObject
s. Okazuje się, że w Mathematica 0 dzień miesiąca jest interpretowany jako ostatni dzień poprzedniego miesiąca.źródło
C #, 183 bajtów
Anonimowa metoda, która zwraca tablicę ciągów znaków, zawierającą najpierw liczbę niedziel, a następnie każdą niedzielę w określonym formacie. Jeśli w miesiącu są tylko 4 niedziele, ostatni ciąg jest pusty.
Pełny program z nieprzylepioną metodą i przypadkami testowymi:
źródło
REXX, 168 bajtów
źródło
1217
?Bash + bsdmainutils, 94 bajty
Używa polecenia,
cal
które drukuje kalendarz, jest domyślnie instalowane w kilku systemach UNIX / LINUX / BSD (niestety nie w TIO).Aby spróbować go zapisać do
file
,chmod +x file
i run./file 2017 9
Zapisuje w szyku pierwsze dwa bajty wyjścia calowego wraz z łańcuchem „MM-RRRR” przekazanym jako drugi i pierwszy parametr (wymaga zmiany, jeśli ustawienia regionalne nie rozpoczynają się w niedziele przez kilka tygodni).
Następnie echo długości tablicy odejmowanej przez jeden (pierwszy element to słowo reprezentujące niedzielę) i tablica bez pierwszego elementu, po jednym w wierszu
fmt -1
źródło
SAS, 182 bajty
źródło
T-SQL,
316311 bajtówNie wiem jednak, czy jest to poprawna odpowiedź, ponieważ podaje liczbę niedziel po datach
Wypróbuj tutaj
bez golfa:
źródło
PHP,
127 118 112107 bajtówpobiera dane wejściowe z argumentów wiersza poleceń; uruchom go
-r
lub przetestuj online .awaria
źródło
Excel VBA, 190 bajtów
źródło