{- Berechenbarkeit und Komplexitaet SS03 bei Dr. Tompitz autotool-Aufgabe TM-SUCC Arne Brutschy, 8964813 Idee: simpel, die Maschine guckt erst ob ganz links ob dort eine Null steht, wenn ja trivial (mit Eins ueberschreiben). Wenn nicht, dann nach rechts laufen und die erste vorkommende Null durch Eins ersetzen. Wenn wir ans Bandende stossen (d.h. alle Bits 1 waren), werden alle auf Null umgeschrieben und eine Eins vorne drangehaengt. Das hier ist nur mein erster (naiver) Versuch, man kann das noch auf zwei Zustaende kuerzen. -} import Turing student :: Turing Char Integer student = Turing {eingabealphabet = mkSet "01", arbeitsalphabet = mkSet "#01", leerzeichen = '#', zustandsmenge = mkSet [0, 1, 2, 4], tafel = listToFM [-- Zustand 0: laufe bis ans rechte Ende (('1', 0), mkSet [('1', 0, R)]), (('0', 0), mkSet [('0', 0, R)]), (('#', 0), mkSet [('#', 1, L)]), -- Zustand 1: wenn 0 am Ende, ersetze durch 1, -- wenn nicht dann zu Zustand 2 (('0', 1), mkSet [('1', 4, O)]), (('1', 1), mkSet [('0', 2, L)]), -- Zustand 2: lese bis 0 oder #, ersetze -- durch 1 (('1', 2), mkSet [('0', 2, L)]), (('0', 2), mkSet [('1', 4, O)]), (('#', 2), mkSet [('1', 4, O)])], startzustand = 0, endzustandsmenge = mkSet [4]}