diff options
| author | Markus "Holli" Holzer <holli.holzer@gmail.com> | 2020-08-07 23:02:04 +0200 |
|---|---|---|
| committer | Markus "Holli" Holzer <holli.holzer@gmail.com> | 2020-08-07 23:02:04 +0200 |
| commit | f70cc17c3c2b82f357bb1113ee633dbce08f860b (patch) | |
| tree | fe770e01b34d4a23329ab3d1b67d1defd6d73be8 /challenge-066/walt-mankowski/python | |
| parent | dab3a93e36f8366f26846ad74fc2c427df63439e (diff) | |
| parent | 050694a6678b9eb09149d807d314b6552e83f717 (diff) | |
| download | perlweeklychallenge-club-f70cc17c3c2b82f357bb1113ee633dbce08f860b.tar.gz perlweeklychallenge-club-f70cc17c3c2b82f357bb1113ee633dbce08f860b.tar.bz2 perlweeklychallenge-club-f70cc17c3c2b82f357bb1113ee633dbce08f860b.zip | |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'challenge-066/walt-mankowski/python')
| -rw-r--r-- | challenge-066/walt-mankowski/python/.python-version | 1 | ||||
| -rw-r--r-- | challenge-066/walt-mankowski/python/ch-1.py | 26 | ||||
| -rw-r--r-- | challenge-066/walt-mankowski/python/ch-2.py | 24 |
3 files changed, 51 insertions, 0 deletions
diff --git a/challenge-066/walt-mankowski/python/.python-version b/challenge-066/walt-mankowski/python/.python-version new file mode 100644 index 0000000000..269aa9c86d --- /dev/null +++ b/challenge-066/walt-mankowski/python/.python-version @@ -0,0 +1 @@ +3.8.3 diff --git a/challenge-066/walt-mankowski/python/ch-1.py b/challenge-066/walt-mankowski/python/ch-1.py new file mode 100644 index 0000000000..1e0fc5ea5d --- /dev/null +++ b/challenge-066/walt-mankowski/python/ch-1.py @@ -0,0 +1,26 @@ +from sys import argv + +def divide(m, n): + # handle 0 values first + if n == 0: + raise ZeroDivisionError('integer division or modulo by zero') + if m == 0: + return 0 + + # sign of the result + sign = -1 if (m < 0 and n > 0) or (m > 0 and n < 0) else 1 + + # now count how many times we can subtract abs(n) from abs(m) + (m, n) = tuple(abs(x) for x in (m,n)) + count = 0 + while m >= n: + m -= n + count += 1 + + if sign == -1 and m > 0: + return -(count + 1) + else: + return count * sign + +m, n = tuple(int(x) for x in argv[1:3]) +print(divide(m, n)) diff --git a/challenge-066/walt-mankowski/python/ch-2.py b/challenge-066/walt-mankowski/python/ch-2.py new file mode 100644 index 0000000000..301fad1eda --- /dev/null +++ b/challenge-066/walt-mankowski/python/ch-2.py @@ -0,0 +1,24 @@ +from sys import argv +from math import log, sqrt, floor + +# check if n is within EPS of being a whole number +def is_whole(n): + EPS = 1e-10 + round = int(f'{n:.0f}') + return abs(round - n) < EPS + +# My algorithm is this: +# Loop over all the m's from 2 to sqrt(N) +# If m can be raised to an integer power to equal N, then log_m N is an integer + +N = int(argv[1]) +logn = log(N) +found = False +for m in range(2, int(sqrt(N))+1): + n = logn / log(m) + if is_whole(n): + print(f'{m}^{n:.0f}') + found = True + +if not found: + print(0) |
