Sebuah tahun yang umum adalah tahun yang tidak tahun kabisat dan di mana hari pertama dan terakhir tahun ini adalah pada hari yang sama. Sebuah tahun khusus umum adalah salah satu yang dimulai pada hari Senin dan berakhir pada hari Senin juga.
Tantangan Anda adalah membuat program / fungsi yang ketika diberi tahun sebagai input menemukan tahun umum khusus terdekat, menghasilkan sendiri jika itu adalah tahun yang umum. Jika tahun sedekat mungkin dengan tahun sebelumnya seperti tahun berikutnya menghasilkan yang lebih besar.
Memasukkan
Integer yang mewakili tahun untuk diuji dalam kisaran 1600 <= x <= 2100
.
Keluaran
Integer yang mewakili tahun umum khusus terdekat.
Uji kasus
2017 -> 2018
2018 -> 2018
1992 -> 1990
1600 -> 1601
2100 -> 2103
1728 -> 1731 (lies between 1725 and 1731)
Catatan
Semua 54 tahun dalam kisaran yang diberikan sudah ditampilkan di artikel Wikipedia yang ditautkan. Saya juga akan memberikannya di sini untuk referensi:
1601, 1607, 1618, 1629, 1635, 1646, 1657, 1663, 1674, 1685, 1691
1703, 1714, 1725, 1731, 1742, 1753, 1759, 1770, 1781, 1787, 1798
1810, 1821, 1827, 1838, 1849, 1855, 1866, 1877, 1883, 1894, 1900
1906, 1917, 1923, 1934, 1945, 1951, 1962, 1973, 1979, 1990
2001, 2007, 2018, 2029, 2035, 2046, 2057, 2063, 2074, 2085, 2091
2103 (Needed for 2097 to 2100)
6, 11, 11
. IE 6 tahun setelah yang pertama adalah yang lain, 11 tahun setelah yang lain, 11 tahun setelah yang lain, 6 tahun setelah yang lain, dll.a year that is not a leap year and where the first and last day of the year are on the same day
Bagian kedua dari definisi itu berlebihan. Semua tahun non-kabisat dimulai dan berakhir pada hari yang sama, tepatnya 52 minggu dan satu hari (365 hari).Jawaban:
Jelly , 30 byte
Tautan monadik yang mengambil dan mengembalikan tahun bilangan bulat.
Cobalah online! atau lihat test suite .
Bagaimana?
Sama seperti jawaban lain, ini membangun daftar tahun yang diperlukan untuk domain input dari kenaikan, dan menemukan tahun maksimal perbedaan absolut minimal dari input.
sumber
PHP, 67 Bytes
Cobalah online!
atau
Cobalah online!
Diperluas
tanggal
sumber
$i=($i<1)-$i;
Python 2 ,
129124118 byteCobalah online! atau Coba semua uji kasus
Pertama, urutan dihasilkan (dibalik) aktif
a
, kemudian2401 - input_year
digunakan sebagai nilai awal untuk dikurangi atas urutan.Dengan cara ini daftar
o
akan berisi perbedaan antara semua tahun umum dan input, tahun terdekat akan menjadi angka yang terdekat dengan nol (positif atau negatif), kemudian akan diekstraksi dengan(min, key=abs)
dan ditambahkan kembali ke input.Dengan
datetime
, 119 byteCobalah online!
sumber
05AB1E , 41 byte
Cobalah online!
Penjelasan
sumber
JavaScript (ES6), 77 byte
sumber
Mathematica, 70 byte
Buat daftar semua tahun umum umum hingga tahun 5040 (= 7!) Dan kemudian temukan yang terdekat dengan input, ambil nilai maksimum jika terjadi seri.
sumber
Java 7, 217 byte
Penjelasan:
Coba di sini.
sumber
int d(int y, int x){}
ked(int y){int x = 1;...}
x
, jadi jika saya mengatur ulang1
setiap kali di bagian atas metode,x
salah dan panggilan rekursif akan gagal.MATL ,
3231 byteCobalah online! Atau verifikasi semua kasus uji
sumber
C #, 183 byte
Untuk menggulirkan bola sedikit, inilah implementasi yang saya lakukan sendiri. Saya cukup yakin itu masih bisa diturunkan jadi jika ada yang ingin bebas memposting sebagai jawaban baru.
Cobalah online!
Versi Lengkap / Terformat, ini juga menampilkan semua output untuk rentang yang diberikan saat dijalankan.
sumber
Ruby, 145 byte
Menentukan lambda yang mengambil tahun awal sebagai input -
f[2017] => 2018
Harus menyukai perpustakaan standar Ruby!
wday==1
panjangnya samamonday?
dan jauh lebih tidak keren :). Pemeriksaan tahun umum khusus dilakukan oleh fakta bahwa pada tahun yang sama mulai Senin, 1 Juni adalah Jumat ("Jumat" adalah nama hari yang sama-pendeknya!)Sayangnya, pencarian di kedua arah tidak begitu baik.
sumber