From aaeedbf0c2ccb05a3880035bfc76860fc1b78db7 Mon Sep 17 00:00:00 2001 From: Arlan Tengga Date: Mon, 20 Oct 2025 21:34:02 +0700 Subject: [PATCH 1/6] feat: menambahkan algoritma kaprekar number --- other/kaprekar_number.py | 60 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 other/kaprekar_number.py diff --git a/other/kaprekar_number.py b/other/kaprekar_number.py new file mode 100644 index 00000000..fcce5729 --- /dev/null +++ b/other/kaprekar_number.py @@ -0,0 +1,60 @@ +# mengecek apakah bilangan apakah bilangan itu masuk kaprekar +# https://en.wikipedia.org/wiki/Kaprekar_number +import numpy as np + + +def kaprekar_number(number): + """ + Angka kaprekar adalah angka yang yang di kuadratkan, + dan di pisahmenjadi dua bagian dan di jumlahkan lagi + maka akat menjadi angka itu kembali. + + >>> kaprekar_number(45) + 'Angka Kaprekar' + >>> kaprekar_number(9) + 'Angka Kaprekar' + >>> kaprekar_number(5) + 'Bukan Angka Kaprekar' + >>> kaprekar_number(4) + 'Bukan Angka Kaprekar' + + """ + benar , bukan = "Angka Kaprekar" , "Bukan Angka Kaprekar" + if number == 1: + return benar + + square_number = number * number + + cout_d = 0 + while not square_number == 0: + cout_d += 1 + square_number = square_number // 10 + + square_number = number * number + + r_digits = 0 + while r_digits < cout_d: + r_digits += 1 + eq_parts = np.pow(10 , r_digits) + + sum = square_number // eq_parts + square_number % eq_parts + if sum == number: + return benar + + return bukan + + +def main(args=None): + import doctest + + doctest.testmod() + + # sampel case + print(kaprekar_number(45)) # Angka Kaprekar + print(kaprekar_number(9)) # Angka Kaprekar + print(kaprekar_number(5)) # Bukan Angka Kaprekar + print(kaprekar_number(10)) # Bukan Angka Kaprekar + + +if __name__ == "__main__": + main() From 67d29dd5743d805e30eb90b669fa32c2ecd76457 Mon Sep 17 00:00:00 2001 From: Arlan Tengga Date: Wed, 22 Oct 2025 08:34:17 +0700 Subject: [PATCH 2/6] fix: menghapus numpy --- other/kaprekar_number.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/other/kaprekar_number.py b/other/kaprekar_number.py index fcce5729..8a1b51ef 100644 --- a/other/kaprekar_number.py +++ b/other/kaprekar_number.py @@ -1,6 +1,6 @@ # mengecek apakah bilangan apakah bilangan itu masuk kaprekar # https://en.wikipedia.org/wiki/Kaprekar_number -import numpy as np +import math def kaprekar_number(number): @@ -35,7 +35,7 @@ def kaprekar_number(number): r_digits = 0 while r_digits < cout_d: r_digits += 1 - eq_parts = np.pow(10 , r_digits) + eq_parts = math.pow(10 , r_digits) sum = square_number // eq_parts + square_number % eq_parts if sum == number: From da06d170b3cc41b3bc5a11c8739011819bb5ea24 Mon Sep 17 00:00:00 2001 From: Arlan Tengga Date: Wed, 22 Oct 2025 08:43:16 +0700 Subject: [PATCH 3/6] fix: memperbaiki sedikit bug --- other/kaprekar_number.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/other/kaprekar_number.py b/other/kaprekar_number.py index 8a1b51ef..45520cfc 100644 --- a/other/kaprekar_number.py +++ b/other/kaprekar_number.py @@ -3,7 +3,7 @@ import math -def kaprekar_number(number): +def kaprekar_number(number: int) -> str: """ Angka kaprekar adalah angka yang yang di kuadratkan, dan di pisahmenjadi dua bagian dan di jumlahkan lagi @@ -15,7 +15,7 @@ def kaprekar_number(number): 'Angka Kaprekar' >>> kaprekar_number(5) 'Bukan Angka Kaprekar' - >>> kaprekar_number(4) + >>> kaprekar_number(10) 'Bukan Angka Kaprekar' """ @@ -37,6 +37,9 @@ def kaprekar_number(number): r_digits += 1 eq_parts = math.pow(10 , r_digits) + if eq_parts == number: + continue + sum = square_number // eq_parts + square_number % eq_parts if sum == number: return benar From 85029cf0e6e4384cc553a4a114de210326bdf1d1 Mon Sep 17 00:00:00 2001 From: Arlan Tengga Date: Wed, 22 Oct 2025 08:48:41 +0700 Subject: [PATCH 4/6] fix: memperbaiki redifition --- other/kaprekar_number.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/other/kaprekar_number.py b/other/kaprekar_number.py index 45520cfc..a8f0c8fe 100644 --- a/other/kaprekar_number.py +++ b/other/kaprekar_number.py @@ -40,8 +40,8 @@ def kaprekar_number(number: int) -> str: if eq_parts == number: continue - sum = square_number // eq_parts + square_number % eq_parts - if sum == number: + jumlah = square_number // eq_parts + square_number % eq_parts + if jumlah == number: return benar return bukan From 01ab03f3a742b1b2054ae0cc2cb7223369ac9c45 Mon Sep 17 00:00:00 2001 From: Arlan Tengga Date: Thu, 5 Feb 2026 10:39:16 +0700 Subject: [PATCH 5/6] fix: memperbaiki code --- other/kaprekar_number.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/other/kaprekar_number.py b/other/kaprekar_number.py index a8f0c8fe..c6d9c4f6 100644 --- a/other/kaprekar_number.py +++ b/other/kaprekar_number.py @@ -19,7 +19,7 @@ def kaprekar_number(number: int) -> str: 'Bukan Angka Kaprekar' """ - benar , bukan = "Angka Kaprekar" , "Bukan Angka Kaprekar" + benar, bukan = "Angka Kaprekar", "Bukan Angka Kaprekar" if number == 1: return benar @@ -35,7 +35,7 @@ def kaprekar_number(number: int) -> str: r_digits = 0 while r_digits < cout_d: r_digits += 1 - eq_parts = math.pow(10 , r_digits) + eq_parts = math.pow(10, r_digits) if eq_parts == number: continue @@ -52,12 +52,10 @@ def main(args=None): doctest.testmod() + +if __name__ == "__main__": # sampel case print(kaprekar_number(45)) # Angka Kaprekar print(kaprekar_number(9)) # Angka Kaprekar print(kaprekar_number(5)) # Bukan Angka Kaprekar print(kaprekar_number(10)) # Bukan Angka Kaprekar - - -if __name__ == "__main__": - main() From 636de3f1a56b970de3b1415c51ec3457c4914509 Mon Sep 17 00:00:00 2001 From: Arlan Tengga Date: Thu, 5 Feb 2026 10:46:37 +0700 Subject: [PATCH 6/6] fix: memperbaiki test dan memperbaiki test --- algorithm/sorting/bucket_sort.py | 1 + algorithm/sorting/circle_sort.py | 1 + scripts/build_directory_md.py | 6 +++--- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/algorithm/sorting/bucket_sort.py b/algorithm/sorting/bucket_sort.py index 56a2a37f..9572d5b4 100644 --- a/algorithm/sorting/bucket_sort.py +++ b/algorithm/sorting/bucket_sort.py @@ -7,6 +7,7 @@ # Urutkan masing-masing bucket. # Gabungkan semua bucket menjadi satu list terurut. + def bucket_sort(collection: list[float]) -> list[float]: """ contoh diff --git a/algorithm/sorting/circle_sort.py b/algorithm/sorting/circle_sort.py index d58c7460..c0a13839 100644 --- a/algorithm/sorting/circle_sort.py +++ b/algorithm/sorting/circle_sort.py @@ -7,6 +7,7 @@ # Jika elemen kiri lebih besar, tukar dengan elemen kanan. # Lanjutkan ke tengah array, lalu lakukan rekursi. + def circle_sort(collection: list[int]) -> list[int]: """ contoh diff --git a/scripts/build_directory_md.py b/scripts/build_directory_md.py index fe214bf3..1a53a309 100755 --- a/scripts/build_directory_md.py +++ b/scripts/build_directory_md.py @@ -8,13 +8,13 @@ def good_file_paths(top_dir: str = ".") -> Iterator[str]: """ - Fungsi menghasilkan path file yang memenuhi kriteria tertentu + Fungsi menghasilkan path file yang memenuhi kriteria tertentu dari direktori yang diberikan. Parameter: - - top_dir (str): direktori root tempat pencarian dimulai. + - top_dir (str): direktori root tempat pencarian dimulai. Default adalah direktori saat ini ("."). - + Return: - (Iterator[str]): path file (relatif terhadap `top_dir`)