pengantar
Seringkali, orang menyebut tanggal sebagai "Jumat kedua pada Agustus, 2018" atau "Minggu keempat pada Maret 2012". Tetapi sulit untuk mengatakan tanggal berapa itu! Tugas Anda adalah menulis program yang menerima satu tahun, satu bulan, satu hari dalam seminggu, dan bilangan bulat, dan menampilkan tanggal tersebut.
Tantangan
Untuk input, Anda akan mendapatkan satu tahun, satu bulan, satu hari dalam seminggu, dan sebuah angka.
Anda dapat mengambil input dalam format apa pun yang wajar, seperti menggunakan string untuk hari dalam seminggu atau menggunakan nol hari kerja yang diindeks, atau bahkan mengambil tahun dan bulan dalam satu string. Namun, jelaskan format input Anda dalam jawaban Anda.
Bilangan bulat yang memberi tahu Anda hari mana dalam satu bulan dalam target yang akan menjadi bilangan bulat dari 1-5. Bilangan bulat tidak akan pernah merujuk ke hari dalam seminggu yang tidak ada (mis. Jumat kelima Februari 2019, yang tidak ada).
Tahun akan selalu positif.
Output Anda dapat dalam format yang masuk akal, termasuk mencetak tanggal akhir Anda. Namun, tolong jelaskan format output Anda di luar jawaban Anda.
Memberikan tahun dan bulan dalam output adalah opsional. Anda juga dapat menganggap tanggal tersebut valid.
Contoh Input dan Output
Pertimbangkan input ini, dengan format yang diambil pada tahun tersebut sebagai angka 4 digit, bulan sebagai bilangan bulat, hari dalam seminggu sebagai string, dan nomor urut sebagai bilangan bulat:
2019, 3, Sabtu, 2
2019, 12, Minggu, 1
2019, 9 Sabtu, 1
Keluaran:
9 Maret
1
Desember 7 September
Ini kode-golf , jadi jawaban tersingkat menang.
date
, tetapi yang mengherankan, parser memiliki ... interpretasi yang menarik di sini.Jawaban:
Templat MediaWiki, 19 byte
Ini adalah port MediaWiki Template ParserFunctions dari jawaban PHP ini
Catatan:
#time
gunakan PHP secarastrtotime
internal.Input Sampel
Output Sampel
sumber
Japt,
1915 byteInput adalah: tahun, indeks berbasis bulan 0, indeks berbasis hari dalam seminggu (
0
adalah hari Minggu) &n
.Cobalah
sumber
C # (Visual C # Interactive Compiler) , 59 byte
Cobalah online!
-27 bytes terima kasih kepada @EmbodimentOfIgnorance!
Lebih sedikit kode golf ...
Nilai kembali adalah bilangan bulat untuk hari bulan dari tanggal yang diminta.
sumber
SmileBASIC,
5851484645 byteMasukan dalam bentuk:
week,year/month/weekday
week
: nomor minggu, 0-diindeksyear
: tahun, 4 digitmonth
: bulan (1-diindeks), 2 digit0
paddedweekday
: hari dalam seminggu (1-indexed, 1 = Sunday), 2 digit0
-paddedOutput adalah hari dalam sebulan, 0 diindeks.
Sabtu 2 Maret 2019 adalah
1,2019/03/07
→8
(9 Maret)Tidak disatukan
Penjelasan
Formulir input dipilih secara khusus sehingga tahun / bulan / hari kerja dapat diteruskan langsung ke
DTREAD
, yang merupakan fungsi yang mem-parsing suatuYYYY/MM/DD
string dan mengembalikan tahun / bulan / hari sebagai angka, serta menghitung hari dalam seminggu.Namun, perhatikan bahwa, di mana
DTREAD
mengharapkan hari dalam sebulan, kami memberikannya hari dalam seminggu sebagai gantinya. Ini menyulitkan banyak hal, tetapi juga berarti bahwa ada nilai input yang lebih sedikit dan kami tidak perlu menambahkan/01
ke akhir string tanggal.DTREAD
outputW
danD
.W
adalah hari kerja, danD
merupakan hari-hari-minggu dariW
hari ke-1 bulan itu.(Jadi, jika Anda input
7
sebagai hari kerja,D
akan menjadi7
danW
akan menjadi hari apa pun di hari ke 7 di bulan tersebut)Ekspresi
(5-W+D*2)MOD 7
digunakan untuk mendapatkan kemunculan pertama input hari kerja, sebagai hari yang diindeks 0 pada bulan tersebut. (Saya menemukan ini sebagian besar melalui coba-coba)Setelah itu, program tinggal menambahkan
WEEK*7
.Saya benar-benar berharap ada kata-kata terpisah untuk "hari dalam seminggu" dan "hari dalam sebulan".
sumber
Perl 6 ,
5248 byteCobalah online!
Blok kode anonim yang mengambil input sebagai tahun, bulan, hari dalam seminggu (Minggu adalah 0) dan nomor minggu (0 diindeks). Output adalah objek tanggal.
Penjelasan Lama:
sumber
$^c+4-$!.daycount
.MATL ,
2827 byteIni menggunakan tiga input:
'March 2019'
Sat
'2
.Output adalah string dengan hari, tahun, dan bulan yang dipisahkan dengan tanda hubung:
09-Mar-2019
.Cobalah online!
Penjelasan
Pertimbangkan input
'March 2019'
,'Sat'
,2
.sumber
Python 3 ,
9282 byte82 byte berkat @ Jo King
Cobalah online!
Versi asli, 92 byte
Cobalah online!
Mengambil tahun sebagai bilangan bulat, bulan sebagai bilangan bulat 1-indeks, hari dalam seminggu sebagai bilangan bulat 0-indeks di mana Senin adalah
0
dan hari Minggu adalah6
, dan minggu dalam bulan sebagai bilangan bulat berindeks 1.Bagaimana itu bekerja:
sumber
R ,
7269 byteCobalah online!
Mengambil input sebagai:
sumber
PHP ,
46,43, 31 byteCobalah online!
Program menerima sebagai input string seperti
"second saturday of March 2019"
Program mencetak nomor hari.
-12 byte berkat Shaggy.
sumber
of
input.Groovy , 46 byte
Cobalah online!
Masukan sebagai tahun sejak 1900, bulan yang diindeks 0, hari yang diindeks 0 (hari Minggu menjadi 0) dan nomor minggu
sumber
Scala , 86 byte
Cobalah online!
sumber
Merah ,
6460 byteCobalah online!
Mengambil tahun, bulan dan hari kerja sebagai angka, 1-diindeks, Senin adalah hari pertama dalam seminggu.
sumber
to-date
adalah suatu hal. mungkin ini akan berguna dalam tantangan format malam Natalnow
untuk tantangan itu" Eve"
date2-date1 kali> iirc)>> 25-Dec-2019 - 1-1-2019 == 358
APL (Dyalog Unicode) , 36 byte SBCS
Program lengkap. Anjuran untuk
[year,month]
(Januari adalah 1), lalu untuk hari (Minggu adalah 0), lalu untuk n (pertama adalah 1).Cobalah online!
⎕CY'dfns'
c o p y di dfns perpustakaan⊣
Buang hasil yang mendukung ...⎕
konsol cepat untuk[year,month]
angkadays
[c] hari [n] sejak 1899/12/31 dari 0 th bulan itu(⍳31)+
tambahkan i ntegers 1… 31 ke dalamnyad←
toko did
(untuk d nomor ay)7|
pembagian divisi ketika dibagi oleh 7 (hari-minggu dengan hari Minggu menjadi 0 karena zaman yang baik)⎕=
konsol cepat untuk nomor hari-minggu dan mendapatkan topeng di mana sama dengan angka hari-minggud/⍨
saringd
dengan topeng itu⎕⊃
konsol cepat untuk n dan menggunakannya untuk memilih dari daftar nomor haridate
[c] stempel waktu dat [n] (memiliki angka nol untuk jam, menit, detik, milidetik)Klik [c] untuk kode dan [n] untuk catatan.
sumber
JavaScript (ES6),
4948 byteMengambil parameter sebagai
f([year, month], day, number)
. Bulan dan hari dalam seminggu (mulai hari Minggu) tidak diindeks. Sunting: Disimpan 1 byte berkat @Shaggy.sumber
0
di JS.TSQL, 106 byte
Keluaran:
Cobalah
sumber
Kotlin ,
13184 byte47 byte berkat kode dan komentar ASCII saja.
Input: tahun, monthNumber, weekdayNumber, weekNumber
Semua bilangan bulat 1 hingga maksimum pada satu baris. Nomor hari minggu adalah hari Minggu dari 1 hingga Sabtu dari 7. Program utama membuat tahun kehilangan 1900 untuk kelas Tanggal dan bulan dan hari kerja digeser untuk memulai dengan nol alih-alih sebelum memanggil lambda. Anda dapat memasukkan argumen Anda di kotak teks input untuk mencoba tanggal Anda sendiri.
Output: contoh kelas Date. Program utama menampilkan hasilnya seperti: Sab 09 Mar 00:00:00 UTC 2019.
Ada versi yang diperluas dengan komentar yang menjelaskan kode bagi mereka yang ingin mempelajari lebih lanjut.
Cobalah online!
sumber