Skip to content

Commit e749a97

Browse files
feat: menambahkan algoritma happy number (#337)
1 parent 19e1b42 commit e749a97

1 file changed

Lines changed: 62 additions & 0 deletions

File tree

other/happy_number.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# Mengecek apakah angka adalah sebuah happy number atau sad number
2+
# https://en.wikipedia.org/wiki/Happy_number
3+
def sum_digit(number):
4+
value_digit = 0
5+
while number > 0:
6+
digit = number % 10
7+
value_digit += digit * digit
8+
number = number // 10
9+
return value_digit
10+
11+
12+
def happy_or_sad(number) -> str:
13+
"""
14+
Happy number adalah sebuah angka yang dimana nanti akan kembali
15+
menjadi satu jika di lakukan penjumlahan kuadrat.
16+
17+
13 = 1^2 + 3^2 = 10 = 1^2 + 0^2 = 1 -> Happy Number
18+
4 = 4^2 = 16 = 1^2 + 6^2 = 37 ... 2^2 + 0 = 4 -> Sad Number
19+
20+
>>> happy_or_sad(23)
21+
'happy number'
22+
>>> happy_or_sad(44)
23+
'happy number'
24+
>>> happy_or_sad(8)
25+
'sad number'
26+
>>> happy_or_sad(20)
27+
'sad number'
28+
"""
29+
set_value = set()
30+
happy, sad = "happy number", "sad number"
31+
while True:
32+
if number == 1:
33+
return str(happy)
34+
35+
number = sum_digit(number)
36+
37+
if number in set_value:
38+
return str(sad)
39+
40+
set_value.add(number)
41+
42+
43+
def main(args=None):
44+
import doctest
45+
46+
doctest.testmod()
47+
48+
# sample case
49+
happy_numbers = [1, 7, 23, 31, 44]
50+
unhappy_numbers = [2, 3, 8, 20, 4]
51+
52+
for i in happy_numbers:
53+
print(happy_or_sad(i))
54+
55+
print("\n")
56+
57+
for i in unhappy_numbers:
58+
print(happy_or_sad(i))
59+
60+
61+
if __name__ == "__main__" :
62+
main()

0 commit comments

Comments
 (0)