DECLARE FUNCTION spiegeln$ (st$) DECLARE FUNCTION suche% (wort$, muster$) DECLARE FUNCTION anzahl% (st1$, st2$) DECLARE FUNCTION naechstes$ (st1$, alph$) SCREEN 12 CLS COLOR 2 INPUT "Alphabet (1...10): "; alph% alph$ = RIGHT$(STR$(alph% - 1), 1) INPUT "Muster (x,y,z): "; muster$ wort$ = "" maxl% = 0 maxw$ = "" muster$ = spiegeln$(muster$) DO IF suche%(spiegeln$(wort$), muster$) = 0 THEN IF maxl% < LEN(wort$) THEN maxl% = LEN(wort$) maxw$ = wort$ LOCATE 5, 5 COLOR 15 PRINT maxl% LOCATE 1, 6 COLOR 10 PRINT maxw$ END IF wort$ = wort$ + "0" ELSE wort$ = naechstes$(wort$, alph$) END IF LOOP UNTIL wort$ = "1" COLOR 12 PRINT "Muster nicht mehr vermeidbar ab L„nge"; maxl% + 1 COLOR 0 FUNCTION anzahl% (st1$, st2$) a% = 0 FOR p% = 1 TO LEN(st1$) - LEN(st2$) + 1 IF st2$ = MID$(st1$, p%, LEN(st2$)) THEN a% = a% + 1 NEXT p% anzahl% = a% END FUNCTION FUNCTION naechstes$ (st$, alph$) IF st$ = "" THEN naechster$ = "" EXIT FUNCTION END IF letzter$ = RIGHT$(st$, 1) IF letzter$ = alph$ THEN naechstes$ = naechstes$(LEFT$(st$, LEN(st$) - 1), alph$) ELSE naechstes$ = LEFT$(st$, LEN(st$) - 1) + RIGHT$(STR$(VAL(letzter$) + 1), 1) END IF END FUNCTION FUNCTION spiegeln$ (st$) s$ = "" FOR p% = LEN(st$) TO 1 STEP -1 s$ = s$ + MID$(st$, p%, 1) NEXT p% spiegeln$ = s$ END FUNCTION FUNCTION suche% (w$, m$) IF anzahl%(m$, "x") = 0 THEN maxxlaenge% = 1 ELSE maxxlaenge% = INT((LEN(w$) - anzahl%(m$, "y")) / anzahl%(m$, "x")) END IF FOR xlaenge% = 1 TO maxxlaenge% IF anzahl%(m$, "y") = 0 THEN maxylaenge% = 1 ELSE maxylaenge% = INT((LEN(w$) - xlaenge% * anzahl%(m$, "x")) / anzahl%(m$, "y")) END IF FOR ylaenge% = 1 TO maxylaenge% IF anzahl%(m$, "z") = 0 THEN maxzlaenge% = 1 ELSE maxzlaenge% = INT((LEN(w$) - xlaenge% * anzahl%(m$, "x") - ylaenge% * anzahl%(m$, "y")) / anzahl%(m$, "z")) END IF FOR zlaenge% = 1 TO maxzlaenge% restwort$ = w$ xwort$ = "b" ywort$ = "b" zwort$ = "b" FOR musterpos% = 1 TO LEN(m$) IF MID$(m$, musterpos%, 1) = "x" THEN IF LEN(restwort$) < xlaenge% THEN GOTO weiter IF xwort$ = "b" THEN xwort$ = LEFT$(restwort$, xlaenge%) restwort$ = RIGHT$(restwort$, LEN(restwort$) - xlaenge%) ELSE IF xwort$ = LEFT$(restwort$, xlaenge%) THEN restwort$ = RIGHT$(restwort$, LEN(restwort$) - xlaenge%) ELSE GOTO weiter END IF END IF END IF IF MID$(m$, musterpos%, 1) = "y" THEN IF LEN(restwort$) < ylaenge% THEN GOTO weiter IF ywort$ = "b" THEN ywort$ = LEFT$(restwort$, ylaenge%) restwort$ = RIGHT$(restwort$, LEN(restwort$) - ylaenge%) ELSE IF ywort$ = LEFT$(restwort$, ylaenge%) THEN restwort$ = RIGHT$(restwort$, LEN(restwort$) - ylaenge%) ELSE GOTO weiter END IF END IF END IF IF MID$(m$, musterpos%, 1) = "z" THEN IF LEN(restwort$) < zlaenge% THEN GOTO weiter IF zwort$ = "b" THEN zwort$ = LEFT$(restwort$, zlaenge%) restwort$ = RIGHT$(restwort$, LEN(restwort$) - zlaenge%) ELSE IF zwort$ = LEFT$(restwort$, zlaenge%) THEN restwort$ = RIGHT$(restwort$, LEN(restwort$) - zlaenge%) ELSE GOTO weiter END IF END IF END IF NEXT musterpos% suche% = 1 EXIT FUNCTION weiter: NEXT zlaenge% NEXT ylaenge% NEXT xlaenge% suche% = 0 END FUNCTION