05AB1E , 175 174 172 171 160 byte
¦WΘ1š-1šVтFY`2ô0Kθ4ÖUD2Qi\28X+ë<7%É31α}‹iY¬>0ëY1¾ǝDÅsD12‹i>1ë\1Dǝ¤>2}}ǝVY})DJIJk18+£35.£¬.•4ιõ÷‡o‹ƶ¸•2ôs`UÐ3‹12*+>13*5÷s3‹Xα©т%D4÷®т÷©4÷®·()DćsćsO7%._s€нT‰J«7ô»
Masukkan dalam format [day, month, year]
. Output dengan leading 0
s untuk hari satu digit, dan huruf kecil mo
melalui su
(+1 byte dapat ditambahkan jika titlecase wajib).
Cobalah secara online atau verifikasi semua kasus uji .
Sial .. Ini mungkin rekor baru saya untuk jawaban 05AB1E terpanjang, dan kemudian saya sertakan beberapa tantangan ascii-art yang sangat rumit yang saya lakukan ...>.> EDIT: Hmm ok, hampir ..; p
Catatan penting: 05AB1E tidak memiliki builtin untuk objek atau perhitungan Date. Satu-satunya bawaan tentang tanggal yang dimilikinya adalah tahun / bulan / hari / jam / menit / detik / hari ini hari ini.
Jadi karena itu, hampir semua kode yang Anda lihat adalah perhitungan manual untuk menghitung hari-hari sebelumnya dan berikutnya (termasuk transisi dari tahun ke tahun dan mengingat tahun kabisat), dan menghitung hari dalam seminggu dengan menggunakan kongruensi Zeller .
Sebagian besar kode disalin dari jawaban saya sebelumnya 05AB1E , yang juga akan relevan untuk penjelasan di bawah ini.
Penjelasan:
Kami mulai dengan pergi ke hari pertama bulan sebelumnya:
¦ # Remove the first item (the days) from the (implicit) input
W # Get the minimum (without popping the list itself)
# (since the year is guaranteed to be above 1599, this is the month)
Θ # Check if its exactly 1 (1 if 1, 0 if in the range [2,31])
1š # Prepend a 1 as list (so we now have either [1,1] or [1,0]
- # Subtract this from the month and year
1š # And prepend a 1 for the day
V # Pop and store this first day of the previous month in variable `Y`
Lalu saya menggunakan tanggal itu sebagai tanggal mulai, dan menghitung 100 hari berikutnya:
тF # Loop 100 times:
Y`2ô0Kθ4ÖUD2Qi\28X+ë<7%É31α}‹iY¬>0ëY1¾ǝDÅsD12‹i>1ë\1Dǝ¤>2}}ǝV
# Calculate the next day in line
# (see the linked challenge above for a detailed explanation of this)
Y # And leave it on the stack
}) # After the loop: wrap the entire stack into a list, which contains our 100 days
Kemudian, dengan tanggal input sebagai tengah, saya hanya meninggalkan tanggal 17 sebelum dan 17 setelah tanggal input tersebut dari daftar:
DJ # Duplicate the 100 dates, and join the day/month/year together to strings
IJ # Push the input, also joined together
k # Get the 0-based index of the input in this list
# (the joins are necessary, because indexing doesn't work for 2D lists)
18+ # Add 18 to this index (18 instead of 17, because the index is 0-based)
£ # Only leave the first index+18 items from the 100 dates
35.£ # Then only leave the last 35 items
Sekarang kami memiliki 35 hari. Langkah selanjutnya adalah menghitung hari dalam seminggu, dan membuat header dari tabel output:
¬ # Get the first date of the list (without popping the list itself)
.•4ιõ÷‡o‹ƶ¸• # Push compressed string "sasumotuwethfr"
2ô # Split it into chunks of size 2
s # Swap to get the first date again
`UÐ3‹12*+>13*5÷s3‹Xα©т%D4÷®т÷©4÷®·()DćsćsO7%
# Calculate the day of the week (sa=0; su=1; ...; fr=6)
# (see the linked challenge above for a detailed explanation of this)
._ # Rotate the list of strings that many times
Lihat ini 05AB1E ujung tambang (bagian Cara string kompres bukan bagian dari kamus? ) Untuk memahami mengapa .•4ιõ÷‡o‹ƶ¸•
adalah "sasumotuwethfr"
.
Lalu kami membuat hari untuk mengisi tabel itu sendiri berdasarkan daftar tanggal yang kami buat sebelumnya. Yang akan kita gabungkan bersama dengan tajuknya. Setelah itu kita dapat mencetak hasil akhir:
s # Swap to get the list of dates again
€н # Only leave the first item of each date (the days)
T‰ # Take the divmod 10 of each
J # Join those divmod results together
# (we now have leading 0s for single-digit days)
« # Merge this list together with the header list
7ô # Split it into chunks of size 7
» # Join each inner list by spaces, and then each string by newlines
# (and output the result implicitly)
JavaScript (ES6),
141126 byteDisimpan 15 byte dengan meminjam
.toUTCString().slice(0,2)
dari jawaban NeilMengambil input sebagai objek Date.
Cobalah online!
sumber
JavaScript (Node.js) ,
205152145 byteCobalah online! Mengambil input sebagai objek Tanggal atau waktu JavaScript. Sunting: Disimpan 1 byte berkat @EmbodimentofIgnorance, yang kemudian memungkinkan saya untuk menyimpan 7 byte lebih lanjut dengan menambahkan baris baru ke output. Menyimpan 52 byte ketika saya menemukan bahwa saya sedang mengerjakan perilaku yang sebenarnya tidak bermasalah pada awalnya ...
sumber
padStart(2)
->padStart(3)
, hapus spasi dalam string bergabung selama -1 bytePerl 6 , 87 byte
Cobalah online!
Mengambil
Date
objek, mengembalikan daftar garis.sumber
C # (Visual C # Interactive Compiler) ,
124120 byteCobalah online!
sumber
Bahasa Wolfram (Mathematica) , 123 byte
Cobalah online!
Saya tidak tahu mengapa
Grid
tidak bekerja pada TIO tetapi kode ini menghasilkan ini@ Davidvid menyimpan 1 byte
sumber
Grid
tidak berfungsi karena TIO tidak dapat memusatkan item seperti pada gambar Anda?MATL ,
343331 byteCobalah online!
Penjelasan
sumber
Java (JDK) , 149 byte
Cobalah online!
Kredit
sumber
i
danj
entah bagaimana? Atau sesuatu yang lebih pendekj++%7<1?10:32
dengan sihir bitwise? Tapi aku akan menyerahkan itu padamu. Saya akan kembali bekerja, lol. ;)w
berdiri untuk? Kenapa tidakh
untuk tajuk?w
untuk "day of w eek". Juga, sedikit memutar-mutar hanya dapat menyebabkan(i%7+6)/7*22+10
yang lebih lama.PHP ,
197189187 byteCobalah online!
Input adalah
STDIN
sebagai string tanggal. Jalankan denganphp -nF
.Verifikasi semua kasus uji
Atau 174 byte dengan digit tunggal empuk nol.
sumber
Excel VBA,
190159 byteTerima kasih @TaylorScott
Mengambil input dalam bentuk string tanggal yang valid untuk Excel VBA (mis. 19 Februari 2020; 2/19/2020; 19-Feb-2019), dan mengembalikan larik dengan kalender yang dipusatkan di atasnya.
sumber
Function z(i)
Dim d(5,6)
v=DateValue(i)-17
For x=1To 5
For y=0To 6
d(0,y)=Left(WeekdayName(Weekday(v+y)),2)
d(x,y)=Day(v+y+(x-1)*7)
Next y,x
z=d()
End Function
Merah ,
153131 byteCobalah online!
sumber
T-SQL, 203 byte
Versi online sedikit berbeda, versi yang diposting ini berfungsi di MS-SQL Studio Management. Ini menghemat 1 byte dibandingkan dengan versi online, tetapi tidak memberikan hasil online yang benar
Cobalah online
sumber
Python 2 , 115 byte
Cobalah online!
Tidak yakin apakah ini diizinkan ... menerima input dari STDIN dalam formulir
date(year, month, day)
. Ini juga dapat direpresentasikan sebagai__import__('datetime').date(year, month, day)
. Ini benar-benar__import__('datetime').date
benda.sumber