Wprowadzenie
Często ludzie określają daty jako „drugi piątek sierpnia 2018 r.” Lub „czwartą niedzielę marca 2012 r.”. Ale trudno powiedzieć, która to data! Twoim zadaniem jest napisanie programu, który odbiera rok, miesiąc, dzień tygodnia i liczbę całkowitą, i wypisuje tę datę.
Wyzwanie
Do wprowadzenia otrzymasz rok, miesiąc, dzień tygodnia i liczbę.
Możesz przyjmować dane wejściowe w dowolnym rozsądnym formacie, np. Używając ciągu na dzień tygodnia lub używając tygodnia indeksowanego zerowo, a nawet wziąć rok i miesiąc w jednym ciągu. Jednak wyjaśnij swój format wejściowy w swojej odpowiedzi.
Liczba całkowita, która informuje, który dzień tygodnia w miesiącu, na który chcesz kierować, będzie liczbą całkowitą od 1 do 5. Liczba całkowita nigdy nie będzie oznaczać dnia tygodnia, który nie istnieje (np. Piąty piątek lutego 2019 r., Który nie istnieje).
Lata zawsze będą pozytywne.
Dane wyjściowe mogą mieć dowolny rozsądny format, w tym wydrukować datę końcową. Jednak proszę wyjaśnić swój format wyjściowy i swoją odpowiedź.
Podanie roku i miesiąca w danych wyjściowych jest opcjonalne. Możesz również założyć, że data jest ważna.
Przykład wejścia i wyjścia
Rozważ to wejście, przy czym format przyjmuje się w roku jako 4-cyfrową liczbę, miesiąc jako liczbę całkowitą, dzień tygodnia jako ciąg, a liczbę porządkową jako liczbę całkowitą:
2019, 3, sobota, 2
2019, 12, niedziela, 1
2019, 9 sobota, 1
Wynik:
9 marca 1
grudnia
7 września
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź.
date
, ale zabawnie parser ma tutaj ... interesującą interpretację .Odpowiedzi:
Szablon MediaWiki, 19 bajtów
To jest port ParserFunctions szablonu MediaWiki tej odpowiedzi PHP
Uwaga:
#time
używaj PHPstrtotime
wewnętrznie.Przykładowe dane wejściowe
Przykładowe dane wyjściowe
źródło
Japt,
1915 bajtówDane wejściowe to: rok, 0-miesięczny indeks miesiąca, 0-dniowy indeks tygodnia (
0
to niedziela) in
.Spróbuj
źródło
C # (interaktywny kompilator Visual C #) , 59 bajtów
Wypróbuj online!
-27 bajtów dzięki @EmbodimentOfIgnorance!
Kod mniej golfowy ...
Wartość zwracana jest liczbą całkowitą dla dnia miesiąca, w którym żądana jest data.
źródło
SmileBASIC,
5851484645 bajtówDane wejściowe mają postać:
week,year/month/weekday
week
: numer tygodnia, 0-indeksowanyyear
: rok, 4 cyfrymonth
: miesiąc (1 indeksowany), 2 cyfry -0
wypełnioneweekday
: dzień tygodnia (1 indeksowany, 1 = niedziela), 2 cyfry -0
wypełnioneWyjście to dzień miesiąca, zindeksowane 0.
Druga sobota marca 2019 r. To
1,2019/03/07
→8
(9 marca)Bez golfa
Wyjaśnienie
Formularz wejściowy został specjalnie wybrany, aby rok / miesiąc / dzień tygodnia mógł zostać przekazany bezpośrednio do
DTREAD
, co jest funkcją analizującąYYYY/MM/DD
ciąg znaków i zwraca rok / miesiąc / dzień jako liczby, a także oblicza dzień tygodnia.Zauważ jednak, że tam, gdzie
DTREAD
oczekuje się dnia miesiąca, podajemy go zamiast tego dnia tygodnia. To komplikuje rzeczy, ale oznacza również, że jest mniej wartości wejściowych i nie musimy dodawać/01
na końcu łańcucha daty.DTREAD
wyjściaW
iD
.W
jestD
dniem tygodnia i jest dniem tygodniaW
dnia miesiąca.(Jeśli więc wpiszesz
7
jako dzień tygodnia,D
będzie7
iW
będzie niezależnie od tego, w który dzień tygodnia jest siódmy dzień miesiąca)Wyrażenie
(5-W+D*2)MOD 7
służy do uzyskania pierwszego wystąpienia wejściowego dnia tygodnia, jako dnia miesiąca indeksowanego według 0. (Wymyśliłem to głównie poprzez próbę i błąd)Następnie program po prostu dodaje
WEEK*7
.Naprawdę chciałbym mieć osobne słowa dla „dnia tygodnia” i „dnia miesiąca”.
źródło
Perl 6 ,
5248 bajtówWypróbuj online!
Anonimowy blok kodu, który pobiera dane jako rok, miesiąc, dzień tygodnia (niedziela to 0) i numer tygodnia (indeksowane 0). Dane wyjściowe to obiekt daty.
Stare objaśnienie:
źródło
$^c+4-$!.daycount
.MATL ,
2827 bajtówWykorzystuje trzy wejścia:
'March 2019'
Sat
'2
.Dane wyjściowe to ciąg z dniem, rokiem i miesiącem oddzielone myślnikami:
09-Mar-2019
.Wypróbuj online!
Wyjaśnienie
Rozważmy wejść
'March 2019'
,'Sat'
,2
.źródło
Python 3 ,
9282 bajty82 bajty dzięki @Jo King
Wypróbuj online!
Wersja oryginalna, 92 bajty
Wypróbuj online!
Przyjmuje rok jako liczbę całkowitą, miesiąc jako liczbę całkowitą z 1 indeksem, dzień tygodnia jako liczbę całkowitą z zerowym indeksem, gdzie jest poniedziałek
0
i niedziela6
, a tydzień miesiąca jako liczbę całkowitą z 1 indeksowanym.Jak to działa:
źródło
R ,
7269 bajtówWypróbuj online!
Przyjmowanie danych wejściowych jako:
źródło
PHP ,
46,43, 31 bajtówWypróbuj online!
Program otrzymuje jako wejście ciąg podobny do
"second saturday of March 2019"
Program drukuje numer dnia.
-12 bajtów dzięki Shaggy.
źródło
of
wejścia.Groovy , 46 bajtów
Wypróbuj online!
Wprowadzanie jako lata od 1900 r., Miesiąc indeksowany według 0, dzień indeksowany jako 0 (niedziela oznacza 0) i numer tygodnia
źródło
Scala , 86 bajtów
Wypróbuj online!
źródło
Czerwony ,
6460 bajtówWypróbuj online!
Przyjmuje rok, miesiąc i dzień tygodnia jako liczby, indeksowane 1, poniedziałek jest pierwszym dniem tygodnia.
źródło
to-date
to coś. być może przydałoby się to w wyzwaniu formatu przedświątecznegonow
do tego wyzwania" Eve"
datę2-data1 razy> metoda iirc)>> 25-Dec-2019 - 1-1-2019 == 358
APL (Dyalog Unicode) , 36 bajtów SBCS
Pełny program Monituje o
[year,month]
(1 stycznia), następnie o dzień (niedziela to 0), a następnie o n (pierwszy to 1).Wypróbuj online!
⎕CY'dfns'
c o p y w bibliotece dfns⊣
odrzuć wynik tego na rzecz…⎕
szybka konsola dla[year,month]
liczbdays
[c] dni [n] od 1899-12-31 z 0 tego miesiąca(⍳31)+
Dodać I ntegers 1 ... 31 to, żed←
zapisz wd
(dla numerów d )7|
pozostała część podziału przy dzieleniu przez 7 (dzień tygodnia z niedzielą 0 z powodu dobrej epoki)⎕=
podpowiedz konsolę o numerze dnia tygodnia i uzyskaj maskę, gdzie są równe liczbom dnia tygodniad/⍨
filtruj zad
pomocą tej maski⎕⊃
monit konsoli dla n i użyj go, aby wybrać z listy numerów dnidate
[c] datetime stamp [n] (ma zera końcowe dla godzin, minut, sekund, milisekund)Kliknij [c] dla kodu i [n] dla notatek.
źródło
JavaScript (ES6),
4948 bajtówPrzyjmuje parametry jako
f([year, month], day, number)
. Miesiąc i dzień tygodnia (od niedzieli) są zerowane. Edycja: Zapisano 1 bajt dzięki @Shaggy.źródło
0
w JS.TSQL, 106 bajtów
Wynik:
Wypróbuj to
źródło
Kotlin ,
13184 bajtów47 bajtów dzięki kodowi i komentarzowi ASCII-only.
Dane wejściowe: rok, miesiącNumer, dzień tygodniaNumer, tydzieńNumer
Wszystkie liczby całkowite od 1 do maksimum w jednej linii. Numer dnia tygodnia to niedziela od 1 do soboty 7. Główny program powoduje, że rok traci 1900 dla klasy Data, a miesiąc i dzień tygodnia są przesunięte tak, aby zaczynały się od zera zamiast jednego przed wywołaniem lambda. Możesz wpisać argumenty w polu tekstowym, aby wypróbować własne daty.
Dane wyjściowe: instancja klasy Date. Główny program wyświetla wynik w następujący sposób: sob. Mar 09 00:00:00 UTC 2019.
Istnieje rozszerzona wersja z komentarzami wyjaśniającymi kod dla tych, którzy chcą dowiedzieć się więcej.
Wypróbuj online!
źródło