Tahun matahari adalah 365 hari, 5 jam, 48 menit, 45 detik, dan 138 milidetik, menurut video ini . Dengan kalender Gregorian saat ini, aturan untuk tahun kabisat adalah sebagai berikut:
if year is divisible by 400, LEAP YEAR
else if year is divisible by 100, COMMON YEAR
else if year is divisible by 4, LEAP YEAR
else, COMMON YEAR
Sayangnya, metode ini dimatikan satu hari setiap 3216 tahun.
Salah satu metode yang mungkin untuk mereformasi kalender adalah aturan berikut:
if year is divisible by 128, COMMON YEAR
else if year is divisible by 4, LEAP YEAR
else, COMMON YEAR
Ini bermanfaat karena tidak mengharuskan kami mengubah kalender kami lagi selama 625.000 tahun, memberi atau menerima.
Katakanlah seluruh dunia memutuskan bahwa, mulai sekarang, kami menggunakan sistem ini setiap tahun keempat adalah tahun kabisat kecuali setiap tahun ke-128, mengubah kalender kami sebagai berikut:
YEAR GREGORIAN 128-YEAR
2044 LEAP LEAP
2048 LEAP COMMON
2052 LEAP LEAP
...
2096 LEAP LEAP
2100 COMMON LEAP
2104 LEAP LEAP
...
2296 LEAP LEAP
2300 COMMON LEAP
2304 LEAP COMMON
2308 LEAP LEAP
Bagaimana ini akan memengaruhi algoritma hari dalam seminggu?
Tantangan
- Diberi tanggal dari tahun 2000 hingga tahun 100000, temukan hari dalam seminggu di bawah kalender baru ini.
- Setiap format input dan output diizinkan selama Anda dengan jelas menentukan format mana yang Anda gunakan.
- Ini kode golf, jadi cobalah membuat solusi Anda semenyenangkan mungkin!
Uji kasus
"28 February 2048" -> "Friday"
"March 1, 2048" -> "Sat"
(2100, 2, 29) -> 0 # 0-indexed with Sunday as 0
"2100-02-29" -> 7 # 1-indexed with Sunday as 7
"28 Feb. 2176" -> "Wednesday"
"1-Mar-2176" -> "Th"
"28/02/100000" -> "F" # DD/MM/YYYYYY
"Feb. 29, 100000" -> 6 # 1-indexed with Sunday as 7
"03/01/100000" -> 1 # MM/DD/YYYYYY and 1-indexed with Sunday as 1
Saran dan umpan balik tentang tantangan ini disambut baik. Semoga berhasil dan bermain golf dengan baik!
Jawaban:
C (gcc) , 60 byte
Cobalah online!
Modifikasi sederhana dari metode Sakamoto . Mengambil input sebagai argumen integer dalam urutan
month, day, year
, dan menampilkan jumlah hari (0-diindeks pada hari Minggu).sumber
"-bed=pen+mad."
bagian itu?char
masih mewakili angka, jadi Anda bisamod 7
langsung melakukannya .Bahasa Wolfram (Mathematica) ,
575553 byteCobalah online!
Mengambil tiga input: tahun, bulan, dan hari, dalam urutan itu. Misalnya, jika Anda menyimpan fungsi di atas sebagai
fun
, makafun[2048,2,28]
memberi tahu Anda hari minggu 28 Februari 2048.Bagaimana itu bekerja
Rumus
m=#~Mod~128;6+Mod[(9#-m)/8-6Clip@m,28]
mengubah tahun menjadi tahun yang setara (tahun dengan hari yang persis sama dalam seminggu) antara 6 AD dan 33 AD. Untuk melakukan ini, kita kurangi offset dan kemudian ambil tahun mod 28; tetapi offset berubah setiap 128 tahun, dan selama bertahun-tahun dapat dibagi 128, kita harus melakukan penyesuaian lebih lanjut karena tahun yang setara tidak boleh menjadi tahun kabisat.Ngomong-ngomong, begitu selesai, kita mencari bulan dan hari di tahun yang setara itu menggunakan built-in
DayName
.sumber
Python 2 , 67 byte
Cobalah online!
int("..."[m])
dapat digantikan olehord("-bed=pen+mad."[m])
.sumber
JavaScript,
6559 byteMenggunakan metode Sakamoto. Memberi0=Sunday, 1=Monday, 2=Tuesday...
-2 byte berkat Misha Lavrov
-4 byte terima kasih kepada Arnauld
sumber
~~y
bisa diubah menjadiy
. Anda tidak akan mendapatkan tahun fraksional di input, kan? Tapi saya akui saya tidak fasih dalam JavaScript.+y+(y>>2)-(y>>7)
?Sebenarnya , 37 byte
Ini adalah pelabuhan modifikasi notjagan dari algoritma Sakamoto , tetapi dengan beberapa trik berbasis tumpukan seperti yang dijelaskan di bawah ini. Format input adalah
day, year, month
. Format keluaran adalah0-indexed with Sunday as 0
. Selamat datang saran bermain golf! Cobalah online!Penjelasan
sumber
Jelly ,
32313028 bytePort lain dari modifikasi notjagan ini dari algoritma Sakamoto tetapi dengan sejumlah basis-250 di tempat
032503514624
(tidak perlu ekstra0
karena Jelly adalah 1-diindeks). Format input adalahmonth, year, day
. Format keluaran adalah0-based with Sunday as 0
. Saran bermain golf sangat diterima karena cara tautannya sulit untuk diatur dan mungkin masih bisa golf. Cobalah online!Sunting: -1 byte dari menggunakan bit shift bukannya pembagian integer. -1 byte dari mengatur ulang format awal dan input. -2 byte terima kasih kepada Erik the Outgolfer dan caird coinheringaahing.
Penjelasan
sumber