Hari dalam seminggu dan bulan dalam setahun tampaknya mendapat banyak perhatian tetapi tampaknya tidak ada yang peduli dengan minggu dalam setahun. Saya percaya ini saatnya untuk mengubahnya, jadi tugas Anda adalah menulis program atau fungsi yang ketika diberi tanggal menghasilkan bilangan bulat antara 1 dan 53 yang sesuai dengan minggu berjalan tahun ini.
Untuk keperluan tantangan ini, kita akan mengatakan bahwa hari Minggu pertama tahun itu menandai awal tahun sehingga satu - satunya kasus ketika 1 Januari dianggap sebagai minggu 1 adalah ketika jatuh pada hari Minggu.
- Input dapat berupa format tanggal apa pun yang tidak secara eksplisit menyertakan nomor minggu (cukup cantumkan format dalam jawaban Anda) untuk tanggal antara
1JAN1900
dan31DEC2100
. - Output adalah bilangan bulat antara 1 dan 53
- Anda dapat menggunakan metode standar apa pun untuk menyediakan input / output.
Uji Kasus
17MAY2017 -> 20
3JAN2013 -> 53
1JAN2017 -> 1
17MAY1901 -> 19
31DEC2100 -> 52
7JUL2015 -> 27
- Ini adalah kode-golf sehingga semua aturan standar golf berlaku, dan kode terpendek (dalam byte) menang.
07/07/2015
)? Bisa7JUL2015
menjadi07JUL2015
?7/7/2015
,2015-07-07
juga valid.%U
: Seperti yang ditunjukkan oleh @J_Lard, Anda perlu berhati-hati mengenai apakah minggu 0 adalah minggu 52 atau 53 tahun sebelumnya. Ini minggu ke 53 pada tahun 2001, 2007, 2013, 2018, 2024, 2029 dan berulang dalam siklus 28 tahun. Tahun-tahun lain minggu ke 52.Jawaban:
Ohm ,
1233 byteEDIT : Memperbaiki kasing tepi untuk "% U".
Asumsikan input bisa berupa cap waktu. Penjelasan yang akan datang.
Cobalah online!
sumber
MATL , 50 byte
Terima kasih kepada @Neil dan @NickClifford karena menunjukkan kesalahan, sekarang diperbaiki
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
Ini menggunakan tiga fungsi konversi tanggal / waktu yang ada di MATL:
XO
: mengonversi tanggal dan waktu ke format string;YO
: mengonversi tanggal dan waktu ke nomor tanggal seri;ZO
: konversi tanggal dan waktu ke vektor komponen.Menentukan apakah minggu "0" harus menjadi 52 atau 53 itu mahal, karena MATL tidak dapat mendefinisikan fungsi yang dapat dipanggil untuk menggunakan kembali
8XO!s310=s
bagian itu. Menggunakan kembali dengan cara loop dengan cabang hanya menghemat satu byte , dan menyulitkan penjelasan, jadi mungkin tidak sepadan.Juga, sesuatu dapat diperoleh dengan memasukkan tanggal sebagai array [tahun, bulan, hari]; tetapi saya tidak akan menggunakan ketiga fungsi tanggal :-)
Pertimbangkan input
'17MAY2017'
sebagai contoh.sumber
%U
, tetapi saya hanya ingin memastikan.JavaScript (ES6),
8280 byteMengambil input sebagai
(year,month,day)
.sumber
JavaScript (Firefox 34+), 70 byte
Bekerja dengan menemukan hari pertama dalam minggu yang berisi tanggal yang diberikan, kemudian menemukan nomor minggu hari itu (yang tidak pernah nol).
sumber
with
. Selalu beri +1 untukwith
!Python 2,
7064 byteInput =>
(year,month,day)
-6 byte, terima kasih kepada @ovs
sumber
JavaScript (Hanya Firefox), 77 byte
Mengambil tanggal sebagai string: mis
Jan 1, 2017
sumber
PHP, 125 Bytes
Cobalah online!
PHP, 28 Bytes
Versi untuk Senin, bukan Minggu
Cobalah online!
sumber
C #,
138123121 byteTernyata ada built-in untuk itu, meskipun agak besar ...
sumber
Powershell, 260 + 8 = 268 byte
+8 byte karena
-DateTime
benderaTerima argumen sebagai
"day month year"
format.Bukan ahli Powershell, tidak bisa bermain golf
Kasus cobaan
sumber