Skip to content

Commit c9897ef

Browse files
feat: menambahkan algoritma taxicab (#334)
* feat: menambahkan algoritma taxicab * docs: menambahkan doctest
1 parent ce827e3 commit c9897ef

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

other/taxicab.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Bilangan Taxicab adalah bilangan yang dapat dinyatakan sebagai jumlah
2+
# dua kubus bilangan bulat positif dengan lebih dari satu cara berbeda.
3+
# https://en.wikipedia.org/wiki/Taxicab_number
4+
from array import array
5+
6+
7+
def taxi_cab(x):
8+
"""
9+
Fungsi ini akan menghitung nilai kubus dari 0 sampai x-1 untuk menciptakan pasangan
10+
angka (a, b), lalu dihitung a^3 + b^3. Jika hasil penjumlahan muncul sekali, maka
11+
akan disimpan sebagai bilangan Taxicab.
12+
13+
>>> taxi_cab(10)
14+
[]
15+
>>> taxi_cab(20)
16+
[1729, 4104]
17+
>>> taxi_cab(30)
18+
[1729, 4104, 13832, 20683]
19+
>>> taxi_cab(40)
20+
[1729, 4104, 13832, 20683, 32832, 39312, 40033, 46683, 64232]
21+
"""
22+
cubes = array('i', [i**3 for i in range(0, x)])
23+
dict_sum_pairs = {}
24+
raman = set()
25+
26+
for a in range(0, x):
27+
for b in range(a + 1, x):
28+
a3, b3 = cubes[a], cubes[b]
29+
30+
sum_pairs = a3 + b3
31+
32+
if sum_pairs not in dict_sum_pairs:
33+
dict_sum_pairs[sum_pairs] = (a, b)
34+
else:
35+
raman.add(sum_pairs)
36+
return sorted(raman)
37+
38+
39+
def main(args=None):
40+
import doctest
41+
42+
doctest.testmod()
43+
# base case
44+
print(taxi_cab(10))
45+
# output = []
46+
print(taxi_cab(20))
47+
# output = [1729, 4104]
48+
print(taxi_cab(30))
49+
# output = [1729, 4104, 13832, 20683]
50+
print(taxi_cab(40))
51+
# output = [1729, 4104, 13832, 20683, 32832, 39312, 40033, 46683, 64232]
52+
53+
54+
if __name__ == "__main__":
55+
main()

0 commit comments

Comments
 (0)