Python :: Aufgabe #352 :: Lösung #4
5 Lösungen
#352
Binärzahl enthält maximal eine Folge von Einsen
Anfänger - Python
von JKooP
- 23.04.2021 um 15:37 Uhr
Eine als String (Text) dargestellte Binärzahl (0 und 1) soll dahingehend geprüft werden,
ob sie maximal eine Folge von Einsen enthält. Die Länge der Folge ist beliebig.
Dabei kann die Binärzahl auch vorangestellte Nullen enthalten.
Beispiele:
b = "1100"
Lösung: wahr => 1100 (1 Folge)
b = "1010"
Lösung: falsch => 1010 (2 Folgen)
b = "00111000"
Lösung: wahr => 00111000 (1 Folge)
b = "10000001"
Lösung: falsch => 10000001 (2 Folgen)
Schreibe eine Methode/Funktion, die für obige Aufgabenstellung als Ergebnis true/false liefert.
Viel Spaß
ob sie maximal eine Folge von Einsen enthält. Die Länge der Folge ist beliebig.
Dabei kann die Binärzahl auch vorangestellte Nullen enthalten.
Beispiele:
b = "1100"
Lösung: wahr => 1100 (1 Folge)
b = "1010"
Lösung: falsch => 1010 (2 Folgen)
b = "00111000"
Lösung: wahr => 00111000 (1 Folge)
b = "10000001"
Lösung: falsch => 10000001 (2 Folgen)
Schreibe eine Methode/Funktion, die für obige Aufgabenstellung als Ergebnis true/false liefert.
Viel Spaß
#4
von nitnat (670 Punkte)
- 07.05.2021 um 21:04 Uhr
Python-Code
# Die Aufgabenstellung erinnerte mich sofort an klassische deterministische endliche Automaten. # Daher habe ich hier für diese Aufgabe einen etwas ungewöhnlichen Lösungsweg gewählt. # Die Klasse DFA implementiert ein Modell für beliebige deterministische endliche Automaten. # Die Spezifizierung erfolgt durch das 5-Tupel Zustände (list), Alphabet (list), # Übergangsfunktion als Tabelle (2d list), Startzustand (str) und akzeptierende Endzustände (list). # Eine graphische Darstellung des Automaten für die konkrete Aufgabenstellung habe ich als Anhang beigefügt. # Deterministic Finite Automaton class DFA: def __init__(self, S, A, d, s0, F): self.states = S self.alphabet = A self.transition_table = d self.start_state = s0 self.final_states = F def delta(self, state, word): return self.transition_table[self.states.index(state)][self.alphabet.index(word)] def delta_circumflex(self, state, word_list): if not word_list: return state else: return self.delta(self.delta_circumflex(state, word_list[:-1]), word_list[-1]) def run(self, words): return self.delta_circumflex(self.start_state, [word for word in words]) in self.final_states # automaton to solve the problem states = ["s0", "s1", "s2", "s3"] alphabet = ["0", "1"] transition_table = [["s0", "s1"], ["s2", "s1"], ["s2", "s3"], ["s3", "s3"]] start_state = "s0" final_states = ["s1", "s2"] # Test automaton = DFA(states, alphabet, transition_table, start_state, final_states) test_data = ["1100", "1010", "00111000", "10000001"] for element in test_data: print(automaton.run(element))
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1