Python :: Aufgabe #331

4 Lösungen Lösungen öffentlich

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ß

Lösungen:

vote_ok
von eisheiliger (3240 Punkte) - 31.03.2021 um 20:39 Uhr
Quellcode ausblenden 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()


1 Kommentar
1x
vote_ok
von AlexGroeg (2010 Punkte) - 07.04.2021 um 10:35 Uhr
Quellcode ausblenden 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)))

vote_ok
von nitnat (670 Punkte) - 09.04.2021 um 20:02 Uhr
Quellcode ausblenden 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))
vote_ok
von AlexGroeg (2010 Punkte) - 11.04.2021 um 21:07 Uhr
Quellcode ausblenden 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)))