diff --git a/README.md b/README.md index 3976a9e..205f083 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,106 @@ # Readme.md -Tanggal Yang Tak Pasti \ No newline at end of file +Tanggal Yang Tak Pasti +Berikut adalah penjelasan lengkap dan detail tentang strategi dan implementasi dari fungsi evaluasi_tanggal : +Tujuan Fungsi +Fungsi evaluasi_tanggal() bertujuan untuk mengevaluasi setiap tanggal dalam daftar untuk menentukan apakah format tanggal tersebut ambigu atau tidak ambigu. Tanggal dianggap tidak ambigu ("YA") jika: +1. Tanggal tersebut mengandung nama bulan (misalnya, 23-mar-2000). +2. Format tanggalnya jelas dan tidak menimbulkan kebingungan dalam pengidentifikasian hari dan bulan (misalnya, 2011-08-22). +Sebaliknya, tanggal dianggap ambigu ("TIDAK") jika: +1. Tidak ada nama bulan dalam format teks. +2. Bagian hari dan bulan bisa saling tertukar atau tidak jelas (misalnya 04/05/2010, di mana 4 dan 5 bisa berarti bulan atau hari tergantung urutannya). + +Strategi Umum +Fungsi ini memiliki beberapa langkah kunci untuk melakukan evaluasi tanggal: +1. Deteksi nama bulan: +o Jika tanggal mengandung nama bulan (misalnya mar untuk Maret), maka tanggal tersebut langsung dianggap tidak ambigu ("YA"). +2. Validasi format tanggal: +o Tanggal yang tidak mengandung nama bulan akan diperiksa apakah sesuai dengan format yang dapat diparsing (dengan pemisah - atau /). +o Format yang benar adalah tiga bagian (hari, bulan, tahun) setelah dipecah. +3. Validasi tahun: +o Tahun diidentifikasi sebagai angka lebih besar dari 999. Jika tidak ditemukan angka yang lebih besar dari 999, tanggal tersebut dianggap tidak valid ("TIDAK"). +4. Pengecekan ambiguitas: +o Jika bagian hari dan bulan keduanya bernilai ≤ 12, maka tanggal dianggap ambigu ("TIDAK"), karena kita tidak bisa memastikan mana yang hari dan mana yang bulan. +o Jika salah satu angka lebih besar dari 12, maka tanggal tersebut dianggap tidak ambigu ("YA"), karena kita bisa memastikan angka lebih besar adalah hari (misalnya, 13/02/1998). + +Penjelasan Langkah demi Langkah dalam Kode +1. Mengimpor dan Memulai Fungsi +def evaluasi_tanggal(tanggal_list): + hasil = [] + nama_bulan = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', + 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'] +• nama_bulan adalah daftar singkatan nama bulan dalam bahasa Inggris. +• hasil akan menyimpan pasangan (tanggal, status) yang menunjukkan apakah tanggal tersebut ambigu atau tidak. +2. Mengevaluasi Setiap Tanggal +for tanggal in tanggal_list: + tgl_lower = tanggal.lower() + # Jika mengandung nama bulan + if any(bln in tgl_lower for bln in nama_bulan): + hasil.append((tanggal, "YA")) + continue +• Pengecekan nama bulan: Jika tanggal mengandung nama bulan (misalnya mar untuk Maret), maka langsung dianggap tidak ambigu ("YA"). +3. Memproses Format Tanggal +parts = tanggal.replace("/", "-").split("-") + +try: + parts_int = [int(p) for p in parts] +except ValueError: + hasil.append((tanggal, "TIDAK")) + continue +• Normalisasi pemisah: Tanggal diubah agar hanya menggunakan tanda - sebagai pemisah. +• Konversi menjadi integer: Setiap bagian (hari, bulan, tahun) diubah menjadi angka. Jika ada bagian yang tidak bisa diubah menjadi angka, tanggal dianggap tidak valid ("TIDAK"). +4. Validasi Jumlah Bagian +if len(parts_int) != 3: + hasil.append((tanggal, "TIDAK")) + continue +• Tanggal harus terdiri dari tiga bagian (hari, bulan, tahun). Jika tidak, maka tanggal dianggap tidak valid. +5. Identifikasi Tahun +tahun = next((x for x in parts_int if x > 999), None) +if not tahun: + hasil.append((tanggal, "TIDAK")) + continue +• Identifikasi tahun: Tahun dipilih sebagai angka yang lebih besar dari 999 (karena tahun pasti lebih besar dari angka bulan atau hari). Jika tidak ditemukan, tanggal dianggap tidak valid. +6. Memisahkan Hari dan Bulan +lainnya = [x for x in parts_int if x != tahun] + +# DEBUG PRINT +print(f"Evaluasi: {tanggal} -> lainnya: {lainnya}") +• lainnya: Menyimpan dua bagian lainnya (hari dan bulan) selain tahun. +7. Evaluasi Ambiguitas +if all(x <= 12 for x in lainnya): + hasil.append((tanggal, "TIDAK")) +else: + hasil.append((tanggal, "YA")) +• Pengecekan ambiguitas: Jika kedua angka selain tahun adalah ≤ 12, maka tanggal dianggap ambigu ("TIDAK"), karena kita tidak bisa memastikan mana yang hari dan mana yang bulan. Jika salah satu lebih besar dari 12, maka dianggap tidak ambigu ("YA"). +8. Hasil Evaluasi +return hasil +• Mengembalikan daftar hasil evaluasi, yang berisi pasangan (tanggal, status). + +Contoh Data Uji dan Hasil Evaluasi +Data Uji: +tanggal_data = [ + "15/02/1998", # YA + "04/05/2010", # TIDAK + "1-3-2004", # TIDAK + "2011-08-22", # YA + "23-mar-2000", # YA + "04/07/2010", # TIDAK + "1965-3-4" # TIDAK +] +Hasil Evaluasi: +15/02/1998: YA +04/05/2010: TIDAK +1-3-2004: TIDAK +2011-08-22: YA +23-mar-2000: YA +04/07/2010: TIDAK +1965-3-4: TIDAK + +Kesimpulan +Fungsi evaluasi_tanggal berhasil mendeteksi tanggal yang ambigu dan tidak ambigu berdasarkan: +1. Ada tidaknya nama bulan dalam teks. +2. Jika angka-angka dalam tanggal memungkinkan kebingungan antara hari dan bulan. + + + +