#Binary counter #tape >>..1L1010.10R0.llR0.01L1010.ooR0.>...R101.11R1.llR1.00R1.ooR1.>!.1N1010.11R10.llR10.00R10.ooR10.>...L1010.11L11.llL11.00L11.ooL11.>..1L11.11R100.llR100.00R100.ooR100.>..0L11.11R101.llR101.00R101.ooR101.>...R0.11R110.llR110.00R110.ooR110.>...R100.11R111.llR111.00R111.ooR111.>...R110.11L1000.l1L1000.00L1000.o0L1000.>...L1000.1lR111.llR1001.0oR1.ooR1001.>...R1001.11L1010.llL1010.00L1010.ooL1010.......!.. #Unary times two #tape >>...R110.11L1.>...R11.11L1.>...R100.11R10.>!..R11.1.R10.>..1R101.11R100.>..1L111.11R101.>...R.11R.>...L0.11L111.......!1.1.1.1. #Unary plus one #tape >>!.1L1.11R0.>...R.11L1.......!1.1.1.1. symbolLesen R ! ! R @findRR(!;symbolMerken) # Sucht das nächste Auftreten des Symbols # ab der aktuellen Position und geht noch eine Position nach rechts @findRR(1;1) suchen R @1 @1 R $1 @end @findLN(1;1) suchen L @1 @1 N $1 @end @findLR(1;1) suchen L @1 @1 R $1 @end # Position auf zu lesendem Symbol auf simulierten Band symbolMerken * * L @zustandFinden(*;) # Position auf !-Markierung auf simuliertem Band @zustandFinden(1;0) # auf der '!'-Markierung auf dem Band onExBand L * * L @findLN(!;onExZustand) # auf der '!'-Markierung am Anfang des aktuellen Zustands onExZustand ! . R sucheSymbol # auf dem read-Symbol innerhalb ein Zustand/Symbol-Definition sucheSymbol R naechsteDef @1 @1 L markiereZustand # Position auf write Symbol naechsteDef R * {R R} bisPunkt bisPunkt R . . R sucheSymbol # Position vor dem Lese-Symbol, Markierung des Zustands markiereZustand . ! R symbolSchreiben @end # In der aktuellen Zustands/Symbol definition auf dem read-Symbol symbolSchreiben * * R symbolSchreiben1 # Auf dem Richtungssymbol symbolSchreiben1 * * R @richtungLesen(*;) @richtungLesen(1;0) dummy L L R @aufBandSchreiben(@1;links) R R R @aufBandSchreiben(@1;rechts) @end @aufBandSchreiben(1;1) suche * * R @findRR(!;schreibe) schreibe * @1 L $1 @end # Auf '!' im Band, durch . ersetzen und links oder rechts. rechts * {P. R R P! L} @findLR(!;binaryCopy) links * {P. L L P! L} @findLR(!;binaryCopy) # Position rechts von der '!'-Zustandsmarkierung auf dem Lese-Symbol binaryCopy * {R R} binaryCopy2 # Position auf der ersten Binärziffer binaryCopy2 # Maschine halt! (davon noch auf die Position auf dem Band gehen) . . R @findRR(!;stop) 0 o L @writeBinary(0;) 1 l L @writeBinary(1;) [ol] * R binaryCopy3 # Position auf n-ter Binärziffer binaryCopy3 . . L binaryWiederherstellen 0 o L @writeBinary(0;) 1 l L @writeBinary(1;) @writeBinary(1;0) # '>' finden findOne L > > L findTwo # das daneben auch '>'? findTwo * * L findOne > > L findPos findPos L . @1 R @findRR(!;binaryCopy) @end binaryWiederherstellen L # auf dem Richtungssymbol * {L L L P.} preFinalCountDown1 l 1 L binaryWiederherstellen o 0 L binaryWiederherstellen # Doppeltes '>>' finden preFinalCountDown1 L > > L preFinalCountDown0 # Wenn doppeltes '>>' gefunden, ! danach platzieren. preFinalCountDown0 L * * L preFinalCountDown1 > {R R P!} finalCountDown # rechts der '>>', doppeltes '>>' suchen finalCountDown L # '>>' suchen > > L second second * * L finalCountDown > > L preMinusEins preMinusEins L . . R minusEins # Position auf irgend einer Ziffer vor '<<' minusEins # oops, das ist -1, also fertig > > L preCounterLoeschen # Eins subtrahieren, den !-Zustands-Marker schieben 1 0 R schieben # Da gibt es einen Übertrag 0 1 R minusEins # !-Markierung suchen und löschen schieben R ! . R wo> # Nächsten Zustand suchen, dahinter die Markierung setzen. wo> > > R setzen setzen . ! L finalCountDown preCounterLoeschen L . . R counterLoeschen # Position vor der der -1 vor '<<', diese Löschen und von vorne beginnen. counterLoeschen R [01] . R counterLoeschen > > R symbolLesen