From f6611f68aa2aed70653b026cca93eedbacacb1e9 Mon Sep 17 00:00:00 2001 From: Arlan Tengga Date: Tue, 21 Oct 2025 19:47:35 +0700 Subject: [PATCH 1/3] feat: menambahkan algoritma lucky number --- other/lucky_number.py | 45 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 other/lucky_number.py diff --git a/other/lucky_number.py b/other/lucky_number.py new file mode 100644 index 00000000..f8f73723 --- /dev/null +++ b/other/lucky_number.py @@ -0,0 +1,45 @@ +# Algoritma untuk mengecek apakah bilangan itu lucky number +# https://en.wikipedia.org/wiki/Lucky_number +def is_lucky_number(number): + """ + Lucky number adalah angka yang selamat dari persortiran + angka berdasarkan posisi mirip Sieve. + + >>> is_lucky_number(897) + 'Angka Lucky' + >>> is_lucky_number(80) + 'Angka Lucky' + >>> is_lucky_number(1232) + 'Bukan Angka Lucky' + >>> is_lucky_number(700) + 'Bukan Angka Lucky' + + """ + benar , bukan = "Angka Lucky" , "Bukan Angka Lucky" + ar = set() + + while number != 0: + digit = number % 10 + + if digit in ar: + return bukan + + ar.add(digit) + number //= 10 + + return benar + + +def main(args=None): + import doctest + + doctest.testmod() + + print(is_lucky_number(897)) # Angka Lucky + print(is_lucky_number(80)) # Angka Lucky + print(is_lucky_number(1232)) # Bukan Angka Lucky + print(is_lucky_number(700)) # Bukan Angka Lucky + + +if __name__ == "__main__": + main() From e2c7d6f59cdc3ae0e0b76097681a736f0d23f18c Mon Sep 17 00:00:00 2001 From: Arlan Tengga Date: Wed, 22 Oct 2025 20:48:32 +0700 Subject: [PATCH 2/3] fix: memperbaiki algoritma --- other/lucky_number.py | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/other/lucky_number.py b/other/lucky_number.py index f8f73723..cbd32e53 100644 --- a/other/lucky_number.py +++ b/other/lucky_number.py @@ -5,9 +5,9 @@ def is_lucky_number(number): Lucky number adalah angka yang selamat dari persortiran angka berdasarkan posisi mirip Sieve. - >>> is_lucky_number(897) + >>> is_lucky_number(1) 'Angka Lucky' - >>> is_lucky_number(80) + >>> is_lucky_number(21) 'Angka Lucky' >>> is_lucky_number(1232) 'Bukan Angka Lucky' @@ -16,18 +16,31 @@ def is_lucky_number(number): """ benar , bukan = "Angka Lucky" , "Bukan Angka Lucky" - ar = set() + MAX_NUMBER = 10000 - while number != 0: - digit = number % 10 + idx = 1 + nbr = [] + for i in range(1 , MAX_NUMBER): + nbr.append(i) - if digit in ar: - return bukan + while idx < len(nbr): + step = nbr[idx] + if step > len(nbr): + break - ar.add(digit) - number //= 10 + new_numbers = [] + pos = 1 + for val in nbr: + if pos % step != 0: + new_numbers.append(val) + pos += 1 + nbr = new_numbers + idx += 1 - return benar + if number in nbr: + return benar + else: + return bukan def main(args=None): @@ -35,10 +48,10 @@ def main(args=None): doctest.testmod() - print(is_lucky_number(897)) # Angka Lucky - print(is_lucky_number(80)) # Angka Lucky - print(is_lucky_number(1232)) # Bukan Angka Lucky - print(is_lucky_number(700)) # Bukan Angka Lucky + print(is_lucky_number(1)) # Angka Lucky + print(is_lucky_number(21)) # Angka Lucky + print(is_lucky_number(80)) # Bukan Angka Lucky + print(is_lucky_number(897)) # Bukan Angka Lucky if __name__ == "__main__": From 61ff6af097ee0560e3af7bd7e8ac13604c46af60 Mon Sep 17 00:00:00 2001 From: Arlan Tengga Date: Thu, 23 Oct 2025 13:54:48 +0700 Subject: [PATCH 3/3] fix: memperbaiki algoritma --- other/lucky_number.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/other/lucky_number.py b/other/lucky_number.py index cbd32e53..5a2eb74e 100644 --- a/other/lucky_number.py +++ b/other/lucky_number.py @@ -9,6 +9,10 @@ def is_lucky_number(number): 'Angka Lucky' >>> is_lucky_number(21) 'Angka Lucky' + >>> is_lucky_number(9) + 'Angka Lucky' + >>> is_lucky_number(10) + 'Bukan Angka Lucky' >>> is_lucky_number(1232) 'Bukan Angka Lucky' >>> is_lucky_number(700) @@ -21,7 +25,8 @@ def is_lucky_number(number): idx = 1 nbr = [] for i in range(1 , MAX_NUMBER): - nbr.append(i) + if i % 2 != 0: + nbr.append(i) while idx < len(nbr): step = nbr[idx] @@ -50,6 +55,8 @@ def main(args=None): print(is_lucky_number(1)) # Angka Lucky print(is_lucky_number(21)) # Angka Lucky + print(is_lucky_number(9)) # Angka Lucky + print(is_lucky_number(10)) # Bukan Angka Lucky print(is_lucky_number(80)) # Bukan Angka Lucky print(is_lucky_number(897)) # Bukan Angka Lucky