Python :: Aufgabe #319
4 Lösungen
Ausgeglichenes Fahren
Fortgeschrittener - Python
von JKooP
- 12.02.2021 um 10:43 Uhr
Ein Fahrtenschreiber notiert, wie oft ein Pkw links bzw. rechts abgebogen ist.
In der anschließenden Auswertung soll ermittelt werden,
wie oft der Pkw in Folge ausgeglichen nach rechts (R) und links (L) gefahren ist.
Dabei können beliebig viele Rechts- bzw. Linksfahrten kombiniert werden (RRRLLL oder LLRR).
Beispiele:
RLRRLLRLRL
Lösung: 4 => RL RRLL RL RL
RLLR
Lösung: 2 => RL LR
LLLLRRRR
Lösung: 1 => LLLLRRRR
RLRRRLLRLL
Lösung: 2 => RL RRRLLRLL
RLRRRLLRLL RLLR ist keine Lösung, da vorher nicht ausgeglichen gefahren wurde (RR)
LLRLLL
Lösung: keine Lösung
LLRLLL LR ist keine Lösung, da vorher nicht ausgeglichen gefahren wurde (L)
LLRRLL
Lösung: 1 => LLRRLL
LLRRLL LR und RL sind keine Lösungen, da vorher nicht ausgeglichen gefahren wurde (L)
1. Aufgabe (mittel):
Erstelle eine Methode/Funktion, mit der man die Anzahl der ausgeglichenen Fahrten ermittelt.
2. Aufgabe (schwieriger):
Gib zusätzlich auch alle Lösungen aus.
Viel Spaß
In der anschließenden Auswertung soll ermittelt werden,
wie oft der Pkw in Folge ausgeglichen nach rechts (R) und links (L) gefahren ist.
Dabei können beliebig viele Rechts- bzw. Linksfahrten kombiniert werden (RRRLLL oder LLRR).
Beispiele:
RLRRLLRLRL
Lösung: 4 => RL RRLL RL RL
RLLR
Lösung: 2 => RL LR
LLLLRRRR
Lösung: 1 => LLLLRRRR
RLRRRLLRLL
Lösung: 2 => RL RRRLLRLL
RLRRRLLRLL RLLR ist keine Lösung, da vorher nicht ausgeglichen gefahren wurde (RR)
LLRLLL
Lösung: keine Lösung
LLRLLL LR ist keine Lösung, da vorher nicht ausgeglichen gefahren wurde (L)
LLRRLL
Lösung: 1 => LLRRLL
LLRRLL LR und RL sind keine Lösungen, da vorher nicht ausgeglichen gefahren wurde (L)
1. Aufgabe (mittel):
Erstelle eine Methode/Funktion, mit der man die Anzahl der ausgeglichenen Fahrten ermittelt.
2. Aufgabe (schwieriger):
Gib zusätzlich auch alle Lösungen aus.
Viel Spaß
Lösungen:
Python-Code
fahrt = "LLRRLL" summe = 0 ausgeglichen = 0 loesungen = "" for e in fahrt: if e == "R": summe += 1 if e == "L": summe -= 1 loesungen += e if summe == 0: ausgeglichen += 1 loesungen += " " print("Lösungen:", ausgeglichen, "-->", loesungen)
Python-Code
#319 ausgeglichenes Fahren beispiele = ['RLRRLLRLRL', 'RLLR', 'LLLLRRRR', 'RLRRRLLRLL', 'LLRLLL', 'LLRRLL'] test = [] loesungen = [] def initiieren(): test.append(liste[0]) liste.remove(liste[0]) def pruefen(): global aktiv x = 0 count = 1 initiieren() for i in liste: test.append(i) r = test.count('R') l = test.count('L') if test[x] == i and r != l: x += 1 continue elif test[x] != i and r != l and count != 2: x += 1 count += 1 continue else: if r == l: eintrag = ''.join(test) loesungen.append(eintrag) test.pop(0) for i in range(0, len(test)): liste.pop(0) x = 0 test.clear() break else: test.clear() aktiv = False break for i in beispiele: aktiv = True liste = list(i) print('Fahrt:', i) while aktiv: if len(liste) > 0: pruefen() else: aktiv = False if len(loesungen) == 0: print('Keine Lösung') else: print('Lösungen:', len(loesungen), '=>', loesungen) loesungen.clear() print()
Python-Code
""" #319: Ausgeglichenes Fahren Ein Fahrtenschreiber notiert, wie oft ein Pkw links bzw. rechts abgebogen ist. In der anschließenden Auswertung soll ermittelt werden, wie oft der Pkw in Folge ausgeglichen nach rechts (R) und links (L) gefahren ist. """ import numpy as np def prf_ausgegl(fahrt): zaehl = 0 ausgl = 0 richt = [] unaus = False posit = [] for i in range(0, len(fahrt)): richt.append(fahrt[i]) ausgl += fahrt[i] if ausgl == 0: zaehl += 1 richt = [] posit.append(i) zunau = 0 for j in range(0, len(richt) - 1): if richt[j] == richt[j + 1]: zunau += 0 else: zunau += 1 if zunau > 2: unaus = True print("Unausgeglichene Strecke") if not unaus: print(zaehl, "Richtungswechsel fanden statt") fahrt = ["R" if value == 1 else "L" for value in fahrt] for j in range(0, len(posit) - 1): fahrt.insert(posit[j] + j + 1, "_") print(fahrt) def prf_form(arr): print("\n", arr) arr = [1 if value == "R" else -1 for value in arr] if np.sum(arr) != 0: print("Es gibt keine Lösung") else: prf_ausgegl(arr) def main(): prf_form(["R", "L", "R", "R", "L", "L", "R", "L", "R", "L"]) prf_form(["R", "L", "L", "R"]) prf_form(["L", "L", "L", "L", "R", "R", "R", "R"]) prf_form(["R", "L", "R", "R", "R", "L", "L", "R", "L", "L"]) prf_form(["L", "L", "R", "L", "L", "L"]) prf_form(["L", "L", "R", "R", "L", "L"]) if __name__ == '__main__': main()
Python-Code
def check(string_to_check): substr_list = [] def even(string): sum = 0 for char in string: sum += ord(char) return sum % (ord("L") + ord("R")) == 0 def str_manager(masterstring, n=2): substring = masterstring[:n] if masterstring == substring: if even(substring): substr_list.append(substring) else: if substr_list: substr_list[-1] += substring return else: if even(substring): substr_list.append(substring) str_manager(masterstring[n:]) else: str_manager(masterstring, n+2) str_manager(string_to_check) return substr_list # test testdata = ["RLRRLLRLRL", "RLLR", "LLLLRRRR", "RLRRRLLRLL", "LLRLLL", "LLRRLL"] for element in testdata: result = check(element) print(f"Anzahl der Lösungen: {len(result)}, Lösungen {result}")