Siapa yang tidak suka bersantai di hari Minggu pagi di musim panas dengan bir dingin dan TV atau di musim dingin bermain bulu tangkis atau pamungkas bersama teman?
Saya selalu berpikir mengetahui berapa hari Anda harus bersantai dalam sebulan membuat Anda mendapat informasi lengkap dan membantu Anda merencanakan apa yang ingin Anda lakukan. Baik itu duduk di depan komputer Anda dan memecahkan masalah kode-golf atau pergi bermain sepak bola.
Jadi, bantu saya menulis program atau fungsi yang mengambil input 2 bilangan bulat positif, Y
dan M
dan menampilkan jumlah hari Minggu di tahun tertentu ( Y
) dan bulan ( M
) (menurut Kalender Gregorian), diikuti dengan tanggal setiap hari Minggu.
Juga, perlu diingat bahwa kode terpendek menang.
Kendala Input
1000 <= Y <= 9999
1 <= M <= 12
Keluaran
Kasing uji ini akan memiliki keluaran yang memiliki tanggal setiap hari Minggu pada bulan tersebut di tahun itu dalam format DD-MM-YYYY
.
Contoh Uji Kasus
Test Case 1
Input Sampel
2017 1
Output Sampel
5
01-01-2017
08-01-2017
15-01-2017
22-01-2017
29-01-2017
Test Case 2
Input Sampel
2018 2
Output Sampel
4
04-02-2018
11-02-2018
18-02-2018
25-02-2018
Test Case 3
Input Sampel
2016 11
Output Sampel
4
06-11-2016
13-11-2016
20-11-2016
27-11-2016
Date()
objek, dan format output apa pun, termasuk[4, [<dateobj>, <dateobj>, <dateobj>, <dateobj>]]
(di mana<dateobj>
objek tanggal aktual, dan[]
merupakan array aktual)./
bukan-
? Atau mungkinkah bulan, lalu hari, lalu tahun?Jawaban:
MATL ,
46454235 byteInput adalah larik formulir
[2017 1]
. Format keluaran adalah29/01/2017
.Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
sumber
Python 2 ,
150.148,145 byteCobalah online!
-3 byte membuat barang lebih pythonic (menggunakan zip dan filter!)
sumber
JavaScript (ES6), 107 byte
Sunting: Menambahkan biaya penghitungan eksplisit 15 byte. Memformat output akan menelan biaya setidaknya 33 byte tergantung pada seberapa ketat format outputnya.
sumber
outputs the number of Sundays in that particular year and month
; Sepertinya saat ini tidak menampilkan jumlah hari Minggu.<input type='date'>
.PowerShell , 91 byte
Cobalah online!
(Catatan khusus - ini tergantung pengaturan lokal dan budaya. Karena TIO berjalan sebagaimana
en-us
mestinya , ia bekerja dengan benar apa adanya. Kode ini mungkin perlu diubah untuk lokal yang berbeda.)Mengambil input sebagai dua bilangan bulat
$y
dan$m
. Loops dari1
ke31
, mendapatkandatetime
objek baru untuk setiap tanggal yang memungkinkan (viaGet-Date
cmdlet). Akan melemparkan kesalahan ke STDERR (diabaikan secara default pada tantangan kode-golf) selama berbulan-bulan dengan kurang dari 31 hari, tetapi itu tidak mempengaruhi output. Kami mengambil masing-masingdatetime
objek dan menggunakanWhere-Object
(|?{...}
) pada mereka, dengan klausa!$_.dayofweek
. Properti.dayofweek
adalah nomor dari0
ke6
, dengan0
mudah sesuai denganSunday
, jadi!
itu benar, yang menyimpan beberapa byte dibandingkan dengan cek kesetaraan seperti-eq0
.Hari-hari Minggu dikumpulkan dalam parens dan disimpan
$a
. Kami kemudian mengambilnya.count
, dan itu ditempatkan di saluran pipa. Selanjutnya, kita mengulang$a
dan menggunakan-f
operator ormat untuk membangun format output yang benar. Perhatikan bahwa ini tidak menghasilkan nol terkemuka selama berhari-hari atau berbulan-bulan. String tanggal tersebut juga ditinggalkan di dalam pipa, dan sebuah implisitWrite-Output
pada penyelesaian program mencetaknya dengan pemisah baris baru.NB - jika format output lebih fleksibel, kita bisa membiarkannya
$a
dan tidak perlu mengulanginya. Itu akan mengencangkandatetime
objek sebagai format tanggal panjang termasuk informasi waktu, tetapi membuat kita turun ke 69 byte , yang (saat ini) hanya akan dikalahkan oleh Mathematica dan MATL.sumber
Oktaf, 72 byte
nweekdate
mengembalikan nomor tanggal yang sesuai denganN
kejadian -hari tertentu pada hari kerja pada bulan / tahun yang ditentukan. Kami menggunakan array1:6
di tempatN
untuk mendapatkan semua kemunculan dalam sebulan. Jika ada kurang dariN
kejadian hari kerja dalam sebulan, maka jumlah tanggal yang dihasilkan adalah0
. Karena alasan ini, kami hanya memilih tanggal yang valid menggunakan(x>1)
dan kemudian mengonversinya menjadi string menggunakandatestr
.Kemudian untuk menghitung jumlah hari Minggu, kami menghitung jumlah non-nol (
nnz
angka tanggal yang ) dalam hasilnya.Kami kemudian membungkus semuanya
cellfun
untuk menampilkan setiap nilai.sumber
Ruby,
140132129118 bytesumber
Excel - 103 karakter
Masukkan tahun dalam sel
A1
, dan bulan dalam selA2
.Hitungannya ada di sel
D1
, dan hari Minggu di selD2:D6
.Asumsi
D2:D6
diformat DD-MM-YYYY.sumber
Mathematica,
8268 byteFungsi anonim. Menghasilkan daftar jumlah hari, diikuti oleh daftar hari Minggu sebagai
DateObject
s. Ternyata, di Mathematica, hari ke-0 dalam sebulan ditafsirkan sebagai hari terakhir bulan sebelumnya.sumber
C #, 183 byte
Metode anonim yang mengembalikan array string, berisi pertama jumlah hari Minggu dan kemudian setiap hari Minggu dalam format yang ditentukan. Jika hanya ada 4 Minggu dalam sebulan, string terakhir adalah nol.
Program lengkap dengan metode ungolfed dan uji kasus:
sumber
REXX, 168 byte
sumber
1217
?Bash + bsdmainutils, 94 byte
Menggunakan perintah
cal
yang mencetak kalender, diinstal secara default di beberapa UNIX / LINUX / BSD (sayangnya tidak di TIO).Untuk mencobanya menyimpan ke
file
,chmod +x file
, dan menjalankan./file 2017 9
Menyimpan untuk menyusun dua byte pertama dari output kal ditambahkan dengan string "MM-YYYY" dilewatkan sebagai parameter kedua dan pertama (perlu diubah jika lokal Anda tidak dimulai minggu pada minggu).
Gema panjang array berikutnya dikurangi dengan satu (elemen pertama adalah kata yang mewakili minggu) dan array tanpa elemet pertama, satu per baris
fmt -1
sumber
SAS, 182 byte
sumber
T-SQL,
316311 byteSaya tidak tahu apakah itu jawaban yang valid, karena ini menghasilkan jumlah minggu setelah tanggal
Coba di sini
ungolfed:
sumber
PHP,
127 118 112107 bytemengambil input dari argumen baris perintah; jalankan dengan
-r
atau coba online .kerusakan
sumber
Excel VBA, 190 byte
sumber