aboutsummaryrefslogtreecommitdiff
path: root/challenge-149/sgreen/python
diff options
context:
space:
mode:
authorSimon Green <mail@simon.green>2022-01-31 09:18:32 +1100
committerSimon Green <mail@simon.green>2022-01-31 09:18:32 +1100
commit67d5e4e5f2fc556822c252a7ebe1ed9aa65aa668 (patch)
tree1b866dccf0ac3ed27f1fc84995ccc8735009dded /challenge-149/sgreen/python
parent2e43471a3281a74e0b8ba89de28316bc3b89cd6f (diff)
downloadperlweeklychallenge-club-67d5e4e5f2fc556822c252a7ebe1ed9aa65aa668.tar.gz
perlweeklychallenge-club-67d5e4e5f2fc556822c252a7ebe1ed9aa65aa668.tar.bz2
perlweeklychallenge-club-67d5e4e5f2fc556822c252a7ebe1ed9aa65aa668.zip
sgreen solutions to challenge 149
Diffstat (limited to 'challenge-149/sgreen/python')
-rwxr-xr-xchallenge-149/sgreen/python/ch-1.py41
-rwxr-xr-xchallenge-149/sgreen/python/ch-2.py42
2 files changed, 83 insertions, 0 deletions
diff --git a/challenge-149/sgreen/python/ch-1.py b/challenge-149/sgreen/python/ch-1.py
new file mode 100755
index 0000000000..a192f81016
--- /dev/null
+++ b/challenge-149/sgreen/python/ch-1.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python
+
+import sys
+
+fibs = [0, 1]
+
+
+def is_sum_fib(n):
+ global fibs
+
+ # Make sure we have all fibonacci numbers <= n
+ while (fibs[-1] < n):
+ fibs.append(fibs[-2] + fibs[-1])
+
+ return True if n in fibs else False
+
+
+def get_sum(n):
+ # Get the sum of all the digits
+ sum = 0
+ for digit in str(n):
+ sum += int(digit)
+ return sum
+
+
+def main(n):
+ value = 0
+ solutions = []
+
+ # Keep going until we have n solutions.
+ while len(solutions) < n:
+ # If the sum of this number is a fibannoci number, add it
+ if is_sum_fib(get_sum(value)):
+ solutions.append(value)
+ value += 1
+
+ print(*solutions, sep=', ')
+
+
+if __name__ == '__main__':
+ main(int(sys.argv[1]))
diff --git a/challenge-149/sgreen/python/ch-2.py b/challenge-149/sgreen/python/ch-2.py
new file mode 100755
index 0000000000..6a2d3362b7
--- /dev/null
+++ b/challenge-149/sgreen/python/ch-2.py
@@ -0,0 +1,42 @@
+#!/usr/bin/env python
+
+import itertools
+from math import sqrt
+import sys
+
+
+def main(n):
+ v = 'ZYXWVUTSRQPONMLKJIHGFEDCBA9876543210'
+ c = n
+
+ if n < 2 or n > 22:
+ raise ValueError('n must be between 2 and 22')
+
+ # Get all digits for this number
+ v = v[-n:]
+
+ while c > 0:
+ for x in itertools.permutations(v, c):
+ # If the first digit is zero, reset the permutations to have
+ # one less digit
+ if x[0] == '0':
+ c -= 1
+ break
+
+ # Turn the tuple into a string (s) and its integer version (i)
+ s = ''.join(x)
+ i = int(s, n)
+
+ # Calculate the square root of the integer
+ r = sqrt(i)
+ if r == int(r):
+ # If it is a perfect square, then print the number and exit
+ print(f'{s} ({int(r)}² = {i})')
+ return
+
+ # This should never happen as '1' is valid solution for all bases
+ print('No solution!')
+
+
+if __name__ == '__main__':
+ main(int(sys.argv[1]))