import Turing
data Z = A0 | A1 | A2 | B | C | D | E | F deriving (Eq, Ord, Show)
student :: Turing Char Z
student = Turing
{ eingabealphabet = mkSet "I"
, leerzeichen = '#'
, arbeitsalphabet = mkSet "#abI"
, zustandsmenge = mkSet [ A0, A1, A2, B, C, D, E, F ]
, tafel = t
, startzustand = A0
, endzustandsmenge = mkSet [ F ]
}
t = listToFM
[ ( ('I', A0), mkSet [ ( 'a', A1, R ) ] )
, ( ('I', A1), mkSet [ ( 'a', A2, R ) ] )
, ( ('I', A2), mkSet [ ( 'a', A2, R ), ('I', B, L) ] )
, ( ('a', B), mkSet [ ('a', B, L) ] )
, ( ('b', B), mkSet [ ('b', B, L) ] )
, ( (???, B), mkSet [ (???, C, ?) ] )
, ( (???, C), mkSet [ (???, D, ?) ] )
, ( (???, C), mkSet [ (???, E, ?) ] )
, ( ('a', D), mkSet [ ('a', D, R) ] )
, ( ('b', D), mkSet [ ('b', D, R) ] )
, ( ('I', D), mkSet [ ('b', B, L) ] )
, ( ('b', E), mkSet [ ('a', E, R) ] )
, ( (???, E), mkSet [ (???, B, ?) ] )
, ( (???, ?), mkSet [ (???, F, ?) ] )
]
Sie müssen in den Zeilen mit ??? noch die passenden Werte einsetzen.
data Turing y z =
Turing { eingabealphabet :: Set y
, arbeitsalphabet :: Set y
, leerzeichen :: y
, zustandsmenge :: Set z
, tafel :: FiniteMap (y, z) (Set (y, z, Bewegung))
, startzustand :: z
, endzustandsmenge :: Set z
}
data Bewegung = L | O | R
deriving (Eq, Show, Ord)
Set y ist der Typ der Mengen mit Elementen aus y,
und FiniteMap a b sind endliche Abbildungen
(stellen Sie sich Hashtabellen oder Suchbäume vor)
mit Schlüsseln aus a und Werten aus b.
Es kann sein, daß das System Sicherheitslücken besitzt (siehe Beschreibung). Wenn Sie wollen, versuchen Sie diese zu finden, und informieren Sie mich. Ansonsten lassen Sie das Hacken lieber.
Der wahre Hacker kann sich gern die Quellen anschauen, mit nach Hause nehmen, und mit einem Haskell-System selbst ausführen.