import Char -- comment out if your Hugs fusses about this line import Turing -- swop 'a's and 'b's in the input string convertAB :: Prog convertAB = [(("scan",'a'),('b',Rght,"scan")), (("scan",'b'),('a',Rght,"scan"))] -- add one to the binary number in the input increment :: Prog increment = [(("scanRght",'0'),('0',Rght,"scanRght")), (("scanRght",'1'),('1',Rght,"scanRght")), (("scanRght",' '),(' ',Lft,"carry")), (("carry",'1'),('0',Lft,"carry")), (("carry",' '),('1',Lft,"finishUp")), (("carry",'0'),('1',Lft,"finishUp")), (("finishUp",'0'),('0',Lft,"finishUp")), (("finishUp",'1'),('1',Lft,"finishUp")) ] -- Decide if the input is == 0 (mod 3) mod3 :: Prog mod3 = [(("mod0",' '),('Y',Lft,"done")), (("mod0",'0'),(' ',Rght,"mod0")), (("mod0",'1'),(' ',Rght,"mod1")), (("mod1",' '),('N',Lft,"done")), (("mod1",'0'),(' ',Rght,"mod2")), (("mod1",'1'),(' ',Rght,"mod0")), (("mod2",' '),('N',Lft,"done")), (("mod2",'0'),(' ',Rght,"mod1")), (("mod2",'1'),(' ',Rght,"mod2")) ] -- make a copy of the input copy :: Prog copy = [(("read",' '),(' ',Lft,"done")), (("read",'a'),('A',Rght,"skipA")), (("read",'b'),('B',Rght,"skipB")), (("skipA",'a'),('a',Rght,"skipA")), (("skipA",'b'),('b',Rght,"skipA")), (("skipA",' '),(' ',Rght,"copyA")), (("copyA",'a'),('a',Rght,"copyA")), (("copyA",'b'),('b',Rght,"copyA")), (("copyA",' '),('a',Lft,"getNext")), (("skipB",'a'),('a',Rght,"skipB")), (("skipB",'b'),('b',Rght,"skipB")), (("skipB",' '),(' ',Rght,"copyB")), (("copyB",'a'),('a',Rght,"copyB")), (("copyB",'b'),('b',Rght,"copyB")), (("copyB",' '),('b',Lft,"getNext")), (("getNext",'a'),('a',Lft,"getNext")), (("getNext",'b'),('b',Lft,"getNext")), (("getNext",' '),(' ',Lft,"getNext2")), (("getNext2",'a'),('a',Lft,"getNext2")), (("getNext2",'b'),('b',Lft,"getNext2")), (("getNext2",'A'),('a',Rght,"read")), (("getNext2",'B'),('b',Rght,"read")), (("done",'a'),('a',Lft,"done")), (("done",'b'),('b',Lft,"done")) ] -- reverse the input string reverseTM :: Prog reverseTM = [(("readL",'a'),('A',Rght,"copyAL")), (("readL",'b'),('B',Rght,"copyBL")), (("readL",'A'),('a',Lft,"finish")), (("readL",'B'),('b',Lft,"finish")), (("copyAL",'a'),('a',Rght,"copyAL")), (("copyAL",'b'),('b',Rght,"copyAL")), (("copyAL",' '),(' ',Lft,"readRa")), (("copyAL",'A'),('a',Lft,"readRa")), (("copyAL",'B'),('b',Lft,"readRa")), (("readRa",'a'),('A',Lft,"copyAR")), (("readRa",'b'),('A',Lft,"copyBR")), (("readRa",'A'),('a',Lft,"finish")), (("copyBL",'a'),('a',Rght,"copyBL")), (("copyBL",'b'),('b',Rght,"copyBL")), (("copyBL",' '),(' ',Lft,"readRb")), (("copyBL",'A'),('a',Lft,"readRb")), (("copyBL",'B'),('b',Lft,"readRb")), (("readRb",'a'),('B',Lft,"copyAR")), (("readRb",'b'),('B',Lft,"copyBR")), (("readRb",'B'),('b',Lft,"finish")), (("copyAR",'a'),('a',Lft,"copyAR")), (("copyAR",'b'),('b',Lft,"copyAR")), (("copyAR",'A'),('a',Rght,"readL")), (("copyAR",'B'),('a',Rght,"readL")), (("copyBR",'a'),('a',Lft,"copyBR")), (("copyBR",'b'),('b',Lft,"copyBR")), (("copyBR",'A'),('b',Rght,"readL")), (("copyBR",'B'),('b',Rght,"readL")), (("finish",'a'),('a',Lft,"finish")), (("finish",'b'),('b',Lft,"finish")) ]