Mittwoch, 9. Oktober 2013
Musterlösung zu Aufgabe 2 "Denksport mit Python, erste Anwendung von Mercurial" (POS1: 2BHIF)
Mögliche Lösungen zur Aufgabe 2 "Denksport mit Python, erste Anwendung von Mercurial sind (nur die Python-Scrips):
Die Palindrom-Beispiele sind ganz ähnlich und wurden daher in ein Programm gepackt, bei dem man als Parameter auf der Kommandozeile die Anzahl der Stellen angeben kann (4, 6, 8). Zusätzlich kann noch '-l' angegeben werden, um eine Liste der Produkte zu erhalten. Die Ergebnisliste ist nicht ganz vollständig, denn es wird das Ergebnis des Produkts als Schlüssel verwendet. Damit gehen Lösungen wie zum Beispiel 111111 = 143 * 777 = 231 * 481 = 259 * 429 verloren.
#!/usr/bin/env python3
"""
File: pythagorean_triple.py
Desc: Ein Programm zur Bestimmung eines pythagoräischen Tripel (a2+b2=c2
für a < b < c), wobei a+b+c == 1000.
Created: 2013-09-23, Harald R. Haberstroh
"""
from sys import argv
from math import sqrt
if __name__ == '__main__':
summe = 1000
if len(argv) == 2:
summe = int(argv[1])
for a in range(1, summe // 3):
for b in range(a + 1, summe // 2):
a2 = a * a
b2 = b * b
c2 = a2 + b2
c = sqrt(c2)
if a < b < c and a + b + c == summe:
print(a, b, int(c))
print(int(a * b * c))
#!/usr/bin/env python3
"""
File: sumdigits2pow1000.py
Desc: calculate the sum of the digits of 2**1000 (exponent can be changed
with commandline argument)
Created: 2013-09-23, Harald R. Haberstroh
"""
from sys import argv
if __name__ == '__main__':
if len(argv) == 2:
exponent = int(argv[1])
else:
exponent = 1000
print(sum(list(map(int, list(str(2 ** exponent))))))
#!/usr/bin/env python3
"""
File: sumdigitsfact.py
Desc: calculate the sum of the digits of 100! (100 can be changed
with commandline argument)
Created: 2013-09-23, Harald R. Haberstroh
"""
from sys import argv
def fact(n):
"""n!"""
f = 1
for i in range(1, n + 1):
f *= i
return f
if __name__ == '__main__':
if len(argv) == 2:
n = int(argv[1])
else:
n = 100
print(sum(list(map(int, list(str(fact(n)))))))
Die Palindrom-Beispiele sind ganz ähnlich und wurden daher in ein Programm gepackt, bei dem man als Parameter auf der Kommandozeile die Anzahl der Stellen angeben kann (4, 6, 8). Zusätzlich kann noch '-l' angegeben werden, um eine Liste der Produkte zu erhalten. Die Ergebnisliste ist nicht ganz vollständig, denn es wird das Ergebnis des Produkts als Schlüssel verwendet. Damit gehen Lösungen wie zum Beispiel 111111 = 143 * 777 = 231 * 481 = 259 * 429 verloren.
#!/usr/bin/env python3
"""
File: palindrome.py
Desc: largest palindrome of product of two n/2-digit numbers with n digits
Created: 2013-09-23, Harald R. Haberstroh
"""
from sys import argv
def checkPalindrom(s):
"""
checks whether string is a palindrome
"""
l = len(s)
for i in range(l // 2):
if s[i] != s[l - i - 1]:
return False
return True
def genPalindrom(n):
"""
build palindrome out of products
"""
# Dictionary only for list of palindromes not for maximum
palindromes = {}
products = []
maxPalindrome = 0
maxPalindromeFactors = ""
for i in range(10**((n - 1) // 2), 10 ** (n // 2)):
for j in range(10**((n - 1) // 2), 10 ** (n // 2)):
product = str(i * j)
if checkPalindrom(product):
if not product in palindromes:
palindromes[product] = str(i) + " * " + str(j) + " = " + product
products.append(product)
if int(product) > maxPalindrome:
maxPalindrome = int(product)
maxPalindromeFactors = str(i) + " * " + str(j) + " = " + product
return maxPalindromeFactors, palindromes
if __name__ == '__main__':
n = 2
if len(argv) > 1:
n = int(argv[1])
maxPalindrome, palindromes = genPalindrom(n)
if "-l" in argv:
lstPalindromes = list(palindromes.values())
lstPalindromes.sort()
for palindrome in lstPalindromes:
print(palindrome)
print("largest palindrome: %s" % maxPalindrome)
Labels: Lösung, POS1-2, Python
Abonnieren Kommentare [Atom]
Kommentar veröffentlichen