Python :: Aufgabe #331
4 Lösungen
Isomorphe Strings (Mustergleichheit)
Fortgeschrittener - Python
von JKooP
- 06.03.2021 um 17:43 Uhr
Als isomorph bezeichnet man zwei oder mehrere Strings (Texte),
die zwar inhaltlich unterschiedlich sind, aber dennoch das gleiche Muster aufweisen.
Achtung:
Gleiche Buchstaben bedeuten Musterwiederholung! ABAB ist nicht ABCD, aber CDCD.
Beispiele:
s1 = ABBA; s2 = OTTO => true
s1 = PAPER; s2 = TITLE => true
s1 = EGG; s2 = ADD => true
s1 = BADC; s2 = BABA => false
s1 = BBBAAABA; s2 = AAABBBBA => false
Erstelle eine Funktion/Methode, die zwei Strings (Texte) hinsichtlich Isomorphie vergleicht.
Viel Spaß
die zwar inhaltlich unterschiedlich sind, aber dennoch das gleiche Muster aufweisen.
Achtung:
Gleiche Buchstaben bedeuten Musterwiederholung! ABAB ist nicht ABCD, aber CDCD.
Beispiele:
s1 = ABBA; s2 = OTTO => true
s1 = PAPER; s2 = TITLE => true
s1 = EGG; s2 = ADD => true
s1 = BADC; s2 = BABA => false
s1 = BBBAAABA; s2 = AAABBBBA => false
Erstelle eine Funktion/Methode, die zwei Strings (Texte) hinsichtlich Isomorphie vergleicht.
Viel Spaß
Lösungen:
Python-Code
""" #331: Isomorphe Strings (Mustergleichheit) Erstelle eine Funktion/Methode, die zwei Strings (Texte) hinsichtlich Isomorphie vergleicht. """ def cast(cast_e): cast_n = '' erg = "" for i in cast_e: if i not in cast_n: cast_n += i for i in cast_e: if i in cast_n: erg += str(cast_n.index(i)) return erg def prf_cast(ein1, ein2): if cast(ein1) == cast(ein2): print(ein1, ein2, "haben das gleiche Muster") else: print("Kein gleiches Muster für", ein1, ein2) def main(): prf_cast("ABBA", "OTTO") prf_cast("PAPER", "TITLE") prf_cast("EGG", "ADD") prf_cast("BADC", "BABA") prf_cast("BBBAAABA", "AAABBBBA ") if __name__ == '__main__': main()
Python-Code
def ist_isomorph(s1,s2) : if len(s1) != len(s2): return False return [len(set(s1)),len(set(s2))] == 2 * [len(set(zip(s1,s2)))] beispiele = [('ABBA', 'OTTO'), ('PAPER', 'TITLE'), ('EGG', 'ADD'), ('BADC', 'BABA'), ('BBBAAABA', 'AAABBBBA')] for s1, s2 in beispiele: print('s1 = {}; s2 = {} => {}'.format(s1, s2, ist_isomorph(s1, s2)))
Python-Code
def analyze_pattern(input_string): char_dict = {} for i in range(len(input_string)): char = input_string[i] if char not in char_dict: char_dict[char] = [i] else: char_dict[char].append(i) return [char_dict[char] for char in char_dict] def compare_pattern(str1, str2): if len(str1) != len(str2): return False else: return analyze_pattern(str1) == analyze_pattern(str2) # Test a, b = "PAPER", "title" c, d = "badc", "BABA" e, f = "dolle sache oder?", "7/{{#?f@.,#?/7#§$" print(compare_pattern(a, b)) print(compare_pattern(c, d)) print(compare_pattern(e, f))
Python-Code
def in_zahlenmuster(s): m = '' muster = '' for i in s: if i not in m: m += i if i in m: muster += str(m.index(i)) #print(muster) return muster def ist_isomorph(s1, s2): if in_zahlenmuster(s1) == in_zahlenmuster(s2): return True return False beispiele = [("ABBA", "OTTO"), ("PAPER", "TITLE"), ("EGG", "ADD"), ("BADC", "BABA"), ("BBBAAABA", "AAABBBBA ")] for s1, s2 in beispiele: print('s1 = {}; s2 = {} => {}'.format(s1, s2, ist_isomorph(s1, s2)))