Witam. Napisałem sobie klasę w C++, która symuluje program napisany w Brainfucku.

Klasa nazywa się BFSim i konstruujemy ją programem podanym jako string:

#include <iostream>
#include "bfsim.h"

using namespace std;

int main()
{
  string helloworld = "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.";
  BFSim sim(helloworld);

  string output;
  int ret = sim.run("",output);
  cout << "Wyjscie programu: " << output << endl;
  cout << "Kod bledu: " << BFSim::translateError(ret) << endl;
  return 0;
}

Klasę można użyć w dowolny sposób, nawet można zrobić jakiś wizualny "kompilator".

W pliku bfsim.h łatwo zobaczyć jakie parametry można podać metodom.

Napisałem również dodatkowo funkcję, która generuje rozwiązania problemów w Brainfucku.

Jak ona działa?
Losuje wszystkie możliwe programy o zadanej długości (z lekką optymalizacją, żeby nie losował zupełnie bezsensownych programów), po wygenerowaniu programu sprawdza czy program dobrze zwraca wyniki dla zadanych wejść i czy nie zwiesza się.
Oczywiście czas trwania rośnie wykładniczo, więc jeśli chcesz na szybko napisać 12 znakowy kod w Brainfucku albo sprawdzić czy jakiś poszczególnych fragmentów nie da się przyspieszyć to polecam. Pewnie rozwiązanie nie jest do końca najszybsze, ale wydaje mi się, że dobrze się sprawuje.

W załączniku wrzucam dwa projekty napisane w Code::Blocks:

  • widoczny wyżej Hello World!
  • przykład generowania rozwiązania

Chętnie posłucham uwag. Jeśli znajdziecie błąd to śmiało zgłaszajcie!

http://4programmers.net/Forum[...]cku?mode=download&id=1242