Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.220.126.5] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
сам компиль большой, встроен прямо в HTML, причём там есть некоторые лишние вещи, вроде стека (пока бегаешь влево\вправо, можно буковки, которые потом понадобятся - отправить в стек, а потом извлечь - через двоеточие указывая смещение в стеке (прямо как в ассемблере блин ))
Добавлено Короче там явно больше 150 байт Добавлено Цитата Sunny @ Serafim Не, ну ты хоть скажи на каком этапе сейчас, у меня пока 157 байт, меньше не получается а ты что, тоже этим издевательством заразился? |
Сообщ.
#17
,
|
|
|
В общем что получилось:
<? /* Create by Sunny (e-boxes@list.ru, 288-681-633) Simply brain fuck */ function obfuscate($code){ $code = preg_replace("~//.+\n~isU", "", $code); $code = str_replace(array("\n", "\t", " "), "", $code); return $code; } // vars $s = array( 'a','b','c','d','e', 'f','g','h','i','j', 'k','l','m','n','o', 'p','q','r','s','t', 'u','v','w','x','y', 'z','1','2','3','4', '5','6','7','8','9', '0','"','(',')','=', '+','-','*','>','<', '.','/',',',':','!', '[',']','_','$','{', '}','а','б','в','г', 'д','е','ё','ж','з', 'и','й','к','л','м', 'н','о','п','р','т', 'у','ф','х','ц','ч', 'ш','щ','ь','ы','ъ', 'э','ю','я','\\','A', 'B','C','D','E','F', 'G','H','I','J','K', 'L','M','N','O','P', 'Q','R','S','T','U', 'V','W','X','Y','Z', ' ',';'); $d = ">>>>^<<^>>>>>^>>>>>>>^v<<^v>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>^v>>>>>>>^>v>>>>^>>>>>>>^^>>>^v<<^v>>>>>>>>>>>>>>>>>>>>>>^<<<<<<<<^>>>^<<<<<<^v>>>^v>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>^v<^"; // first variant $first = ' $a = str_split($d); // split crypt string $i = 0; // index while($b = each($a)){ // array while if($b[1] == ">"){ // next iteration $i++; continue; } if($b[1] == "v"){ // clear index $i = 0; continue; } if($b[1] == "<"){ // back iteration if($i <= 0){ $i = count($s); } $i--; continue; } echo $s[$i]; } '; // second variant $second = ' $a = str_split($d); // split crypt string $i = 0; // index while($b = each($a)){ // array while switch($b[1]){ case ">": // next iteration $i++; break; case "v": // clear index $i = 0; break; case "<": // back iteration if($i <= 0){ $i = count($s); } $i--; break; default: echo $s[$i]; } } '; ?> First variant (<?=strlen(obfuscate($first));?>b):<br> <?=obfuscate($first);?><br> <?eval($first);?><br><br> Second variant (<?=strlen(obfuscate($second));?>b):<br> <?=obfuscate($second);?><br> <?eval($second);?> Результат: First variant (167b): $a=str_split($d);$i=0;while($b=each($a)){if($b[1]==">"){$i++;continue;}if($b[1]=="v"){$i=0;continue;}if($b[1]=="<"){if($i<=0){$i=count($s);}$i--;continue;}echo$s[$i];} echo "hello world"; Second variant (157b): $a=str_split($d);$i=0;while($b=each($a)){switch($b[1]){case">":$i++;break;case"v":$i=0;break;case"<":if($i<=0){$i=count($s);}$i--;break;default:echo$s[$i];}} echo "hello world"; |
Сообщ.
#18
,
|
|
|
ОМГ У меня 1.66 КБ
Код передаётся через POST['compile'] <?php $foobar = array('/','\\','>','<','!','^','v'); $sym = array( 'a','b','c','d','e', 'f','g','h','i','j', 'k','l','m','n','o', 'p','q','r','s','t', 'u','v','w','x','y', 'z','1','2','3','4', '5','6','7','8','9', '0','"','(',')','=', '+','-','*','>','<', '.','/',',',':','!', '[',']','_','$','{', '}','а','б','в','г', 'д','е','ё','ж','з', 'и','й','к','л','м', 'н','о','п','р','т', 'у','ф','х','ц','ч', 'ш','щ','ь','ы','ъ', 'э','ю','я','\\','A', 'B','C','D','E','F', 'G','H','I','J','K', 'L','M','N','O','P', 'Q','R','S','T','U', 'V','W','X','Y','Z', ' ',';'); # v - сбрасывает счётчик на ноль # > - переносит каретку влево # < - переносит каретку вправо # \ - отправляет данные в стек # / - вытаскивает данные из стека # ! - меняет местами последний и предпоследний элемент стека # ^ - отправляет символ в программный стек $kar = 0; // Каретка $stack = array(); if(isset($_POST['compile'])){ $prog = @$_POST['compile']; if($ep = trim(str_replace($foobar, '', $prog))){ die('Unexpected symbol: '.$ep[0]); }else{ echo 'Compile complete: '.time(); } $exec = ''; for($i=0; $i<strlen($prog); $i++){ if($prog[$i] == '>'){ $kar==count($sym)?$kar=0:$kar++; }else if($prog[$i] == '<'){ $kar==0?$kar=count($sym)-1:$kar--; }else if($prog[$i] == 'v'){ $kar=0; }else if($prog[$i] == '^'){ $exec .= $sym[$kar]; } } eval($exec); echo '<hr/>['.$exec.']'; } ?> Добавлено ой, это не то Добавлено а ну пофиг, тоже работает |
Сообщ.
#19
,
|
|
|
Serafim
Проверок всяких много, у меня немного проще и проверка на switch'е висит, на 10 |
Сообщ.
#20
,
|
|
|
Дык яж не на размер, у меня там всё откомменчено ещё. Тем более это не Бреинфак Сам как бы придумываю)
Добавлено У меня как бы творческий процесс Добавлено Цитата Sunny @ Проверок всяких много Патамушта почти полноценный компиль |
Сообщ.
#21
,
|
|
|
Ну как минимум массив значений можно хранить в строке, и обращаться к символу, а не к элементу, это как известно идентично в случае PHP и одно-байтовой кодировки.
|
Сообщ.
#22
,
|
|
|
Pr0[)!9Y, угу, согласен Только у меня юникод
Добавлено Сделал что-то вроде категорий, т.е. теперь это матрица. Добавил стек (точнее обычный массив, но из-за схожести с с ассемблерным стеком, в который набиваются всякие временные числа, буду называть так) и сдвиг. Новые символы: # v - переносит каретку вниз (mas[*][*]) # > - переносит каретку вправо(mas[*][*]) # < - переносит каретку влево(mas[*][*]) # ^ - переносит каретку вверх (mas[*][*]) # % - обнуляет каретку (позиция 0,0 - mas[0][0]) # * - отправляет данные в стек (stack[] = mas[x][y]) # & - вытаскивает данные из стека в программный (exec[] = stack[0]) # : - указывает сдвиг в стеке (в формате "&:2" - (exec[] = stack[&:X])) # ! - отправляет символ в программный стек (на выполнение) <?php $matrix = array( array('1','2','3','4','5','6','7','8','9','0'), array( '"','(',')','=','+','-','*','>','<','.', '/',',',':','!','[',']','_','$','{','}', ' ', ';' ), array( 'a','b','c','d','e','f','g','h','i','j', 'k','l','m','n','o','p','q','r','s','t', 'u','v','w','x','y','z' ), array( 'A','B','C','D','E','F','G','H','I','J', 'K','L','M','N','O','P','Q','R','S','T', 'U','V','W','X','Y','Z' ), array( 'а','б','в','г','д','е','ё','ж','з','и', 'й','к','л','м','н','о','п','р','c','т', 'у','ф','х','ц','ч','ш','щ','ь','ы','ъ', 'э','ю','я' ), array( 'А','Б','В','Г','Д','Е','Ё','Ж','З','И', 'Й','К','Л','М','Н','О','П','Р','С','Т', 'У','Ф','Х','Ц','Ч','Ш','Щ','Ь','Ы','Ъ', 'Э','Ю','Я' ) ); # v - переносит каретку вниз # > - переносит каретку вправо # < - переносит каретку влево # ^ - переносит каретку вверх # % - обнуляет каретку # * - отправляет данные в стек # & - вытаскивает данные из стека # : - указывает сдвиг в стеке # ! - отправляет символ в программный стек /// V - Вертикальный сдвиг (число) /// H - Горизонтальный сдвиг (число) /// S - Системный стек (массив) /// P - Программный стек (строка) $stack['v'] = 0; $stack['h'] = 0; $stack['s'] = array(); $stack['p'] = ''; /// Массив системных символов $sysNames = array('v', '>', '<', '^', '*', '&', ':', '!', '%'); /// $programm - программа на выполнение $programm = @$_POST['compile']; if($exec = trim(str_replace($sysNames, '', str_replace($matrix[0], '', $programm)))) die('Undefined symbol: '.$exec[0]); for($i=0; $i<strlen($programm); $i++){ switch($programm[$i]){ case 'v': $stack['v']==count($matrix)-1?$stack['v']=0:$stack['v']++; break; case '^': $stack['v']==0?$stack['v']=count($matrix)-1:$stack['v']--; break; case '>': $stack['h']==count($matrix[$stack['v']])-1?$stack['h']=0:$stack['h']++; break; case '<': $stack['h']==0?$stack['h']=count($matrix[$stack['v']])-1:$stack['h']--; break; case '%': $stack['h']=0; $stack['v']=0; break; case '*': $stack['s'][]=$matrix[$stack['v']][$stack['h']]; break; case '&': if($programm[$i+1] == ':'){ $stackNum = ''; for($j=0;(int)$programm[$i+2+$j];$j++){ $stackNum .= (string)$programm[$i+2+$j]; } }else{ $stackNum = 0; } $stack['p'] .= $stack['s'][$stackNum]; unset($stackNum); break; case '!': $stack['p'] .= $matrix[$stack['v']][$stack['h']]; break; } } $result['eval'] = $stack['p']; $result['stack'] = $stack['s']; $result['programm'] = $programm; ?> |
Сообщ.
#23
,
|
|
|
Новый вариант "Привет мир!"
Цитата vv>>>>!*<<!>>>>>!*>>>>>>>!*^>>>>>>!*%v!*v&:1&>>>>>>>>>>>!!&:2&:3>>>>>>>>>>>!&:2<<<<<!<<<<<<!%vv>>>!&:4^<<<<! Добавлено Минимизированная полная версия компилятора (1351 байта ): <?php $m=array(array('1','2','3','4','5','6','7','8','9','0'),array('"','(',')','=','+','-','*','>','<','.','/',',',':','!','[',']','_','$','{','}','',';'),array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'),array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'),array('а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','c','т','у','ф','х','ц','ч','ш','щ','ь','ы','ъ','э','ю','я'),array('А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ь','Ы','Ъ','Э','Ю','Я'));$s['v']=0;$s['h']=0;$s['s']=array();$s['p']='';$z=array('v','>','<','^','*','&',':','!','%');$p=@$_POST['compile'];if($e=trim(str_replace($z,'',str_replace($m[0],'',$p))))die('Undefined symbol:'.$e[0]);for($i=0;$i<strlen($p);$i++){switch($p[$i]){case'v':$s['v']==count($m)-1?$s['v']=0:$s['v']++;break;case'^':$s['v']==0?$s['v']=count($m)-1:$s['v']--;break;case'>':$s['h']==count($m[$s['v']])-1?$s['h']=0:$s['h']++;break;case'<':$s['h']==0?$s['h']=count($m[$s['v']])-1:$s['h']--;break;case'%':$s['h']=0;$s['v']=0;break;case'*':$s['s'][]=$m[$s['v']][$s['h']];break;case'&':if($p[$i+1]==':'){$g='';for($j=0;(int)$p[$i+2+$j];$j++)$g.=(string)$p[$i+2+$j];}else$g=0;$s['p'].=$s['s'][$g];break;case'!':$s['p'].=$m[$s['v']][$s['h']];break;}}$result['eval']=$s['p'];$result['s']=$s['s'];$result['p']=$p; Добавлено Компилятор (интерпретатор) в рабочем состоянии доступен там же: ht_tp://gamecomunity.ru/compile.php |