Tulis fungsi yang mengambil tanggal dan mengembalikan hari minggu 29 Februari berikutnya setelah tanggal itu.
Input adalah string dalam format ISO Extended: YYYY-MM-DD (mis. 27 Mei 2010 akan menjadi "2010-05-27").
Outputnya adalah string yang merupakan nama hari dalam seminggu (mis. "Senin"). Kapitalisasi tidak masalah, tetapi berikan nama lengkap dalam bahasa Inggris.
Jika tanggal yang diberikan adalah 29 Februari, maka kembalilah hari minggu 29 Februari berikutnya .
Gunakan perhitungan untuk Kalender Gregorian Proleptik (jadi, ia menggunakan perhitungan tahun kabisat Gregorian untuk seluruh panjangnya). Jangan khawatir tentang Kalender Julian atau ketika peralihan dari Julian ke Gregorian terjadi. Anggap saja Gregorian untuk semuanya.
Fungsi harus bekerja setidaknya untuk kisaran "0001-01-01" - "2100-01-01".
Jangan ragu untuk menggunakan pustaka standar apa pun yang disediakan oleh bahasa pilihan Anda, tetapi jangan gunakan pustaka pihak ke-3 kecuali jika Anda ingin memasukkan kode itu sebagai bagian dari solusi Anda.
Kode terpendek (karakter paling sedikit) menang.
Contoh:
func("0001-01-01")
->"Sunday"
func("1899-12-03")
->"Monday"
func("1970-01-01")
->"Tuesday"
func("1999-07-06")
->"Tuesday"
func("2003-05-22")
->"Sunday"
func("2011-02-17")
->"Wednesday"
func("2100-01-01")
->"Friday"
(dan tidak, Anda tidak perlu menyebutkan fungsinya func
)
Petunjuk:
- Ingatlah bahwa tahun yang berakhir pada 00 yang tidak dapat dibagi oleh 400 bukan tahun kabisat.
- 1 Januari 0001 adalah hari Senin.
date
. Hapus saja GNUWin32 dari PATH dan itu akan berfungsi. Atau ubahdate
keGet-Date
(perilaku fallback semacam itu hanya berfungsi ketika tidak ada perintah yang ditemukan - untuk memeriksa, cukup gunakangcm date
). Bagaimanapun, saya tidak menganggap bahwa masalah khusus dengan skrip ini sebagai GNUWin32 bukan bagian dari instalasi Windows standar.get-date
dan mendapatkan pesan kesalahan.Method invocation failed because [System.Management.Automation.PSObject] doesn't contain a method named 'op_Addition'.
Apakah perlu PS2 atau .Net 4 atau sesuatu?Get-Date
tetapi aSystem.DateTime
.$d=Get-Date "0400-01-01"; $d++
memberikan pesan kesalahan tentang++
tidak didefinisikan pada DateTime. Yang sama mengganti++
dengan+=1
atau+="1"
atau+='1'
memberikan pesan kesalahan tentang PSObject. Dan hanya+"1"
berfungsi.Ruby 1.9, 85 karakter
Solusi mudah. Panggil fungsi dengan
f[args]
.0001-01-01
testcase.sumber
def*
hanya mendefinisikan fungsi yang disebut*
. Dengan begitu saya tidak perlu spasi di antaradef
dan nama fungsi.T-SQL
166185 KarakterSaya sudah mengacaukan fungsi tanggal T-SQL, jadi saya pikir mengapa tidak ...
Solusi asli salah ...
Inilah yang sebenarnya harus saya lakukan agar strategi itu berhasil:
sumber
C #, 176
sumber
string f(string d){...}
.ToString("dddd")
mencetak tanggal di lokasi saat ini, tidak dalam bahasa Inggris.string f(string d){var n=DateTime.Parse(d).AddDays(1);return DateTime.IsLeapYear(n.Year)&&n.DayOfYear==60?n.DayOfWeek+"":f(n+"");}
Bash, 96 byte
Terima kasih Peter ... Versi sangat golf, 96 byte:
Versi lama, 229 byte
SAMPEL I / O
sumber
i=0;d=;until [ `date -d"$1 $i days" +%m-%d` = "02-29" ];do((i++));done
Perl, tidak ada perpustakaan tanggal:
160 159155Manfaat sebenarnya dari pustaka tanggal ini adalah mendorong panjangnya nama-nama hari itu kepada orang lain.
Di sisi lain, saya pikir ini adalah satu-satunya solusi sejauh ini yang berfungsi terlepas dari lokal.
sumber
DATE dan beberapa lem BASHy (90)
Fungsi:
Pengujian:
sumber
D: 175 Karakter
Lebih Jelas:
Menulis di D sangat mudah, tetapi pasti tidak akan memenangkan kontes kode golf. Namun, di luar kode golf, saya lebih suka membuatnya mudah untuk menulis dan memahami tetapi lama daripada harus singkat tetapi sulit untuk menulis dan mengerti.
sumber
Java 8 - 252 karakter
Golf:
Tidak Disatukan:
sumber
Rebol - 78
Tidak Disatukan:
Contoh penggunaan (dalam konsol Rebol):
sumber
PHP, 104 byte
kerusakan
date(L)
:1
untuk tahun kabisat, yang0
laindate(l)
: representasi teks lengkap dari hari dalam seminggusumber
GNU coreutils, 71 byte
Pencarian linear 8 tahun ke depan (kasus terburuk, diberikan 2096-02-29). Sed menemukan dan menampilkan garis pertama yang cocok dengan 29 Februari.
Saya terkejut menemukan bahwa
t;d;:;q
itu lebih pendek daripada pengujian untuk melihat apakah digit tetap (/[01]/d;q
), meskipun perintah dua kali lebih banyak.Tes
Saya menambahkan tes tambahan untuk kasus sudut yang sulit:
sumber