Prosta zamiana tekstu na kod Brainfucka.
Stara wersja (nie działa tak jak powinno): strToBrainfuck($string);
PS: Ktoś się pytał czy istnieje taki kod :) https://forum.pasja-informatyki.pl/64400/czy-istnieje-program-ktory-bedzie-przeksztalacal-tekst-na-kod-zrodlowy-brainfucku
@Edit:
Witam, ostatnio zrobiłem refactor dawnej funkcji. Teraz to wygląda lepiej i zwięźle. Mam nadzieję, że też to jakoś opisałem jak należy.
# to_brainfuck function by Tnifey
# object to_brainfuck(string $string[, bool $print = true]);
function to_brainfuck($string, $print = true)
{
# zamiana stringu w tablicę
$letters = str_split($string);
# stworzenie zmiennej przechowującej kod programu
$brainfuck = '';
# jazda pętlą przez wszystkie litery
foreach($letters as $id => $letter)
{
# zamiana litery w kod ascii
$ord = ord($letter);
# zaokrąglanie kodu ascii do dziesiątek
$round = round($ord, -1, PHP_ROUND_HALF_DOWN);
# różnica pomiędzy kodem ascii a zaokrągleniem
$difference = $ord - $round;
# ile razy będzie trzeva pomnożyć
$multiply = $round / 10;
# docelowa pozycja litery
$position = $id + 1;
# tworzenie zmiennych
$go_to_temp = "";
$go_to_position = "";
# pętla która tworzy drogę do pozycji 0 oraz do docelowej pozycji litery
for($i = $position; $i > 0; $i--)
{
$go_to_temp .= "<";
$go_to_position .= ">";
}
# iloczyn
$repeat = str_repeat("+", $multiply);
# różnica | dodaje lub odejmuje po pętli
if($difference > 0)
$rest = str_repeat("+", $difference);
elseif($difference < 0)
$rest = str_repeat("-", -$difference);
else
$rest = null;
# drugi iloczyn w pętli
$times = str_repeat("+", 10);
# dopisywanie kodu brainfucka i wypisanie go
$brainfuck .= "{$repeat}[{$go_to_position}{$times}{$go_to_temp}-]{$go_to_position}{$rest}";
# dodaje kropkę po każdej literze
if($print)
$brainfuck .= ".";
# jeśli litera nie jest ostatnią, wraca do pozycji 0
if($position !== count($letters))
$brainfuck .= "{$go_to_temp}";
}
$return = (object) array(
"string" => $string,
"program" => $brainfuck
);
return $return;
}