|
| 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