BrainLoller рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП php рдХреНрд▓рд╛рд╕ рд▓рд┐рдЦрдирд╛


(рдЙрджрд╛рд╣рд░рдг рдмреНрд░реЗрдиреЛрд▓рд░ рдХреЛрдб рдореЗрдВ рдХрдИ рдмрд╛рд░ рд╡реГрджреНрдзрд┐ рд╣реБрдИ)

BrainLoller Brainfuck рднрд╛рд╖рд╛ рдХреА рдПрдХ рджреГрд╢реНрдп рдмреЛрд▓реА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдЖрджреЗрд╢реЛрдВ рдХреЛ * .png рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рдЫрд╡рд┐ рд╕реЗ рдкрдврд╝реЗ рдЧрдП рд╡рд┐рднрд┐рдиреНрди рд░рдВрдЧреЛрдВ рдХреЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдмреНрд░реЗрдиреЛрд▓рд░ рдХреЛ 2005 рдореЗрдВ рд▓реЙрдб рд╡рд╛рдВрдбреЗрд╡реЗрди рджреНрд╡рд╛рд░рд╛ рдЧрдврд╝рд╛ рдЧрдпрд╛ рдерд╛ред
рдЖрджреЗрд╢реЛрдВ рдХреЗ рд░рдВрдЧреЛрдВ рдХреЛ рддреАрди RGB рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП 0xFF рдФрд░ 0x80 рдХреЗ рдорд╛рдиреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЖрджреЗрд╢реЛрдВ рдХреА рдирд┐рдореНрди рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рдереА:

Brainloller рдореЗрдВ рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдорд╛рдВрдб рднреА рдЬреЛрдбрд╝реЗ рдЧрдП рд╣реИрдВ - 0x00FFFF ( рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░рд╡реЙрдЯрд░ рдХрд╛ рд░реЛрдЯреЗрд╢рди) рдФрд░ 0x008080 ( рдХреНрд▓реЙрдХрд╡рд╛рдЗрдЬ рд░реЛрдЯреЗрд╢рди)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, "рдХреЛрдб" рдХреЛ рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рджреЛ-рдЖрдпрд╛рдореА рдЫрд╡рд┐ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рд░реНрджреЗрд╢ рд╕реВрдЪрдХ рдКрдкрд░реА рдмрд╛рдПрдВ рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ рд╣реИ рдФрд░ рджрд╛рдИрдВ рдУрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реИред рдЫрд╡рд┐ рдХреЛ рдкрд┐рдХреНрд╕реЗрд▓ рджреНрд╡рд╛рд░рд╛ рдкрд┐рдХреНрд╕реЗрд▓ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдмреНрд░реЗрдирдлрдХ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдмрд╛рдж, рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ рджреНрд╡рд╛рд░рд╛ рдЙрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕реЗ рд╣реА рдирд┐рд░реНрджреЗрд╢ рд╕реВрдЪрдХ рдЫрд╡рд┐ рд╕реЗ рдкрд░реЗ рдЬрд╛рддрд╛ рд╣реИ, рд╡реИрд╕реЗ рд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред ( рд╕реНрд░реЛрдд )

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдмреНрд░реЗрдиреЛрд▓рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реЗрдЯ рдЦреЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЕрдВрддрд░ рдХреЛ рднрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ)


рдХрдХреНрд╖рд╛ рд▓рд┐рдЦрдирд╛


рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

рдЕрдм рд╣рдореЗрдВ php рдореЗрдВ Brainfuck рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рд╕рд╛рдЗрдХрд┐рд▓ рдмрдирд╛рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдмрд╕ рдкрд┐рдХреНрд╕рд▓ рдХреЛ рд╕рд╛рдзрд╛рд░рдг Brainfuck рдХрдорд╛рдВрдб рдХреЗ рд╕реЗрдЯ рдореЗрдВ рдмрджрд▓ рджреЗрдЧреА (рд╣рдо рдЫрд╡рд┐ рдХреЗ рдЕрдВрддрд╣реАрди рд▓реВрдк рд╣реЛрдиреЗ рдкрд░ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ), рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕ рдПрдХ рдХреЛ рдмрдЪрд╛рдпрд╛ рдФрд░ рдЗрд╕реЗ рдмрдЪрд╛рдпрд╛ рдЬреИрд╕реЗ brainfuck.class.phpред рдЗрд╕ рд╡рд░реНрдЧ рдиреЗ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд▓рд╛рдЗрди 79 рдкрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджрдмрд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ @
рдЖрдк рдХреЛрдбрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдореЗрдВ brainloller.class.php рдФрд░ index.php рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд╣рд▓реА рдлрд╝рд╛рдЗрд▓ рд╡рд╣ рд╡рд░реНрдЧ рд╣реЛрдЧреА рдЬрд┐рд╕реЗ рд╣рдо рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рджреВрд╕рд░рд╛ рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдЧрд╛ред

