Mașina Turing

Simulatoare de Mașini Turing

Simulatoarele de Mașini Turing sunt unelte foarte utile pentru vizualizarea modului de lucru al unei mașini. Fiecare simulator vine cu propriul său format de input, deci citiți cu atenție specificația.

turingmachinesimulator.com

Un exemplu ușor de folosit este acesta. O Mașina Turing scrisă în formatul dorit arată așa:

name: Binary increment
init: start
accept: H, Y

//start: starea de început, se duce la finalul numărului
//find0: caută un 0 pentru a-l incrementa

start,0
start,0,>

start,1
start,1,>

start,_
find0,_,<

find0,0
Y,1,-

find0,1
find0,0,<

find0,_
Y,1,-

Ștergeți tot textul care apare, înlocuiți-l cu descrierea mașinii și apăsați compile. Va apărea o căsuță de input în care puteți scrie cuvântul care va fi inițial pe bandă; apoi apăsați play.

Tabela de tranziții

O altă metodă de redactare ar fi sub forma de tabelă de tranziții folosind Excel, ulterior folosind scriptul pentru a-l converti in formatul dorit. Exemplu: Excel.

Exercițiile din cadrul acestui laborator vă cer să descrieți diverse Mașini Turing.

În toate exercițiile convenția este că la începutul rulării, pe bandă se află doar inputul (restul celulelor sunt goale), iar capul de citire e poziționat pe cel mai din stânga simbol.

Pentru exercițiile care menționează că inputul este un număr, acesta e fie numărul zero, fie începe cu o cifră diferită de 0. Cifrele numărului sunt scrise de la stânga la dreapta.

  1. Scrieți o Mașină Turing care primește un șir binar și verifică dacă începe și se termină cu simboluri distincte (e.g. 100110110).
  2. Rezolvați exercițiul anterior pentru input în baza 10.
  3. Scrieți o Mașină Turing care primește un șir binar și verifică dacă are lungime impară și simbolul din mijloc este 0 (e.g. 101100011).
  4. Scrieți o Mașină Turing care primește un șir binar și lasă pe bandă complementul lui (e.g. “100110100” → “011001011”)
  5. Scrieți o Mașină Turing care curăță toată banda (atât la stânga cât și la dreapta) și apoi lasă scris doar “1”.
  6. Scrieți o Mașină Turing care inversează cuvântul primit pe bandă.
  7. Scrieți o Mașină Turing care primește un șir de “X”-uri și verifică dacă lungimea acestuia este o putere a lui 2.
  8. Scrieți o Mașină Turing care primește un șir de paranteze “(”, “)” și verifică dacă sunt echilibrate.
  9. Scrieți o Mașină Turing care primește un număr în baza 2 și verifică dacă e divizibil cu 5.
  10. Scrieți o Mașină Turing care primește un cuvânt binar, găsește primul simbol “0” și inserează un “1” în stânga lui (deci tot ce apare la dreapta va trebui mutat cu o poziție).
  11. Scrieți o Mașină Turing care primește două numere în baza 2, big-endian, separate de un # și lasă pe bandă suma lor (e.g. “1011#11001” → “100100”).
  12. Scrieți o Mașină Turing care primește un șir binar și lasă pe bandă, după un caracter “#”, numărul de 0-uri, în bază 2 (e.g. “100010110” → “100010110#101”).