Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
aa:lab:1 [2023/10/21 21:25]
tpruteanu [Exerciții tryhard]
aa:lab:1 [2025/10/06 18:16] (current)
dmihai
Line 1: Line 1:
-====== ​Mașina Turing ​======+====== ​Editor de text: introducere ​======
  
-==== Simulatoare ​de Mașini Turing ====+Scopul acestui laborator este familiarizarea studenților cu editorul ​de texte pe care îl vom folosi pe parcursul semestrului pentru a ilustra în mod practic diversele concepte abordate.
  
-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.+=== Cod editor ===
  
-=== turingmachinesimulator.com ===+Descărcați scheletul de cod al editorului de text de [[https://​github.com/​cs-pub-ro/​AA-CB-public/​tree/​master/​text-editor|aici]].
  
- Un exemplu ușor de folosit este [[https://​turingmachinesimulator.com/​|acesta.]] O Mașina Turing scrisă în formatul dorit arată așa:+=== Ncurses ===
  
-<​code>​ +Editorul este bazat pe ''​ncurses''​ -- o bibliotecă lightweight care facilitează crearea de UIs în terminal. The Linux Documentation Project menține [[https://​tldp.org/​HOWTO/​NCURSES-Programming-HOWTO/​intro.html|acest ghid]]care poate servi atât ca introducere cât și ca referință rapidă pentru diverse funcții.
-nameBinary increment +
-init: start +
-accept: HY+
  
-//start: starea de început, se duce la finalul numărului +=== Cerințe ===
-//find0: caută un 0 pentru a-l incrementa+
  
-start,+1. Rețineți textul sub forma unui array bidimensional;​ săgețile de la tastatură schimbă poziția cursorului în cadrul matricei. Alte taste (literecifresimboluri speciale) înlocuiesc textul de sub cursor.
-start,0,>+
  
-start,+2. Implementați două moduri diferite de folosire: "​view"​ și "​write"​similare cu modurile "​Normal"​ și "​Insert"​ din ''​vim''​. Modul "​view"​ e default; apăsarea tastei "​i"​ trece în "​write";​ de acoloapăsarea tastei "<​Esc>" trece în "​view"​ (alternativ,​ puteți folosi orice alt shortcut vreți).
-start,1,>+
  
-start,+3. Adăugați un mod de a insera text fără suprascrie text (textul inserat "​împinge spre dreapta"​ textul existentîn limita dimensiunii unui rând în matrice).
-find0,​_,<​+
  
-find0,0 
-Y,1,- 
  
-find0,1 
-find0,​0,<​ 
- 
-find0,_ 
-Y,1,- 
- 
-</​code>​ 
- 
-Ș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 [[https://​drive.google.com/​drive/​folders/​1EE_G1ovtsquG3Y6uWkldwHpZ2CqMa9u8?​usp=sharing/​|scriptul]] pentru a-l converti in formatul dorit. 
-**Exemplu:​** [[https://​docs.google.com/​spreadsheets/​d/​1XjNYvHu2oyaTei41irkWRtI4Cppp_hvK/​edit?​usp=sharing&​ouid=113096868136191520794&​rtpof=true&​sd=true/​|Excel.]] 
- 
- 
-===== Exerciții ===== 
- 
-<​note>​ 
-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. 
-</​note>​ 
- 
- 
-==== Exerciții basic ==== 
-1. Scrieți o Mașină Turing care primește un șir binar și verifică dacă începe și se termină cu simboluri **distincte**. 
-   Ex: "​100110110"​ -> False 
- 
-2. Scrieți o Mașină Turing care primește un șir binar și verifică dacă are lungime impară și simbolul din mijloc este 0. 
-   Ex: "​101100011"​ -> True 
- 
-3. Scrieți o Mașină Turing care primește un șir binar și lasă pe bandă complementul lui. 
-   Ex: "​000110111"​ -> "​111001000"​ 
- 
-4. 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"​. 
- 
-5. Scrieți o Mașină Turing care inversează cuvântul primit pe bandă. 
- 
-==== Exerciții fun ==== 
-6. Alex ascultă muzică doar dacă numărul melodiilor din playlist este putere a lui 2. Dându-se un șir de "​M"​-uri,​ verifică dacă Alex poate asculta acest playlist sau nu. 
- 
-7. Cățelul Max dorește sa-și facă tema la SDA, dar, din păcate, ca orice alt câine, acesta este color blind și, deci, nu vede dacă anumite paranteze sunt roși. Ajută-l pe Max să-și dea seama dacă parantezele din codul său sunt echilibrate. 
-   Ex: ()((()())) -> True 
-       ​()((()())( -> False 
- 
-8. Diana are in frigider doar conserve de mazăre("​M"​) și sticle de lapte("​L"​). Aceasta a mai cumpărat lapte de la magazin și vrea să așeze câte o sticlă de lapte după fiecare conservă de mazăre, mutând restul conținutului din frigider la dreapta. 
-   Ex: "​MML"​ -> "​MLMLL"​ 
- 
-9. Johnny maimuța se afla la capătul unui șir format din banane("​B"​) si mere("​M"​). Ajutați-l pe Johnny să numere bananele și, apoi, să fugă cu ele la capătul șirului. 
-   Ex: "​JBBMBMBMB"​ -> "​BBMBMBMBJ101"​ 
- 
-==== Exerciții tryhard ==== 
-10. 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. 
-   Ex: "​1011#​11001"​ -> "​100100"​ 
-  ​ 
-<​note>​ 
-Soluțiile pentru exercițiile din laborator se pot găsi [[aa:​lab:​sol:​1|aici]]. 
-</​note>​