рдЕрдм рдХрдХреНрд╖рд╛ рдХрд╛ рд╡рд░реНрдгрди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдУрдкрди рдмреНрд░реЗрдиреЛрд▓рд░ .class.php рдФрд░ рдЬреЛрдбрд╝реЗрдВ
<?php class BrainLoller { protected $picture; //    function __construct($picture){ //   $this->picture = imagecreatefrompng($picture); } function __destruct(){ imagedestroy($this->picture); //    } } 

рд╣рдо рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдФрд░ рдПрдХ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЬреАрдбреА рдЪрд┐рддреНрд░ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВред рдЪрд┐рддреНрд░ $ рдЪрд┐рддреНрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдм рд╣рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЫрд╡рд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдПрдЧрд╛, рдЪрд▓реЛ рдЗрд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░реЗрдВ getCode ()ред
рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдХреНрд▓рд╛рд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛
 <?php define('DIRECTION_UP', 0); define('DIRECTION_RIGHT', 1); define('DIRECTION_DOWN', 2); define('DIRECTION_LEFT', 3); /*  - - 0 - - */ class BrainLoller { protected $picture; //  BrainLoller protected $pointer = DIRECTION_RIGHT; //       (0 = 'up', 1 = 'right', 2 = 'down', 3 = 'left') function __construct($picture){ //    $this->picture = imagecreatefrompng($picture); //    $size = getimagesize($picture); $this->size['w'] = $size[0]; $this->size['h'] = $size[1]; } public function getCode(){ $current_pixel = array(0, 0); //   (x, y) $this->pointer = DIRECTION_RIGHT; $code = ''; for(;;){ if($current_pixel[0] > $this->size['w'] or $current_pixel[1] > $this->size['h'] or $current_pixel[0] < 0 or $current_pixel[1] < 0) break; //        $pixel_color = imagecolorat($this->picture, $current_pixel[0], $current_pixel[1]); //    $pixel_color = array( ( ($pixel_color >> 16) & 0xFF ), // Red ( ($pixel_color >> 8) & 0xFF ), // Green ( $pixel_color & 0xFF ), // Blue ); //      ,    ,      $code switch($pixel_color){ case array(0, 255, 0): // + $code .= '+'; break; case array(0, 128, 0): // - $code .= '-'; break; case array(255, 0, 0): // > $code .= '>'; break; case array(128, 0, 0): // < $code .= '<'; break; case array(255, 255, 0): // [ $code .= '['; break; case array(128, 128, 0): // ] $code .= ']'; break; case array(0, 0, 255): // . $code .= '.'; break; case array(0, 0, 128): // , $code .= ','; break; case array(0, 255, 255): // <- if($this->pointer + 1 > DIRECTION_LEFT) $this->pointer = 0; else $this->pointer += 1; break; case array(0, 128, 128): // -> if($this->pointer - 1 < DIRECTION_UP) $this->pointer = 3; else $this->pointer -= 1; break; } switch($this->pointer){ case DIRECTION_UP: $current_pixel[1] -= 1; break; case DIRECTION_RIGHT: $current_pixel[0] += 1; break; case DIRECTION_DOWN: $current_pixel[1] += 1; break; case DIRECTION_LEFT: $current_pixel[0] -= 1; break; } } return $code; } function __destruct(){ imagedestroy($this->picture); //    } } 

рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рдЕрдирдВрдд рд▓реВрдк рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЫрд╡рд┐ рдХреА рд╕реАрдорд╛ рд╕реЗ рдкрд░реЗ рдЪрд▓реЗ рдЧрдП рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЫрд╡рд┐ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЕрдВрдд рд╣реИред
рдлрд┐рд░ рд╣рдореЗрдВ рдЖрд░рдЬреАрдмреА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рд░рдВрдЧ рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдЯреАрдо рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред
рдпрджрд┐ рд░рдВрдЧ рдмреНрд░реЗрдирдлрдХ рдХреЛрдб рдХрдорд╛рдВрдб рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ, рддреЛ рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдЕрдВрддрд┐рдо рдХреЛрдб рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдпрджрд┐ рд░рдВрдЧ рд░реЛрдЯреЗрд╢рди рдХрдорд╛рдВрдб рд╣реИ, рддреЛ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЪрд╛рд▓реВ рдХрд░реЗрдВред
рдлрд┐рд░, рд╕реВрдЪрдХ рдХрд┐рд╕ рджрд┐рд╢рд╛ рдореЗрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реИ, рдкрд┐рдХреНрд╕реЗрд▓ рдкрддрд╛ (рд╕реВрдЪрдХ рдХреЗ рдЯрдХрдЯрдХреА рдХреА рдУрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВ) рдХреЛ рджреЗрдЦреЗрдВред
рдЬрдм рдЪрдХреНрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдЫрд╡рд┐ рд╕реЗ рдкрд░реЗ рдЪрд▓реЗ рдЧрдП рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдЖрдЧреЗ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

Index.php рдореЗрдВ рдПрдХ рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдПрдВ
 <?php require 'brainloller.class.php'; require 'brainfuck.class.php'; $brainloller = new BrainLoller('hello-world.png'); $brainfuck = new Brainfuck($brainloller->getCode(), 1); $brainfuck->run(); 

рдпрд╣рд╛рдВ рд╣рдо рджреЛрдиреЛрдВ рд╡рд░реНрдЧреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рд╕реЗ рдмреНрд░реЗрдирдлрдХ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рджреВрд╕рд░реЗ рд╡рд░реНрдЧ рд╕реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд▓реЗрдЦрдХ (рдлрд┐рд░ рд╕реЗ, рдореИрдВ рдХрдо рд╕реЗ рдХрдо рдкрд╣рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рд▓рдЧрд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрджрд┐ рд╡реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ рдФрд░ рд▓реЗрдЦрдХ рд╕рдВрдкрд░реНрдХ рдХрд░рддрд╛ рд╣реИ)

рдЕрдВрддрд┐рдо рдХреЛрдб рдЬреАрдердм рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред ( рджрд░реНрдкрдг )

рдкреБрдирд╢реНрдЪ


рдореИрдВ рдФрд░ рдХрд┐рд╕рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд╕рдХрддрд╛ рд╣реВрдВ?

Source: https://habr.com/ru/post/In128539/


All Articles