blob: a27f6c780d77b3ae9c659cb24da0c51300ea42e2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#!/usr/bin/env python3
# Challenge 178
#
# Task 1: Quater-imaginary Base
# Submitted by: Mohammad S Anwar
#
# Write a script to convert a given number (base 10) to quater-imaginary base
# number and vice-versa. For more informations, please checkout wiki page.
#
# For example,
#
# $number_base_10 = 4
# $number_quater_imaginary_base = 10300
def dec_to_base2i(n):
base = -4
result = ""
while n != 0:
i = n % base
n //= base
if i < 0:
i += abs(base)
n += 1
result = "0" + str(i) + result # imaginary is zero
result = result.lstrip('0')
return result
def base2i_to_dec(n2i):
base = -4
result = 0
digits = list(reversed(n2i))
for i in range(len(digits)):
if i % 2 == 0: # real part
result += int(digits[i]) * (base ** (i // 2))
elif digits[i] != '0': # imaginary part
raise ValueError(f"number {n2i} has imaginary component")
return result
assert(dec_to_base2i(4) == '10300')
assert(base2i_to_dec('10300') == 4)
|