Skip to content

Commit 2468485

Browse files
committed
Basic algorithm
1 parent b3dcc0e commit 2468485

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

factoradic.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import argparse
2+
import math
3+
4+
5+
def dec_to_fact(n: int) -> int:
6+
"""Refer tp XKCD 2835."""
7+
fact = 1
8+
i = 1
9+
while fact < n:
10+
i += 1
11+
fact = math.factorial(i)
12+
if fact == n:
13+
largest_base, largest_fact = i, fact
14+
else:
15+
largest_base = i - 1
16+
largest_fact = math.factorial(largest_base)
17+
18+
leading_digit = math.floor(n / largest_fact)
19+
leading_digit_padded = int(str(leading_digit) + "0" * (largest_base - 1))
20+
full_number = leading_digit_padded
21+
22+
total_n_found_so_far = leading_digit * largest_fact
23+
if total_n_found_so_far == n:
24+
return full_number
25+
return full_number + dec_to_fact(n - total_n_found_so_far)
26+
27+
28+
if __name__ == "__main__":
29+
parser = argparse.ArgumentParser()
30+
parser.add_argument("value")
31+
32+
args = parser.parse_args()
33+
decimal = int(args.value)
34+
35+
factoradic = dec_to_fact(decimal)
36+
print(factoradic)

0 commit comments

Comments
 (0)