Das „
Morse Code Palindrome“-Problem gehört zum „HP Code wars“-Wettbewerb 2013 und war eher sehr einfach zu lösen. Einmal galt es eine Botschaft in Morsecode zu übersetzen und dann die Botschaft auf ihre Palindrom-Eigenschaft hin zu untersuchen:
# HP Code wars 2013
# problem 12
# Morse Code Palindrome
# 6 points
def botschaft_decodieren(botschaft):
""" Bekommt eine Botschaft und setzt sie
in Morsezeichen um. Leerzeichen und Satzzeichen
werden ignoriert. Kleinbuchstaben werden nicht
erwartet oder beachtet.
"""
morsecode = {"A": "•-",
"B": "-•••",
"C": "-•-•",
"D": "-••",
"E": "•",
"F": "••-•",
"G": "--•",
"H": "••••",
"I": "••",
"J": "•---",
"K": "-•-",
"L": "•-••",
"M": "--",
"N": "-•",
"O": "---",
"P": "•--•",
"Q": "--•-",
"R": "•-•",
"S": "••••",
"T": "-",
"U": "••-",
"V": "•••-",
"W": "•--",
"X": "-••-",
"Y": "-•--",
"Z": "--••"}
codierte_botschaft = []
for a in botschaft:
codierte_botschaft.append(morsecode.get(a,""))
return "".join(codierte_botschaft)
def palindrom_testen(datensatz):
""" Testet auf ein Palindrom und
schickt den Datensatz dazu zum decodieren
"""
botschaft = botschaft_decodieren(datensatz)
if botschaft == botschaft[::-1]:
return True
else:
return False
data = """ELEGIZED
QUIRKILY
MERCURY
FACE A WINE
HAPPY DAY
FEVER REBEL
SOPRANOS
EMIT OLD UFO TIME
PROTEIN POWDER
ANNEXING
ENJOIN
. """
datensaetze = data.split("\n")
for datensatz in datensaetze:
datensatz = datensatz.strip(" ")
if not datensatz == ".":
if palindrom_testen(datensatz):
print ("{} is a MCP".format(datensatz))
else:
print("{} is *not* a MCP".format(datensatz))
Anders als einige andere Aufgaben des diesjährigen Wettbewerbs eher keine Herausforderung.