bramaudi

Menghitung Kabisat Tidaknya Sebuah Tahun

Publish:   ·   Last Updated:

Tahun kabisat adalah dimana dalam tahun tersebut terdapat penambahan tanggal sejumlah 1 hari guna menyesuaikan penanggalan dengan tahun astronomi.

Dalam 1 tahun tidaklah terdiri dari 365 hari saja namun lebih tepatnya 365 hari 5 jam 48 menit 45,1814 detik.

TL;DR

Tahun kabisat memiliki tanggal 29 februari.

Algoritma

Nah untuk mengetahui apakah dari suatu tahun itu merupakan tahun kabisat atau tidak terdapat 2 algoritma:

Pertama, menggunakan modulo:

if year modulo 4 is 0
then
if year modulo 100 is 0
then
if year modulo 400 is 0
then
is_leap_year
else
not_leap_year
else is_leap_year
else not_leap_year

atau kedua menggunakan pembagian:

if year is divisible by 400 then is_leap_year
else if year is divisible by 100 then not_leap_year
else if year is divisible by 4 then is_leap_year
else not_leap_year

Oke disini saya akan coba implemen kedua algoritma diatas, latihan ini seperti biasa dengan menggunakan bahasa Javascript, pertama saya coba menggunakan cara pembagian:

function isKabisat(tahun) {
  // fungsi untuk mengetahui tahun bisa dibagi atau tidaknya
  function divisible(n) { return n % 1 === 0 }
  
  if (divisible(tahun / 400)) return 'Kabisat'
  else if (divisible(tahun / 100)) return 'Bukan'
  else if (divisible(tahun / 4)) return 'Kabisat'
  else return 'Bukan'
}

Sepertinya terlihat mudah dan jelas, kita juga masih bisa menyederhanakan menggunakan operasional kondisi (ternary) namun efek sampingnya akan membuat coding menjadi agak aneh dan mungkin sulit dibaca.

function isKabisat(tahun) {
  // ubah nama fungsi agar lebih pendek
  function div(n) { return n % 1 === 0 }
  
  return div(tahun / 400)
    ? 'Kabisat'
    : div(tahun / 100)
      ? 'Bukan'
      : div(tahun / 4)
        ? 'Kabisan'
        : 'Bukan'
}

Nah sekarang bagaimana jika kita menggunakan operator modulo?

function isKabisat(tahun) {
  if (tahun % 4 == 0)
    if (tahun % 100 == 0)
      if (tahun % 400 == 0) return 'Kabisat'
      else return 'Bukan'
    else return 'Kabisat'
  else return 'Bukan'
}

Hmm… lumayan, sengaja tidak saya kasih tanda kurung kurawal namun masih bisa dibaca alias readable, namun bagaimana jika saya coba sederhana-kan lagi ya?

function isKabisat(tahun) {
  return tahun % 4 == 0 || tahun % 100 == 0 && tahun % 400 != 0
    ? 'Kabisat'
    : 'Bukan'
}

Nah gitu kan terlihat lebih enak, lebih sederhana namun masih terbaca.

Untuk cara uji coba nya seperti ini:

console.log(isKabisat(2000)) // Kabisat
console.log(isKabisat(1999)) // Bukan

Silahkan berikan komentar nya apabila terdapat sesuatu yang mengganjal terutama pada gaya coding saya wkwk / jika teman-teman berkenan untuk berbagi kode yang lebih sederhana lagi.

Oke sekian saja dan semoga bermanfaat.

Refrensi: Wikipedia


Mohon maap ya untuk komentar ga jelas atau annoying terpaksa akan om hapus xixi :*
comments powered by Disqus