mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-23 15:24:09 +03:00
Removed old bf file
This commit is contained in:
parent
44251e1ac5
commit
4da6849bc5
@ -1,90 +0,0 @@
|
||||
---
|
||||
language: brainfuck
|
||||
contributors:
|
||||
- ["Prajit Ramachandran", "http://prajitr.github.io/"]
|
||||
- ["Mathias Bynens", "http://mathiasbynens.be/"]
|
||||
translators:
|
||||
- ["Petru Dimitriu", "http://petru-dimitriu.github.io"]
|
||||
lang: ro-ro
|
||||
---
|
||||
|
||||
Brainfuck (un nume propriu care nu primește majusculă inițială decât la începutul
|
||||
propoziției) este un limbaj de programare Turing-comple extrem de minimalist cu
|
||||
doar 8 instrucțiuni.
|
||||
|
||||
Puteți încerca brainfuck în navigatorul dvs cu [brainfuck-visualizer](http://fatiherikli.github.io/brainfuck-visualizer/).
|
||||
|
||||
```
|
||||
Orice caracter in afara de "><+-.,[]" (fara ghilimele) este ignorat.
|
||||
|
||||
Brainfuck se reprezinta ca un vector de 30 000 de celule initializate cu zero
|
||||
si un pointer de date care trimite spre celula curenta.
|
||||
|
||||
Exista opt comenzi:
|
||||
+ : Incrementeaza valoarea celulei curente cu 1.
|
||||
- : Decrementeaza valoarea celulei curente cu 1.
|
||||
> : Muta pointerul de date la urmatoarea celula (o celula la dreapta).
|
||||
< : Muta pointerul de date la celula precedenta (o celula la stanga).
|
||||
. : Afiseaza valoarea caracterului ASCII din celul caurenta (ex. 65 = 'A').
|
||||
, : Citeste un singur caracter si plaseaza valoarea lui in celula curenta.
|
||||
[ : Daca valoarea in celula curenta este zero, sare la urmatorul caracter ] .
|
||||
Altfel, merge la urmatoarea instructiune.
|
||||
] : Daca valoarea in celula curenta este zero, sare la urmatoarea
|
||||
instructiune.
|
||||
Altfel, se intoarce la instructiunea de dupa caracterul [ precedent .
|
||||
|
||||
[ and ] formeaza un ciclu. Evident, trebuie ca parantezarea sa fie corecta.
|
||||
|
||||
Sa privim cateva programe brainfuck simple.
|
||||
|
||||
++++++ [ > ++++++++++ < - ] > +++++ .
|
||||
|
||||
Acest program afiseaza litera 'A'. Mai intai, incrementeaza celula #1 pana
|
||||
la valoarea 6. Celula #1 va fi folosita pentru ciclare. Apoi, intra in ciclu
|
||||
([) si muta pointerul la celula #2. Incrementeaza celula #2 de 10 ori,
|
||||
muta pointerul la celula #1 si decrementeaza celula #1. Acest ciclu parcurge
|
||||
6 iteratii (este nevoie de 6 decrementari pentru ca celula #1 sa ajunga la 0),
|
||||
iar dupa aceea se trece la caracterul ] corespunzator si se continua executia.
|
||||
|
||||
In acest moment, ne aflam in celula #1, care are valoarea 0, in timp ce celula
|
||||
#2 are valoarea 60. Ne mutam pe celula #2, incrementam de 5 ori, pentru a
|
||||
obtine valoarea 65, si apoi afisam valoarea celulei #2. 65 este codul ASCII
|
||||
pentru 'A', deci se afiseaza 'A' in terminal.
|
||||
|
||||
, [ > + < - ] > .
|
||||
|
||||
Acest program citeste un caracter de la intrarea utilizator si copiaza caracterul
|
||||
in celula #1. Apoi incepem un ciclu. Se muta pointerul in celula #2, se
|
||||
incremneteaza valoarea de la celula #2, se muta inapoi la celula #1, se
|
||||
decrementeaza valoarea de la celula #1. Aceasta continua pana cand celula #1 este
|
||||
0 iar celula #2 retine vechea valoare a celulei #1. Deoarece ne aflam in celula
|
||||
#1 la sfarsitul ciclului, ne mutam pe celula #2 si afisam simbolul corespunzator
|
||||
in ASCII.
|
||||
|
||||
Aveti in vedere ca spatiile sunt doar pentru usurinta citirii. La fel de bine
|
||||
programul ar fi putut fi scris astfel:
|
||||
|
||||
,[>+<-]>.
|
||||
|
||||
Incercati sa va dati seama ce face acest program:
|
||||
|
||||
,>,< [ > [ >+ >+ << -] >> [- << + >>] <<< -] >>
|
||||
|
||||
Acest program citeste doua numere ca intrare si le inmulteste.
|
||||
|
||||
Pe scurt, programul citeste doua date de intrare, apoi incepe ciclul
|
||||
mare, a carui conditie se afla in celula #1; apoi se muta la celula #2
|
||||
si incepe un ciclu imbricat a carui conditie de reluare se afla in
|
||||
celula #2, si care incrementeaza celula #3. Totusi aici intervine o
|
||||
problema: La sfarsitul ciclului imbricat, celula #2 este zero. In
|
||||
acest caz, celula ciclul imbricat nu va mai functiona data viitoare.
|
||||
Pentru a rezolva aceasta problema, incrementam celula si #4, si
|
||||
recopiem celula #4 in celula #2. In final, celula #3 este rezultatul.
|
||||
|
||||
```
|
||||
|
||||
Așadar acesta este limbajul brainfuck. Nu e atât de greu, nu? Pentru
|
||||
amuzament, puteți să scrieți propriile dumneavoastră limbaje, sau puteți
|
||||
scrie un interpretor pentru brainfuck într-un alt limbaj. Interpretorul
|
||||
este destul de ușor de implementat, dar dacă sunteți masochist, încercați
|
||||
să implementați un interpretor de brainfuck… în brainfuck.
|
Loading…
Reference in New Issue
Block a user