• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Text to Brainfuck Source

Object Storage Arubacloud
+1 głos
380 wizyt
pytanie zadane 28 września 2015 w Nasze projekty przez Tnifey Pasjonat (24,190 p.)
edycja 9 kwietnia 2016 przez Tnifey

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;
}

 

1 odpowiedź

+2 głosów
odpowiedź 28 września 2015 przez efiku Szeryf (75,160 p.)

- masz jakieś testy które potwierdzą, że ta funkcja działa ?

- wygląda na mocno przekombinowana IMHO

- No to refactor :)!

PS Nie skracaj zmiennych !
 

komentarz 28 września 2015 przez Tnifey Pasjonat (24,190 p.)

jak mi się będzie nudziło to napiszę nową wersję :) to było pisane że tak powiem na kolanie :)

print_r:

Array
(
    [string] => YouTube2014! BF
    [letters] => Array
        (
            [0] => Y
            [1] => o
            [2] => u
            [3] => T
            [4] => u
            [5] => b
            [6] => e
            [7] => 2
            [8] => 0
            [9] => 1
            [10] => 4
            [11] => !
            [12] =>  
            [13] => B
            [14] => F
        )

    [ascii] => Array
        (
            [0] => 89
            [1] => 111
            [2] => 117
            [3] => 84
            [4] => 117
            [5] => 98
            [6] => 101
            [7] => 50
            [8] => 48
            [9] => 49
            [10] => 52
            [11] => 33
            [12] => 32
            [13] => 66
            [14] => 70
        )

    [brainfuck] => Array
        (
            [0] => ++++++++[>++++++++++<-]>+++++++++.
            [1] => <+++++++++++[>>++++++++++<<-]>>+.
            [2] => <<+++++++++++[>>>++++++++++<<<-]>>>+++++++.
            [3] => <<<++++++++[>>>>++++++++++<<<<-]>>>>++++.
            [4] => <.>
            [5] => <<<<<+++++++++[>>>>>>++++++++++<<<<<<-]>>>>>>++++++++.
            [6] => <<<<<<++++++++++[>>>>>>>++++++++++<<<<<<<-]>>>>>>>+.
            [7] => <<<<<<<+++++[>>>>>>>>++++++++++<<<<<<<<-]>>>>>>>>.
            [8] => <<<<<<<<++++[>>>>>>>>>++++++++++<<<<<<<<<-]>>>>>>>>>++++++++.
            [9] => <<<<<<<<<++++[>>>>>>>>>>++++++++++<<<<<<<<<<-]>>>>>>>>>>+++++++++.
            [10] => <<<<<<<<<<+++++[>>>>>>>>>>>++++++++++<<<<<<<<<<<-]>>>>>>>>>>>++.
            [11] => <<<<<<<<<<<+++[>>>>>>>>>>>>++++++++++<<<<<<<<<<<<-]>>>>>>>>>>>>+++.
            [12] => <<<<<<<<<<<<+++[>>>>>>>>>>>>>++++++++++<<<<<<<<<<<<<-]>>>>>>>>>>>>>++.
            [13] => <<<<<<<<<<<<<++++++[>>>>>>>>>>>>>>++++++++++<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>++++++.
            [14] => <<<<<<<<<<<<<<+++++++[>>>>>>>>>>>>>>>++++++++++<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>.
        )

    [brainfuck-minify] => ++++++++[>++++++++++<-]>+++++++++.<+++++++++++[>>++++++++++<<-]>>+.<<+++++++++++[>>>++++++++++<<<-]>>>+++++++.<<<++++++++[>>>>++++++++++<<<<-]>>>>++++.<.><<<<<+++++++++[>>>>>>++++++++++<<<<<<-]>>>>>>++++++++.<<<<<<++++++++++[>>>>>>>++++++++++<<<<<<<-]>>>>>>>+.<<<<<<<+++++[>>>>>>>>++++++++++<<<<<<<<-]>>>>>>>>.<<<<<<<<++++[>>>>>>>>>++++++++++<<<<<<<<<-]>>>>>>>>>++++++++.<<<<<<<<<++++[>>>>>>>>>>++++++++++<<<<<<<<<<-]>>>>>>>>>>+++++++++.<<<<<<<<<<+++++[>>>>>>>>>>>++++++++++<<<<<<<<<<<-]>>>>>>>>>>>++.<<<<<<<<<<<+++[>>>>>>>>>>>>++++++++++<<<<<<<<<<<<-]>>>>>>>>>>>>+++.<<<<<<<<<<<<+++[>>>>>>>>>>>>>++++++++++<<<<<<<<<<<<<-]>>>>>>>>>>>>>++.<<<<<<<<<<<<<++++++[>>>>>>>>>>>>>>++++++++++<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>++++++.<<<<<<<<<<<<<<+++++++[>>>>>>>>>>>>>>>++++++++++<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>.
    [divide-by] => 10
)
komentarz 28 września 2015 przez efiku Szeryf (75,160 p.)

echo strToBrainfuck("2015 Krzysiek test github@com.cpl");
-> 
wsadzam otput kodu BF na http://brainfuck.tk/ 
dostaje 
-> 2015 Krzysiek tize2gKyhub@com.cpl

https://blackfire.io/profiles/9d8345f9-29e3-496b-b6ce-b9496c5c66b4/graph <- takie tam z profilera.

gdzieś coś musiało Ci się wkraść :) 
+ za napisanie tego w php, teraz refactor pewnie ^^

komentarz 28 września 2015 przez Tnifey Pasjonat (24,190 p.)
teraz to mnie przekonałeś :)
komentarz 9 kwietnia 2016 przez Tnifey Pasjonat (24,190 p.)
Po krótkiej przerwie zrobiłem refactor, myślę że teraz się nadaje do dalszej pracy.

Podobne pytania

+1 głos
2 odpowiedzi 509 wizyt
pytanie zadane 27 czerwca 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
0 głosów
1 odpowiedź 974 wizyt
pytanie zadane 20 lutego 2018 w Inne języki przez icytower Bywalec (2,110 p.)
0 głosów
1 odpowiedź 403 wizyt
pytanie zadane 20 października 2017 w Inne języki przez DragonCoder Nałogowiec (36,500 p.)

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...